前言
Keepalived 是集群管理中保证集群高可用的一个服务软件,其功能类似于 heartbeat,用来防止单点故障。 本例演示 CentOS 7 下安装和配置 Keepalived 的基本步骤。
Keepalived 是以 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)协议为实现基础的,这个协议可以认为是实现了路由器高可用的协议,将多台提供相同功能的路由器组成一个路由器组。
这里面有一个 MASTER 和多个 BACKUP;
MASTER 上面有一个对外提供服务的 Virtual IP(VIP);
MASTER 会发组播,当 BACKUP 收不到 VRRP 包时就认为 MASTER 宕机
这时需要根据 VRRP 优先级来选举一个 BACKUP 为 MASTER,这样就保证路由器的正常使用了。
环境说明
CentOS 7(Minimal Install)
$cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
本例演示环境如下
Name
IP Addr
Descprition
VIP
10.0.0.10
虚拟 IP
MASTER
10.0.0.11
主服务器 IP
BACKUP
10.0.0.12
备服务器 IP
本例安装 Nginx,使用浏览器查看效果。
安装
安装 Keepalived
Keepalived 可以使用 yum 直接安装,在 master 服务器和 backup 服务器执行:
$sudoyum installkeepalived
配置
配置 Master 服务器
先确认网卡
$ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever2: em1: mtu 1500 qdisc mq state UP qlen 1000
link/ether 80:18:44:e8:b3:18 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.11/24 brd 10.0.0.255 scope global em1
valid_lft forever preferred_lft forever
inet6 fe80::8218:44ff:fee8:b318/64 scope link
valid_lft forever preferred_lft forever3: em2: mtu 1500 qdisc mq state DOWN qlen 1000
link/ether 80:18:44:e8:b3:19 brd ff:ff:ff:ff:ff:ff
本例使用 em1 这块网卡。
$sudovi /etc/keepalived/keepalived.conf
如下配置
! Configuration File for keepalived
global_defs {
notification_email {#email 接收方
}#email 发送方
notification_email_from [email protected]#邮件服务器, smtp 协议
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id app2
vrrp_skip_check_adv_addr#使用 unicast_src_ip 需要注释 vrrp_strict,而且也可以进行 ping 测试
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}#vrrp实例
vrrp_instance VI_1 {#指定 keepalived 的角色,MASTER 表示此主机是主服务器,BACKUP 表示此主机是备用服务器
state MASTER#指定网卡
interface em1#虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。
#即同一vrrp_instance下,MASTER和BACKUP必须是一致的
virtual_router_id 51#定义优先级,数字越大,优先级越高(0-255)。
#在同一个vrrp_instance下,MASTER 的优先级必须大于 BACKUP 的优先级
priority 101#设定 MASTER 与 BACKUP 负载均衡器之间同步检查的时间间隔,单位是秒
advert_int 1#如果两节点的上联交换机禁用了组播,则采用 vrrp 单播通告的方式
unicast_src_ip 10.0.0.11
unicast_peer {
10.0.0.12
}#设置验证类型和密码
authentication {#设置验证类型,主要有PASS和AH两种
auth_type PASS#设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}#设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
virtual_ipaddress {#虚拟 IP
10.0.0.10/24 brd 10.0.0.255
}
}
本配置中,最后设置了虚拟 IP 的 80 端口,指向了本地的 80 端口。
配置 BACKUP 服务器
BACKUP 配置基本跟 MASTER 一致,主要有部分变动
$sudovi /etc/keepalived/keepalived.conf
注意以下几点
state 角色为 BACKUP
interface 为网卡的 ID,要根据机器确认
virtual_route_id 要与 MASTER 一致,默认为 51
priority 要比 MASTER 小
unicast_src_ip 要设置正确,组播地址设置之后,要注释 vrrp_strict 选项
变动如下
! Configuration File for keepalived...
...#vrrp实例
vrrp_instance VI_1 {#指定 keepalived 的角色,BACKUP 表示此主机是备用服务器
state BACKUP#确认网卡的 ID
interface em1#即同一vrrp_instance下,MASTER 和 BACKUP 必须是一致的
virtual_router_id 51#比 MASTER 小
priority 100...
...#如果两节点的上联交换机禁用了组播,则采用 vrrp 单播通告的方式
unicast_src_ip 10.0.0.12
unicast_peer {
10.0.0.11
}#设置验证类型和密码
authentication {#设置验证类型,主要有PASS和AH两种
auth_type PASS#设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}#设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
virtual_ipaddress {#虚拟 IP
10.0.0.10/24 brd 10.0.0.255
}...
...}
配置并启动服务
配置 IP 转发,需要修改配置文件 /etc/sysctl.conf,默认只有 root 可以修改
$su - root
Password:#echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
#sysctl -p
net.ipv4.ip_nonlocal_bind = 1#exit
启动 MASTER 和 BACKUP 的 keepalived 服务
$sudosystemctl start keepalived
设置开机启动
$sudosystemctl enablekeepalived
此时查看 MASTER 的网卡
$ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever2: em1: mtu 1500 qdisc mq state UP qlen 1000
link/ether 80:18:44:e8:b3:18 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.11/24 brd 10.0.0.255 scope global em1
valid_lft forever preferred_lft forever
inet 10.0.0.10/24 brd 10.0.0.255 scope global secondary em1
valid_lft forever preferred_lft forever
inet6 fe80::8218:44ff:fee8:b318/64 scope link
valid_lft forever preferred_lft forever3: em2: mtu 1500 qdisc mq state DOWN qlen 1000
link/ether 80:18:44:e8:b3:19 brd ff:ff:ff:ff:ff:ff
可以发现 MASTER 服务器的 em1 网卡上多了 10.0.0.10 这个虚拟 IP 地址。
漂移规则如下:
默认使用 MASTER 服务器(10.0.0.11),虚拟 IP 为 10.0.0.10,此时 MASTER 服务器会有 2 个IP。
当 MASTER 出问题时,IP 会漂移到 BACKUP 服务器(10.0.0.12),此时 BACKUP 服务器会有 2 个IP。
当 MASTER 重新启动后,虚拟 IP 又会漂移回 MASTER 服务器。
测试
查看 IP 的变化可用如下命令(MASTER 和 BACKUP 都在线):
安装 tcpdump 包
$sudoyum installtcpdump
在 MASTER 服务器上执行
$sudotcpdump -i em1 vrrp -n
02:16:07.739305 IP 10.0.0.11 >10.0.0.12: VRRPv2, Advertisement, vrid 51, prio 101, authtype simple, intvl 1s, length 20
02:16:08.740362 IP 10.0.0.11 >10.0.0.12: VRRPv2, Advertisement, vrid 51, prio 101, authtype simple, intvl 1s, length 20
02:16:09.741401 IP 10.0.0.11 >10.0.0.12: VRRPv2, Advertisement, vrid 51, prio 101, authtype simple, intvl 1s, length 20
...
...
这表明 MASTER 在向 BACKUP 广播,MASTER 在线。此时虚拟 IP 时挂在 MASTER 上的,如果想退出, 按 Ctrl+C。
如果 MASTER 停止 keepalived,虚拟 IP 会漂移到 BACKUP 服务器上。
我们可以测试一下:
首先,停止 MASTER 的 keepalived
$sudosystemctl stop keepalived
然后,在 MASTER 服务器上查看 VRRP 服务
$sudotcpdump -i em1 vrrp -n
02:19:08.874676 IP 10.0.0.12 >10.0.0.11: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20
02:19:09.875710 IP 10.0.0.12 >10.0.0.11: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20
02:19:10.876742 IP 10.0.0.12 >10.0.0.11: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20
...
...
这表明 MASTER 收到 BACKUP 的广播,此时虚拟 IP 时挂在 BACKUP 服务器上。
配置日志
注意
此配置为可选步骤。
keepalived 默认将日志输出到系统日志/var/log/messages中,因为系统日志很多,查询问题时相对麻烦。
我们可以将 keepalived 的日志单独拿出来,这需要修改日志输出路径。
修改 Keepalived 配置
$sudovi /etc/sysconfig/keepalived
更改如下:
#Options forkeepalived. See `keepalived --help' output and keepalived(8) and#keepalived.conf(5) man pages for a list of all options. Here are the most#common ones :##--vrrp -P Only run with VRRP subsystem.#--check -C Only run with Health-checker subsystem.#--dont-release-vrrp -V Dont remove VRRP VIPs & VROUTEs on daemon stop.#--dont-release-ipvs -I Dont remove IPVS topology on daemon stop.#--dump-conf -d Dump the configuration data.#--log-detail -D Detailed log messages.#--log-facility -S 0-7 Set local syslog facility (default=LOG_DAEMON)#KEEPALIVED_OPTIONS="-D -d -S 0"
把 KEEPALIVED_OPTIONS=”-D” 修改为 KEEPALIVED_OPTIONS=”-D -d -S 0”,其中 -S 指定 syslog 的 facility
修改 /etc/rsyslog.conf 末尾添加
$sudovi /etc/rsyslog.conf
local0.* /var/log/keepalived.log
重启日志记录服务
$sudosystemctl restart rsyslog
重启 keepalived
$sudosystemctl restart keepalived
此时,可以从 /var/log/keepalived.log 查看日志了。
结论
本文演示了 CentOS 7 下 Keepalived 的安装,配置虚拟 IP 地址,,启动服务等。
参考资料