在上节 nginx负载均衡 后,本次添加了 keepalived 的使用例子。
准备工作:
两台虚拟机:centos7_1(192.168.1.201)、centos7_2(192.168.1.186)
两台虚拟机都装有 nginx 和 三个 tomcat(负载均衡)
配置 201 的 keepalived,路径:/etc/keepalived/keepalived.conf,配置比较简单,都是从其他地方抄的
global_defs { router_id proxy1 } vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 #健康检查周期 weight -2 #优先级变化幅度 fall 2 #判定服务异常的检查次数 rise 1 #判定服务正常的检查次数 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 nopreempt advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.205 } track_script { chk_nginx } }
检查脚本 /etc/keepalived/nginx_check.sh,注意 nginx 路径
#!/bin/bash A=`ps -C nginx --no-header | wc -l` if [ $A -eq 0 ];then /mine/nginx/sbin/nginx #尝试重新启动nginx sleep 2 #睡眠2秒 if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then killall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点 fi fi
配置 186 的 keepalived.conf,路径:/etc/keepalived/keepalived.conf,脚本和上面是一样的
global_defs { router_id proxy2 } vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 weight -2 fall 2 rise 1 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 priority 99 nopreempt advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.205 } track_script { chk_nginx } }
然后,启动两个 keepalived
启动后就可以访问 虚拟 ip 192.168.1.205 了
201 关闭 keepalived 后,就由 186 提供服务,自动切换
重新启动 201 的 keepalived,就又变成 201 提供服务,原因是重新启动后 priority 100,比 186 的 priority 大,201 自动变成 master
两边都 killall keepalived 后,虚拟 ip 就无法再访问了(但 201 和 186 还是能访问的,只是由两个 keepalived 绑定的 vip 205 无法访问)
中间遇到的问题:
备用机 186 的 keepalived 一启动就自动变成 master
原因:centos7 的防火墙问题,解决方法:关闭 201 的防火墙就可以了, systemctl stop firewalld,其他方法未知
参考:
https://blog.51cto.com/xiexinmiao/1650888
https://blog.51cto.com/h11345/1570786
https://blog.51cto.com/superpcm/2095395
https://www.cnblogs.com/kevingrace/p/6138185.html
共有条评论 网友评论