LVS + Keepalived 高可用集群部署
一、Keepalived工具
- 集群需要满足的特点:负载均衡,健康检查,故障切换
- 在应用中单台服务器承担负载应用存在单点故障的危险,一旦发生故障,企业服务将发生中断,造成损失
- Keepalived工具专为LVS和HA(高可用)设计的一款健康检查工具
(1)支持故障自动切换(Failover)
(2)支持节点健康状态检查(Health Checking)
判断LVS负载调度器、节点服务器的可用性,当master主机出现故障即时切换到backup节点保证业务正常,当master故障主机恢复后将其重新加入群集并且业务重新切回master节点
(3)官方网站:http://www.keepalived.org/
二、Keepalived 及工作原理
Keepalived是一个基于底层协议是VRRP热备份协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
1. 工作原理
在一个LVS服务集群中通常有主服务器 (MASTER)和备份服务器(BACKUP) 两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器, 当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
2. Keepalived体系主要模块及其作用
- keepalived体系架构中主要有三个模块,分别是core、check和vrrp。
- core模块∶为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
- vrrp模块∶是来实现VRRP协议的。
- check模块∶负责健康检查,常见的方式有端口检查及URIL检查。
3. VRRP(虚拟路由冗余协议)
- 是针对路由器的一种备份解决方案
- 多台路由器组成一个热备组,通过共用的,虚拟IP地址对外提供服务
- 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
- 若当前在线的路由器失效,则其他路由器会,根据设置的优先级自动接替虚拟IP地址,继续提供服务
工作原理
- VRRP会把多台路由器组成一个虚拟路由器组vrid,VRRP会生成一个虚拟路由器 (包含虚拟IP和虚拟mac)
- 局域网内的用户不关心哪个是主哪个是备,他们只用虚拟路由器的虚拟IP作为他们的网关实际上虚拟IP是承载在master路由器,也就是说实际的数据包是通过master进行转发
- master和backup是通过优先级来决定哪个是master,优先级最大的那台就是 master,其余小的都是backup
- backup只是用来监听Master定时发来的vrrp报文,如果超时未收到 master 发来的vrrp报文,backup就会抢占master地位,虚拟IP也会一起漂移到backup 上
4. 故障转移机制
- Keepalived高可用服务之间的故障切换转移,是通过VRRP 来实现的。
- 在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。
- 而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
5. Keepalived 脑裂现象的产生,解决方法
1. 问题:
在一次故障切换后,原来的master并没有真正的挂掉 ,VIP还在,而backup 则已经抢占master地位,并也在本地配置了VIP,本来为一整体、动作协调的HA系统,就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果——或者共享资源被瓜分、2边“服务”都起不来了;或者2边“服务”都起来了,但同时读写“共享存储”,导致数据损坏(常见如数据库轮询着的联机日志出错),这时客户端发送请求都能够做出响应造成资源的争夺
2. 解决方法:
(1)网络的层面来解决 再加一条链路,需要一定的成本
(2)通过第三方监控软件的方式来解决 zabbix
既监控服务器的状态,也监控网络的流量
(3)在本地通过脚本方式来解决
在master主机通过if判断是否能够ping通backup主机,ping不通2种可能性,中间链路断掉了或backup宕机,再使用if判断使用ssh跳到某一台节点服务器ping backup主机 ,如果也ping 不通则判断backup宕机,如果Ping通则说明是中间链路问题,链路问题就手动关闭maseter的keepalived工具,让backup主机顶上
(4)编写监控脑裂脚本
vim check_keepalived.sh
#!/bin/bash
state=$(ip addr show ens33 | grep 192.168.150.200 | wc -l)
while true
do
if [ $state -ne 0 ]
then
echo "建立VIP"
else
echo "未建立VIP"
fi
done