目录
一.KeepAlived补充知识
1.一个合格的群集应该具备的特点
- 负载均衡 用于提高群集的性能 LVS Nginx HAProxy SLB F5
- 健康检查(探针) 针对于调度器和节点服务器 Keepalived Heartbeat
- 故障转移 通过VIP漂移实现主备切换 VRRP 脚本
2.健康检查(探针)常用的工作方式
- 发送心跳消息 vrrp报文 ping/pong
- TCP端口检查 向目标主机的 IP:PORT 发起TCP连接请求,如果TCP连接三次握手成功则认为健康检查正常,否则认为健康检查异常
- HTTP URL检查 向目标主机的URL路径(比如http://IP:PORT/URI路径)发起 HTTP GET 请求方法
- 如果响应消息的状态码为 2XX 或 3XX,则认为健康检查正常
- 如果响应消息的状态码为 4XX 或 5XX,则认为健康检查异常
3.相关面试问题
问题1
Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP
答案
- Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器
- 然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务
- 优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址
问题2
keepalived的抢占与非抢占模式
答案
- 抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP
- 非抢占式俩节点state必须为bakcup,且必须配置nopreempt
注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了
二.Keepealived脑裂现象
1.现象
主服务器和备服务器都同时拥有相同的VIP
在"双机热备"高可用(HA)系统中,当联系两个节点的"心跳线"断开时(即两个节点断开联系时),
本来为一个整体、动作协调的HA系统,就分裂成为两个独立的节点(即两个独立的个体)。由于相互
失去了联系,都以为是对方出了故障,此时备用调度器会运转起来争做主调度器的工作,而主调度
器依然保持着调度工作,两个调度的同时运转导致整个系统的紊乱。就会发生严重后果:
- 共享资源被瓜分、两边"服务"都起不来
- 或者两边"服务"都起来了,但同时读写"共享存储",导致数据损坏(常见如数据库轮询着的联机日志出错)
2.原因
因为主服务器和备服务器的通信中断,导致备服务器无法收到主服务器发送的VRRP报文,备服务
器误认为主服务器已经故障了并通过ip命令生成VIP
硬件原因
- 高可用服务器各节点之间心跳线链路发生故障,导致无法正常通信
- 因心跳线坏了(包括断了,老化)
- 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)
- 因心跳线间连接的设备故障(网卡及交换机)
- 因仲裁的机器出问题(采用仲裁的方案)
运用配置原因
- 高可用服务器上开启了iptables防火墙阻挡了心跳消息传输
- 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
- 其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等
- Keepalived配置里同一VRRP实例如果virtual_router_id两端参数配置不一致也会导致裂脑问题发生
3.解决
关闭主服务器或备服务器其中一个的keepalived服务
4.预防
方法1
如果是系统防火墙导致,则关闭防火墙或添加防火墙规则放通VRRP组播地址(224.0.0.18)的传输
方法2
如果是主备服务器之间的通信链路中断导致,则可以在主备服务器之间添加双链路通信
方法3
在主服务器使用脚本定时判断与备服务器通信链路是否中断,如果判断是主备服务器之间的链接中
断则自行关闭主服务器上的keepalived服务
方法4
利用第三方应用或监控系统检测是否发生了脑裂故障现象,如果确认发生了脑裂故障则通过第三方
应用或监控系统来关闭主服务器或备服务器其中一个的keepalived服务
三.实验部署
此实验基于以上 LVS+KeepAlived高可用负载均衡群集的部署实验为基础,将两台调度器改为
nginx服务器,其余不变
准备虚拟机
192.168.80.104(nginx服务器四层代理)
192.168.80.105(nginx服务器四层代理)
192.168.80.106(web1)
192.168.80.107(web2)
192.168.80.108(nfs共享存储)
1.两台nginx做初始化操作并安装nginx
nginx镜像网址:
2.四层反向代理配置
2.1.修改主调度器配置
stream {
upstream backends {
server 192.168.80.106:80;
server 192.168.80.107:80;
}
server {
listen 8080;
proxy_pass backends;
}
}
2.2.修改备调度器配置
将主调度器的nginx.conf复制过来
2.3.浏览器测试两台nginx服务器
192.168.80.104/192.168.80.105
3.配置高可用
两台nginx服务器安装keepalived
4.准备检查nginx运行状态脚本
4.1.主服务器
#!/bin/bash
if ! killall -0 nginx &> /dev/null
then
systemctl stop keepalived
fi
4.2.备服务器
将主里的复制到备里