Keepalived高可用服务通过VRRP来实现故障切换转移。
VRRP协议工作原理
-
VRRP协议是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,目的是为解决静态路由单点故障。
-
VRRP通过竞选协议机制来决定路有任务运行在哪台主机上。
-
VRRP用IP多播方式(默认多播地址224.0.0.18)实现高可用对之间通信的。
-
工作时主节点向备节点发包,当某时刻备节点接收不到数据包的时候,会启动接管程序接管主节点资源。
-
备节点可以有多个,通过优先级竞选,但在工作中通常还是一对居多。
Keepalived服务工作原理
-
Keepalived高可用服务通过VRRP协议进行通讯,通过竞选机制确定主备。
-
工作时主节点优先获得资源,备节点等待,当主节点出现故障时,备节点主动接管主节点资源,继续对外提供服务。
-
主节点向备节点发送VRRP广播包,告诉备节点自己的存活,当备节点接收不到来自主节点的广播包时,就会主动接管资源,继续提供服务,接管速度最快可以小于1秒。
=============================================================
实践部分从Keepalived的搭建、配置文件、高可能配置上说明。
环境搭建
这里先用一台主机搭建Keepalived服务
- 环境准备
cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
uname -r
3.10.0-693.el7.x86_64
- 安装Keepalived服务(采用yum安装方式)
yum -y install keepalived
- 启动服务及查看状态(默认启动三个进程三个VIP)
systemctl start keepalived
ps -ef | grep keepalived | grep -v grep
root 1662 1 0 09:53 ? 00:00:00 /usr/sbin/keepalived -D
root 1663 1662 0 09:53 ? 00:00:00 /usr/sbin/keepalived -D
root 1664 1662 0 09:53 ? 00:00:00 /usr/sbin/keepalived -D
- 关闭服务
systemctl stop keepalived
配置文件说明
yum安装的keepalived版本为v1.3.5,如果想要更新的版本甚至2.x版本的话请使用编译安装
Keepalived服务高可用功能的配置文件包含两个重要模块:全局定义部分和VRRP实例定义区块部分
yum安装的配置文件位置为/etc/keepalived/keepalived.conf
这部分内容为全局定义模块:
1 ! Configuration File for keepalived
2
3 global_defs {
4 notification_email {
5 acassen@firewall.loc
6 failover@firewall.loc
7 sysadmin@firewall.loc
8 }
9 notification_email_from Alexandre.Cassen@firewall.loc
10 smtp_server 192.168.200.1
11 smtp_connect_timeout 30
12 router_id LVS_DEVEL
13 vrrp_skip_check_adv_addr
14 vrrp_strict
15 vrrp_garp_interval 0
16 vrrp_gna_interval 0
17 }
以上内容含义分别为:
-
第一行:注释,定义这个keepalived服务配置文件
-
第四~八行:定义服务故障报警的邮箱地址(基本不用)
-
第九行:指定邮箱的发件人
-
第十行:指定发送邮箱的SMTP服务区
-
第十一行:连接SMTP的超时时间
-
第十二行:Keepalived的服务标识,同一局域网,标识唯一
-
第十三行:检查收到的 VRRP 广告中的所有地址
-
第十四行:强制执行严格的 VRRP 协议合规性
-
第十五行:接口上发送的免费 ARP 消息之间的延迟
-
第十六行:在接口上发送的未经请求的 NA 消息之间的延迟
这部分内容为VRRP实例定义区块:
19 vrrp_instance VI_1 {
20 state MASTER
21 interface eth0
22 virtual_router_id 51
23 priority 100
24 advert_int 1
25 authentication {
26 auth_type PASS
27 auth_pass 1111
28 }
29 virtual_ipaddress {
30 192.168.200.16
31 192.168.200.17
32 192.168.200.18
33 }
34 }
以上内容含义分别为:
-
第十九行:定义这是一个vrrp_instance实例,名字为VI_1
-
第二十行:表示角色状态为MASTER,备机为BACKUP
-
第二十一行:表示对外提供服务的网络端口,注意多网卡时要选对网卡
-
第二十二行:虚拟路由ID标识,一个高可用集群中标识相同
-
第而十三行:优先级,数字越大优先级越高
-
第二十四行:MASTER与BACKUP之间通信检查的时间间隔,默认1秒
-
第二十五~八行:权限认证配置,一个实例中主备认证相同,密码建议4位数字
-
第二十九~三十三行:定义虚拟ip,可以有多个,最好指明子网掩码和绑定网卡
更多配置说明请访问官方文档地址:https://www.keepalived.org/manpage.html
-
准备两台装着相同Keepalived服务的主机,安装方式上面有
-
lb01主机上的配置(MASTER)
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.100/24 dev eth0 label eth0:3
}
}
- lb02主机配置,由于配置类似,只说不同点(BACKUP)
4 router_id lb02
8 state BACKUP
11 priority 50
- 两台主机启动服务
systemctl start keepalived
- 此时MASTER节点能看到VIP,BACKUP节点看不到为正常
inet 192.168.100.100/24 scope global eth0:3
- 测试:关闭MASTER节点服务,VIP是否漂移到BACKUP节点
- 当MASTER节点恢复后,VIP会重新回到主节点
脑裂一般是因为某些原因两台高可用服务器无法检测对方的心跳消息,各自取得资源及服务的所有权,同时运行服务。这样导致ip或服务在两端同时存在而发生冲突。
可能导致脑裂的原因:
-
心跳链路故障,无法正常通信
-
开启防火墙导致心跳消息拦截
-
配置信息不正确
-
其他
常用解决方案:
-
同时使用串行电缆和以太网电缆连接,同时使用两条心跳线
-
做好对脑裂的监控报警
-
检测到脑裂问题强行关闭一个心跳节点
基于单实例的环境,进行配置双实例。
- lb01配置文件修改
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.100/24 dev eth0 label eth0:3
}
}
vrrp_instance VI_2 {
state BACKUP