Keepalived+Nginx负载均衡高可用

为了解决实验室每次演示项目的稳定性,提高项目的可用性。现在搭建一个Keepalived+Nginx的负载均衡高可用的一个环境。设置一个VIP地址,里面配置两个真实IP的地址,当一天Nginx服务器宕机之后,VIP会自动跳转到另一台Nginx服务上去,从而实现了高可用。

1.系统环境

系统为Centos 7.3

Keepalived的安装包为keepalived-1.2.16.tar.gz

Nginx的安装包为nginx/1.10.1

网络环境配置

进入/etc/sysconfig/network-scripts目前这两台虚拟机上都有两块网卡,第一块是外网网卡,第二块是内网网卡,基本信息如下:

虚拟IP 真实IP Nginx端口 默认主从 软件
59.69.29.10 59.68.29.xx 80 MAATER Keepalived+Nginx
59.69.29.10 59.68.29.xx 80 BACKUP Keepalived+Nginx

2.虚拟路由冗余协议(VRRP)

VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。

虚拟路由器冗余协议【原理篇】VRRP详解

3.Keepalived原理介绍

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器

image.png

1、刚开始VIP绑定到MASTER机器,对外提供VIP访问,实际访问的是MASTER机器

2、如果Nginx宕机,对外不可服务,则VIP会重新漂移到新的BACKUP机器上面,新的BACKUP重新选举MASTER机器,从而解决Nginx的单点故障问题

3、VIP选择问题

此架构需考虑的问题:

1、Master运行,则Master占有vipNginx能够正常服务;

2、Master挂了,则Backup抢占vipNginx能够正常服务

3、任何一台前端nginx服务挂了,则vip资源转移到另一台服务器上,并发送提醒邮件;

4、由于应用需要Session保持,但由于没有做Session共享,实际服务器角色转换时,应用会受到一定的影响。

4.Nginx安装与配置

分别在两台虚拟机(MASTER和BACKUP节点)上安装Nginx,安装Nginx的教程请看之前的一篇博客。

5.Keepalived的安装与配置

1.上传或下载 keepalived-1.2.16.tar.gz/usr/local/ 目录下,新建keepalived 目录,

2.解压安装,进入/usr/local 执行tar -zxvf keepalived-1.2.16.tar.gz

3.进入解压后的目录cd keepalived-1.2.16

  • 指定编译路径:./configure --prefix=/usr/local/keepalived
  • 编译安装:make && make install

4.将keepalived安装成Linux系统服务

复制默认的配置文件到默认路径:安装完成后,进入安装目录的etc目录下,将keepalived相应的配置文件拷贝到系统相应的目录当中。keepalived启动时会从/etc/keepalived目录下查找keepalived.conf 配置文件,如果没有找到测使用默认的配置。

#拷贝执行文件
cp /usr/local/keepalived/sbin/keepalived  /usr/sbin/

#将init.d文件拷贝到etc下,加入开机启动项
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/keepalived

#将keepalived文件拷贝到etc下
cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/

#创建Keepalived文件夹
mkdir -p /etc/keepalived

#将keepalived配置文件拷贝到etc下
cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf

#添加可执行权限
chmod +x /etc/init.d/keepalived

设置keepalived服务开机启动:

chkconfig keepalived on

systemctl enable keepalived.service #设置开机自动启动
systemctl disable keepalived.service     #取消开机自动启动
systemctl start keepalived.service       #启动服务
systemctl restart keepalived.service     #重启服务
systemctl stop keepalived.service         #停止服务
systemctl status keepalived.service      #查看服务状态

Keepalived配置文件详解

在MASTER节点上,进入/usr/local/keepalived/etc/keepalived 这个目录下,打开配置文件keepalived.conf 如下:

! Configuration File for keepalived
#全局配置段
global_defs {
    #通知邮件配置块
   notification_email {  
        root@localhost  #通知邮件收件人
   }
   #通知邮件发件人
   notification_email_from root@localhost
   #邮件服务器地址
   smtp_server localhost
   #邮件服务器连接超时时间
   smtp_connect_timeout 30
   #机器表示,通常设置为本机的hostname(本机是slave1)
   router_id LVS_DEVEL
}

#配置vrrp_script,主要用于健康检查,以及检查失败后执行的动作。
vrrp_script chk_nginx {
#健康检查脚本,当脚本返回值不为0时认为失败
    script "/etc/keepalived/ck_ng.sh"
#检查频率,以下配置每2秒检查1次
    interval 2
#当检查失败后,将vrrp_instance的priority减小5
    weight -5
#连续监测失败3次,才认为真的健康检查失败。并调整优先级
    fall 3
#连续监测2次成功,就认为成功。但不调整优先级
    rise 2
}

#VRRP实例配置段
vrrp_instance VI_1 {
    #指定vrrp_instance的初始状态。但如果master的优先级比某个backup还低,那么在通告时,那台backup就会抢占master
    state MASTER
    #绑定虚拟IP的网络接口,与本机IP地址所在的网络接口相同
    interface ens32
    #发送心跳包的源IP,可使用绑定的网卡IP,也可以使用本服务器上的其他IP
     mcast_src_ip 172.16.97.252
    #设置虚拟路由器标识(范围0-255)。只有相同的标识,才能实现在多播域内通告优先级以及其他信息(主从要一致)
    virtual_router_id 51
    #设置本机节点的优先级,优先级最高的为真正的MASTER
    priority 100
    #每隔多长时间通告并检查一次,默认为1秒
    advert_int 1
    #定义认证方式和密码。MASTER/BACKUP必须一样
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    
#本vrrp_instance所引用的脚本配置,名称就是vrrp_script 定义的容器名
track_script {
    chk_nginx
    }
    #设置VIP地址,也就是虚拟IP地址。可以设置多个VIP;只有当节点为MASTER时,此IP才会生效(每行一个)
    virtual_ipaddress {
        59.68.29.10/24
    }
}

在BUCKUP的节点上只需将:

route_id vs1 >> route_id vsN 只需要修改vs后的数字为backup的机器编号即可
state MASTER >> state BACKUP 在这之前我们说过,Master只能有一个,所以其他BAKCUP都要修改这里
priority 100 >> priority 90 其他BACKUP节点的优先级一定要比Master节点小

添加Nginx监控脚本,监控Nginx的运行状态,如果发现异常并不能重启成功则关闭Keepalived,让VIP漂移到备份服务器

vim  /etc/keepalived/ck_ng.sh

配置内容如下:

#!/bin/bash
#检查nginx进程是否存在
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
#尝试启动一次nginx,停止5秒后再次检测
    service nginx start
    sleep 5
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
#如果启动没成功,就杀掉keepalive触发主备切换
        service keepalived stop
    fi
fi

增加监控脚本的执行权限,设置keepalived开机启动

chmod +x /etc/keepalived/ck_ng.sh
systemctl enable keepalived.service

如果是自己测试练着玩的话,本机直接访问vip就可以了.如果应用到生产环境,还需有一个外网IP映射到VIP,然后申请一个域名解析到这个外网IP

如何解决session问题

ip_hash(只能解决不宕机的情况的)

#利用每个请求按访问的ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
upstream  mgmt {
        server  59.68.29.xx:19666;
        server  59.68.29.xx:19666;
        ip_hash;
 }

Tomcat session复制(测试可行)

1、对于每一个server.xml

 <Engine name="Catalina" defaultHost="localhost">

2、在Engine标签内增加

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
image.png

3、在程序的web.xml的web-app结束前增加 <distributable/>

image.png

4、session复制需用组播添加static route(这一步没有使用)

vim /etc/sysconfig/network-scripts/route-eth0
增加
192.0.2.0/24 dev eth0 scope host
default via 192.0.2.1
192.168.2.0/24 via 192.168.13.1 dev eth0

service network restart

6.参考资料

https://www.cnblogs.com/GreedyL/p/7519969.html

https://blog.csdn.net/qq_36243993/article/details/56958793

https://yq.aliyun.com/articles/42261

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容