nginx可实现应用的负载均衡、反向代理,但当nginx服务或服务器不可用时,后端应用也将无法访问,为解决nginx的单点故障问题,故引入VIP、keepalived,真正实现应用架构的高可用
引入的VIP即虚拟ip,不是nginx服务器的真实IP,而是一个虚拟的“漂移的”IP,为实现nginx服务的高可用,nginx将存在多台服务器(>=2),每台对应的后端应用服务器集群的配置应保持一致,为保障nginx能7*24的提供负载均衡或反向代理的服务,在多台nginx服务器中选择1台进行服务,那么怎么选择这台呢?这就是VIP的意义,根据keepalived中配置的规则(优先级排序),priority最高的那个将绑定VIP,成为mater,其余主机成为BACKUP,master将一直发送组播信息,而当master挂或者由于priority降低将导致它推出master的角色,backup收不到组播信息后就认为master已挂,这时他们之间会进行抢占、选举,再根据priority选出master。
192.168.10.134 安装nginx、keepalived
yum install keepalived
修改keepalived配置文件:
[root@node1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { router_id node1 #标识本节点的名称,通常为hostname } vrrp_script chk_nginx { script "/data/sh/check_nginx.sh" #定义检查脚本 interval 2 #每2s检查一次 weight -20 #若脚本执行失败则将priority-20 } vrrp_instance VI_1 { #定义第一个示例 state MASTER #标识角色为master interface ens33 #定义接口名称、即本机的网卡名称、通过 ifconfig得到 virtual_router_id 51 #定义房间号,主备必须保持一致 priority 100 #定义本机的优先级,master要比backup高 advert_int 1 #组播信息发送时间间隔,两个节点必须设置一样,默认为1秒 # 设置验证信息,两个节点必须一致 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.200.16 #设置VIP } track_script { #设置nginx的检查脚本,必须在vrrp_script中有定义 chk_nginx } }
检查脚本的内容:
[root@node1 ~]# cat /data/sh/check_nginx.sh #!/bin/sh killall -0 nginx &>/dev/null if [[ $? -ne 0 ]];then exit 1 fi
192.168.10.135 主机:
[root@node2 etc]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id node1 } vrrp_script chk_nginx { script "/data/sh/check_nginx.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP #标识本机是backup角色 interface ens33 virtual_router_id 51 priority 90 #优先级 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.200.16 } track_script { chk_nginx } }
[root@node1 init.d]# tail -f /var/log/keepalived.log Apr 10 23:11:17 test_kubeadm_web Keepalived_vrrp[22117]: Sending gratuitous ARP on ens33 for 192.168.200.16 Apr 10 23:11:17 test_kubeadm_web Keepalived_vrrp[22117]: Sending gratuitous ARP on ens33 for 192.168.200.16 Apr 10 23:11:17 test_kubeadm_web Keepalived_vrrp[22117]: Sending gratuitous ARP on ens33 for 192.168.200.16 Apr 10 23:11:17 test_kubeadm_web Keepalived_vrrp[22117]: Sending gratuitous ARP on ens33 for 192.168.200.16
查看vip已绑定成功:
[root@node1 ~]# systemctl stop nginx
192.168.10.134 master 日志,priority 从100降为80,状态变成backup:
192.168.10.135 备机抢占VIP,切换为master:
192.168.10.134 master 日志,priority 从80升到100,状态变成master:
192.168.10.135 priority是90,故又切回了backup状态:
再次绑定VIP: