CentOS 7中配置Keepalived-LVS高可用集群
上一篇文章中描述了 LVS 的配置,但 LVS 有一个缺陷:不探测 Real Server 的状态,就算是 Real Server 宕机,LVS 也会把请求转发过去。
使用 Keepalived 可以弥补 LVS 的缺陷,还可以实现 LVS Director 的冗余备份,keepalived 会根据主机的健康状况让 VIP 在 LVS Director 之间漂移。同时 Keepalived 还可以替代 ipvsadm 工具,在 keepalived 配置文件中直接完成 LVS 的配置。
1. 配置网络结构:

- 192.168.1.11 和 192.168.1.12 是互为备份的 LVS Director, 192.168.1.11 默认为 MASTER, 192.168.1.12 为 BACKUP
- 192.168.1.99 是 LVS Director 的虚拟 IP,当 192.168.1.11 正常工作时,它会通过 VRRPv2 协议向广播网段发送 ARP 数据包,声明 192.168.1.99 为其所有,当 192.168.1.11 宕机时,192.168.1.12 会立即接管该工作,声明 192.168.1.99 的所有权并响应用户请求
- 192.168.1.13 和 192.168.1.14 是 Real Server, 上面有监听在 80 端的 Web 服务
2. Keepalived 主机安装配置
1. 在 192.168.1.11 和 192.168.1.12 上安装 keepalived, 安装完成后修改配置文件/etc/keepalived/keepalived.conf。
# yum install keepalived -y
# vi /etc/keepalived/keepalived.conf
2. 配置 MASTER 节点(192.168.1.11),配置文件内容如下。关键配置内容添加了注释:
! Configuration File for keepalived
global_defs {
router_id LVS_11 #节点ID,每个节点的值唯一
vrrp_skip_check_adv_addr
vrrp_strict #严格遵守VRRP,三种情况将会阻止keepalived (1.无VIPs, 2.unicast peers,3.IPv6 addresses in VRRP version 2)
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 { #定义一个实例(高可用集群)
state MASTER #节点在Keepalived中定义为MASTER
interface enp0s3 #指定节点发送ARP数据报时使用的网关设备
virtual_router_id 51 #Virtual Router ID, 数字格式,集群中的所有节点值要相同,
priority 101 #节点优先级,MASTER节点要比其它节点的值大
advert_int 1
authentication {
auth_type PASS #节点间的认证方式,支持PASS, HEAD
auth_pass keepsync #auth_type为PASS时的主证密码,超过8位则keepalived只取前8位
}
virtual_ipaddress {
192.168.1.99 #配置虚拟IP
}
}
--------------------------------------分割线,如果只配置Keepalived主备集群,上面的配置就可以了,下面的配置用于配置LVS--------------------------------
virtual_server 192.168.1.99 80 { #配置LVS集群服务地址及端口
delay_loop 6
lb_algo lc #LVS请求分配算法,当前为LC,详见LVS文档
lb_kind DR #LVS工作模式为DR
persistence_timeout 50
protocol TCP #LVS服务协议为TCP
real_server 192.168.1.13 80 { #Real Server 1 地址及端口
weight 1 #Real Server 1权重
TCP_CHECK { #Real Server健康诊断方式为TCP_CHECK, 支持的方式有TCP_CHECK, HTTP_GET, SSL_GET, MISC_CHECK
connect_timeout 3 #诊断间隔为3秒
connect_port 80 #诊断连接端口为80
}
}
real_server 192.168.1.14 80 { #Real Server 1 配置
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 80
}
}
}
3. 配置 BACKUP 节点(192.168.1.12):
! Configuration File for keepalived
global_defs {
router_id LVS_12 #每个节点唯一,与其它节点不周
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP #指定为BACKUP模式
interface enp0s3
virtual_router_id 51 #与其它节点相同
priority 100 #优先级比MASTER低
advert_int 1
authentication {
auth_type PASS
auth_pass keepsync
}
virtual_ipaddress {
192.168.1.99
}
}
virtual_server 192.168.1.99 80 {
delay_loop 6
lb_algo lc
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.1.13 80 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 80
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.14 80 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 80
}
}
}
Keepalived 会按 TCP_CHECK 中配置的 connect_timeout 时间间隔尝试连接 real server 的 connect_port 指定的端口,如果指定 server 的指定端口不可达,该 real server 会被从 LVS 集群中移除,待该 server 恢复后又会被自动加入到集群。
4. 在 MASTER 和 BACKUP 节点上启动并启用 keepalived 服务:
# systemctl start keepalived
# systemctl enable keepalived
如果 Keepalived MASTER 节点上安装了 ipvsadm 管理工具,可以看到 LVS 配置已经生成:
[root@centos01 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.99:80 lc persistent 50
-> 192.168.1.13:80 Route 1 0 0
-> 192.168.1.14:80 Route 1 0 6
5. 在 MASTER 和 BACKUP 节点上启用 ip_forward:
# cat << EOF > /etc/sysctl.d/zz-keepalived.conf
net.ipv4.ip_forward = 1
EOF
# sysctl --system
/etc/sysctl.d 目录下, 文件名排序越靠后,优先级越高, 所以以 zz-..作为文件名前缀
3. Real Server 配置
LVS 工作在 DR 模式时,Real Server 需要直接与客户端通讯,因此需要把 VIP 配置在 Real Server 上,并且不允许以该 VIP 的名义向广播网段发送 ARP 数据包,做如下配置:
# ifconfig enp0s3:0 192.168.1.99 netmask 255.255.255.255 up
# echo "1" > /proc/sys/net/ipv4/conf/enp0s3/arp_ignore
# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo "2" > /proc/sys/net/ipv4/conf/enp0s3/arp_announce
# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
至此,相关配置全部完成。如果 Real Server 上的 Web 服务工作正常,通过浏览器访问 VIP 就可以正常打开 Real Server 上的 Web 服务了,如果 MASTER 节点停止服务,BACKUP 节点会立即接管,待 MASTER 恢复后则重新接管服务。如果某一个 Real Server 停止,则该 Real Server 则会被从 LVS 集群中移动,恢复后又会被自动加入到 LVS 集群中。
如果 keepalived.conf 文件中不配置 virtual_server, keepalived 就单纯提供双机热备服务,让 VIP 在主备机之间漂移。
为保证 Keepalived 节点和 Real Server 之间通讯正常,最好停掉各个 Server 上的和防火墙(firewalld)服务,或者每改动一次配置都需要重新执行一下 iptables -F。


