Keepalived工作原理
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP(VIP),主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
Keepalived体系主要模块及其作用:
keepalived体系架构中主要有三个模块,分别是core、check和vrrp。
core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
vrrp模块:是来实现VRRP协议的。(调度器之间的健康检查和主备切换)
check模块:负责健康检查,常见的方式有端口检查及URL检查。(节点服务器的健康检查)
一个合格的群集应该具备的特点:
负载均衡 用于提高群集的性能 LVS Nginx HAProxy SLB F5
健康检查(探针) 针对于调度器和节点服务器 Keepalived Heartbeat
故障转移 通过VIP漂移实现主备切换 VRRP 脚本
健康检查(探针)常用的工作方式:
发送心跳消息 vrrp报文 ping/pong
TCP端口检查 向目标主机的 IP:PORT 发起TCP连接请求,如果TCP连接三次握手成功则认为健康检查正常,否则认为健康检查异常
HTTP URL检查 向目标主机的URL路径(比如http://IP:PORT/URI路径)发起 HTTP GET 请求方法,如果响应消息的状态码为 2XX 或 3XX,则认为健康检查正常;如果响应消息的状态码为 4XX 或 5XX,则认为健康检查异常。
LVS+Keepalived 高可用群集
主DR 服务器:20.0.0.100 (Linux1)
备DR 服务器:20.0.0.111 (Linux11)
Web 服务器1:20.0.0.101
Web 服务器2:20.0.0.103
vip:20.0.0.50
客户端:20.0.0.3
前提:关闭防火墙,yum下载ipvsadm。
配置DR群集
vim keepalived.conf
主:
备:vim keepalived.conf
主:
备:
四层反向代理配置
修改主调度器配置
#配置四层反向代理
stream {
upstream backends {
server 192.168.9.140:80;
server 192.168.9.150:80;
}
server {
listen 8080;
proxy_pass backends;
}
}
修改备调度器配置
将192.168.9.210中的nginx.conf文件复制过来
浏览器测试两台nginx服务器
192.168.9.210
192.168.9.120
配置高可用
两台nginx服务器安装keepalived
yum install -y keepalived
准备检查nginx运行状态脚本
192.168.9.210主服务器
#!/bin/bash
if ! killall -0 nginx &> /dev/null
then
systemctl stop keepalived
fi
192.168.9.120备服务器
将192.168.9.210/etc/keepalived中所有文件复制到192.168.9.120
开启keepalived服务并测试
分别开启主备两台服务器keepalived
systemctl start keepalived
systemctl enable keepalived
浏览器测试:
主服务器模拟故障:
浏览器访问:
仍然可以继续访问
如何恢复主服务器?
Keepealived脑裂现象
主服务器和备服务器都同时拥有相同的VIP导致
产生脑裂的原因
Master一直发送心跳消息给backup主机,如果中间的链路突然断掉,backup主机将无法收到master主机发送过来的心跳消息(也就是vrrp报文),backup这时候会立即抢占master的工作,但其实这时候的master是正常工作的,此时就会出现脑裂的现象。
解决方法
关闭主服务器或备服务器其中一个的Keepealived服务
7.3 如何预防
1.如果是系统防火墙导致,则关闭防火墙或添加防火墙规则放通VRRP组播地址(224.0.0.18)的传输
2.如果是主备服务器之间的通信链路中断导致,则可以在主备服务器之间添加双链路通信
3.在主服务器使用脚本定时判断与备服务器通信链路是否中断,如果判断是主备服务器之间的链接中断则自行关闭主服务器上的keepalived服务
4.利用第三方应用或监控系统检测是否发生了脑裂故障现象,如果确认发生了脑裂故障则通过第三方应用或监控系统来关闭主服务器或备服务器其中一个的keepalived服务