12 keepalived脑裂问题
1.什么是脑裂
由于某些原因,导致两台keepalived高可用服务器在指定时间内,无法检测到对方的心跳,各自取得资源及服务的所有权,而此时的两台高可用服务器又都还活着。
2.脑裂的故障
解决方案
1.判断端口
2.判断进程的方式
通过进程的方式解决
1、lb01和lb02编写脚本
cd etc/keepalived
vim /etc/keepalived/check.sh
#!/bin/bash # 1、判断端口 # 2、通过进程的方式 ps -aux | grep [n]ginx if [ $? -ne 0 ];then systemctl restart nginx sleep 3; ps -aux | grep [n]ginx if [ $? -ne 0 ];then systemctl stop keepalived fi fi
2.脚本增加可执行权限
cd /etc/keepalived/
chmod +x check.sh
3、修改keepalived配置文件(lb01,lb02都修改)
vim /etc/keepalived/keepalived.conf
#全局配置 global_defs { #身份识别(全局唯一) router_id lb01 } #每5秒执行一次脚本,脚本执行内容不能超过5秒,否则会中断再次重新执行脚本 vrrp_script check_web { # 指定脚本路径 script "/etc/keepalived/check.sh" # 5秒钟执行一次 interval 5 } # 配置VRRP协议 vrrp_instance VI_1 { # 状态,MASTER和BACKUP(这里仅仅是一个标记,正真确认VIP的是权重) state BACKUP #开启非抢占式 nopreempt # 绑定网卡 interface eth0 # 虚拟路由标示,可以理解为分组 virtual_router_id 50 # 优先级(数字越大,权重越大) priority 100 # 监测心跳间隔时间 advert_int 1 # 配置认证 authentication { # 认证类型 auth_type PASS # 认证的密码 auth_pass 1111 } # 设置VIP virtual_ipaddress { # 虚拟的VIP地址 192.168.15.200 } #调用计划的脚本 track_script { check_web } }
4.测试
重启或启动nginx和keepalived
systemctl start nginx
systemctl start keepalived