目录
主服务器和备服务器都同时拥有相同的 VIP
在 "双机热备" 高可用(HA)系统中,当联系两个节点的 "心跳线" 断开时 (即两个节点断开联系时),本来为一个整体、动作协调的 HA 系统,就分裂成为两个独立的节点 (即两个独立的个体)。由于相互失去了联系,都以为是对方出了故障,此时备用调度器会运转起来争做主调度器的工作,而主调度器依然保持着调度工作,两个调度的同时运转导致整个系统的紊乱。就会发生严重后果:共享资源被瓜分、两边 "服务" 都起不来或者两边 "服务" 都起来了,但同时读写 "共享存储",导致数据损坏(常见如数据库轮询着的联机日志出错)
因为主服务器和备服务器的通信中断,导致备服务器无法收到主服务器发送的 VRRP 报文,备服务器误认为主服务器已经故障了并通过 ip 命令生成 VIP
硬件原因
高可用服务器各节点之间心跳线链路发生故障,导致无法正常通信
因心跳线坏了(包括断了,老化)
因网卡及相关驱动坏了,ip 配置及冲突问题(网卡直连)
因心跳线间连接的设备故障(网卡及交换机)
因仲裁的机器出问题(采用仲裁的方案)
运用配置原因
高可用服务器上开启了 iptables 防火墙阻挡了心跳消息传输
高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件 Bug 等
Keepalived 配置里同一 VRRP 实例如果 virtual_router_id 两端参数配置不一致也会导致裂脑问题发生
关闭主服务器或备服务器其中一个的 keepalived 服务
方法 1
如果是系统防火墙导致,则关闭防火墙或添加防火墙规则放通 VRRP 组播地址 (224.0.0.18) 的传输
方法 2
如果是主备服务器之间的通信链路中断导致,则可以在主备服务器之间添加双链路通信
方法 3
在主服务器使用脚本定时判断与备服务器通信链路是否中断,如果判断是主备服务器之间的链接中
断则自行关闭主服务器上的 keepalived 服务
方法 4
利用第三方应用或监控系统检测是否发生了脑裂故障现象,如果确认发生了脑裂故障则通过第三方
应用或监控系统来关闭主服务器或备服务器其中一个的 keepalived 服务
此实验基于以上 LVS+KeepAlived 高可用负载均衡群集的部署实验为基础,将两台调度器改为
nginx 服务器,其余不变
准备虚拟机
192.168.80.122(nginx 服务器四层代理)
192.168.80.123(nginx 服务器四层代理)
192.168.80.124(web1)
192.168.80.125(web2)
192.168.80.126(nfs 共享存储)
1)修改主调度器配置
stream { upstream backends { server 192.168.10.124:80; server 192.168.10.125:80; } server { listen 8080; proxy_pass backends; } }
2) 修改备调度器配置
将主调度器的 nginx.conf 复制过来
scp nginx.conf 192.168.10.122:'pwd'
3) 浏览器测试两台 nginx 服务器
192.168.10.122/192.168.10.123
两台 nginx 服务器安装 keepalived
yum install -y keepalived
#!/bin/bash if ! killall -0 nginx &> /dev/null then systemctl stop keepalived fi
修改配置文件 keepalived.conf
2) 备服务器
先做备份
将主里的复制到备里
修改配置文件 keepalived.conf
2) 浏览器测试