1.什么是脑裂
由于某些原因,导致两台keepalived高可用服务器在指定时间内,无法检测到对方的心跳,各自取得资源及服务的所有权,而此时的两台高可用服务器又都还活着。
2.脑裂的故障
1.网线松动,网络故障 2.服务器硬件故障 3.服务器之间开启了防火墙
3.如何解决脑裂之nginx宕机
nginx默认监听在所有的IP地址上,VIP会飘到一台节点上,相当于那台nginx多了VIP这么一个网卡,所以可以访问到nginx所在机器
但是.....如果nginx宕机,会导致用户请求失败,但是keepalived没有挂掉
[root@web02 ~]# while true;do curl -H"Host:game.test.com" 192.168.15.200;
解决方案
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配置文件
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