在上节 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