一、环境规划
keepalive版本:keepalive-1.2.19 前端双nginx+Keepalived,Nginx反向代理到后端tomcat集群实现负载均衡,Keepalived实现集群的高可用,主用Nginx出现故障后,虚拟IP自动漂移到备用Nginx。
主nginx:192.168.60.48
备用nginx:192.168.60.49
虚拟IP:192.168.60.50
后端tomcat集群:192.168.60.51,192.168.60.52,192.168.60.53
每台后端主机开放两个端口提供服务:16915和16916。
二。安装
两台前端主机分别安装nginx和keepalived。
1)编译并安装keepalived
注意:keepalived也可以用yum安装,但是版本低一些。
2)RPM包安装Nginx
nginxyum官方来源:
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ enabled=1 gpgcheck=0设置源之后,您可以直接安装它:
yum install nginx chkconfig nginx on三。配置
1)前端两台主机nginx的配置完全相同
2)保持nginx_master的有效配置
[root@nginx_master ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id nginx-ha1 } vrrp_script check_nginx { # 检查nginx状态的脚本,文章后面给出 script "/data/script/check_nginx.sh" # 执行间隔2秒 interval 2 } vrrp_instance VI_1 { # 两台主机都是BACKUP state BACKUP interface eth0 # 同一keepalived集群的virtual_router_id 必须相同,默认51 virtual_router_id 55 # 主的优先级高 priority 100 advert_int 1 # 不抢占:如果集群里已存在MASTER状态的主机,即使优先级高于MASTER也不抢占为MASTER。只在优先级高的主机上设置即可。 nopreempt authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { # 虚拟IP 192.168.60.50 } track_script { check_nginx } }3)保持nginx_slave的有效配置
[root@nginx_slave ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id nginx-ha2 } vrrp_script check_nginx { script "/data/script/check_nginx.sh" interval 2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 55 # 备的优先级低 priority 80 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.60.50 } track_script { check_nginx } }4)防火墙设置
VRRP报文通过IP组播发送,组播地址224.0.0.18是VRRP报文的目的地址。
在本实验中,两台主机都是备份主机。如果同时启动keepalived,VRRP协议将通过选举使优先级高的主机成为主节点。如果防火墙不允许VRRP消息通过,两台备份主机都将成为主主机,您会发现两台主机都启动了虚拟IP。
5)部署nginx状态检查脚本check_nginx.sh
/data/script/check_nginx.sh按如下方式检查脚本:
每个人都是根据自己的环境来写nginx状态检查脚本的,不必照搬。
设置脚本的可执行权限:
补充:如果nginx恢复正常后keepalived不能自动启动,需要写一个脚本来完成这项工作:判断nginx正常后,拉起keepalived。脚本放在cron中,每分钟执行一次。
6)打开keepalived的日志
编辑/etc/sysconfig/keepalived:
KEEPALIVED_OPTIONS="-D -d -S 0"Edit/etc/rsyslog.conf:
重新启动rsyslog:
service rsyslog restart根据上面的配置,keepalived会将日志记录到/var/var/log/keepalived.log
7)启动服务
# 先检查nginx配置文件正确性 nginx -t # 启动nginx服务 service nginx start # 同时启动keepalived服务 service keepalived start # 过一会查看虚拟IP是否在nginx_master主机上 ip a四。验证
NGX_MASTER和nginx_slave同时开始保持激活状态。观察log/var/log/keepalived.log,你会发现nginx_master抢占了master,绑定了虚拟IP192.168.60.50。
nginx_master:
nginx_slave:
我们去同网段其他机器上ARP虚IP的mac,发现是nginx_mastereth0的MAC:
让我们停止或重启nginx_master的keepalived服务,不断ping虚拟IP。在请求超时间隔之后,虚拟IP将漂移到nginx_slave:
nginx_slave:
我们再去arping一下虚拟IP的mac,发现变成了nginx_slaveth0的MAC:
看nginx_slave的日志keepalived.log,nginx_slave在成为主的同时发送了免费ARP(无偿ARP),更新了以太网邻居的ARP缓存:
VRRP_Instance(VI_1) Entering MASTER STATE VRRP_Instance(VI_1) setting protocol VIPs. VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.60.50最后nginx_MASTER的keepalived服务开启,虚拟IP不漂移回nginx_master。这是因为nginx_master开启了非抢占模式,即使优先级高也不会抢占主。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)