简介
Keepalived是一款开源的高可用性(HA)软件,它主要用于实现服务器的故障隔离和负载均衡器之间的故障切换,以此提高系统的可用性。Keepalived最初是为Linux虚拟服务器(LVS)设计的,它通过虚拟路由冗余协议(VRRP)来实现高可用性,确保即使在主服务器出现故障时,服务也能无缝地继续提供。此外,Keepalived还提供了多种健康检查机制,如ICMP Ping、TCP端口检测和HTTP GET等,以监测服务器的运行状态。
VRRP介绍
VRRP(Virtual Router Redundancy Protocol)是一种网络协议,它允许一组路由器(称为VRRP组)共享一个虚拟IP地址,以便在主路由器出现故障时,备份路由器能够接管虚拟IP地址,从而维持网络通信的连续性和可靠性。VRRP协议通常用于实现网络设备的高可用性解决方案,特别是在网络路由方面。
在VRRP配置中,每个路由器都会被分配一个虚拟路由器标识符(VRID),该标识符用于唯一标识VRRP组中的路由器。VRRP组中的路由器会选举出一个主路由器(Master),该路由器负责对外提供服务,并定期发送VRRP组播包以表明其活跃状态。如果主路由器失效,备份路由器中优先级最高的将成为新的主路由器,接管虚拟IP地址,并继续提供服务。
相关术语
虚拟路由器:Virtual Router
虚拟路由器标识:VRID(0-255)
虚拟IP:Virtual IP,VIP
VMAC:Virtual MAC
主设备:master
备份设备:backup
优先级:priority
keepalived核心组件
-
VRRP Stack
:负责VRRP消息的通告和处理。 -
Checkers
:负责监测后端服务器的健康状态。 -
System Call
:实现VRRP协议状态转换时调用脚本的功能。 -
SMTP
:邮件组件,用于发送故障转移通知。 -
IPVS Wrapper
:生成IPVS规则,用于负载均衡。 -
Netlink Reflector
:网络接口相关的操作。 -
WatchDog
:监控进程状态,确保Keepalived服务的稳定运行。 -
控制组件:提供keepalived.conf的解析器。
-
IO复用器:用于 优化网络通信。
-
内存管理组件:为通用的内存管理功能提供 访问权限。
keepalived实验
实验准备
四台RHEL 7.9虚拟机(关闭防火墙、SELinux):ka1、ka2为keepalived节点,web1、web2为后端真实服务器,关闭VMware中NAT模式下的DHCP
Virtual IP | 192.168.0.100/24 |
ka1 | 192.168.0.10/24 |
ka2 | 192.168.0.20/24 |
web1 | 192.168.0.110/24 |
web2 | 192.168.0.120/24 |
配置文件内容
全局配置
global_defs {
notification_email { #keepalived发生故障切换时通知的邮箱,可以按行区分多个邮箱
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #发件人
smtp_server 192.168.200.1 #邮件服务器地址
smtp_connect_timeout 30 #邮件服务器超时连接时间
router_id LVS_DEVEL #keepalived主机唯一标识
vrrp_skip_check_adv_addr #检查所有通告报文,性能较差;启用此配置后,若收到 的报文通告与上一个报文为同一台,则跳过检查,默认 为全检查vrrp_strict #遵循VRRP协议,启用此项后一下情况将无法启动服务:
1、无VIP地址;2、配置了单播邻居3、VRRP版本2中有IPV6地址vrrp_garp_interval 0 #报文发送延迟,0为不延迟
vrrp_gna_interval 0 #消息发送延迟vrrp_mcast_group4 224.0.0.18 #指定组播IP地址范围
}
虚拟路由器配置
vrrp_instance VI_1 {
state MASTER #身份指定
interface eth0 #指定虚拟路由器使用的物理接口,可以和VIP不在一个网卡
virtual_router_id 51 #每个虚拟路由器唯一标识(0-255),同属一个虚拟路由器的 多个keepalived节点的唯一标识需要一致
priority 100 #当前节点在虚拟路由器中的优先级,范围1-254,优先级越高,值越大
advert_int 1 #VRRP通告时间间隔,默认1s
authentication { #认证机制
auth_type AH | PASS #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
auth_pass 1111 #预共享密钥,仅前八位有效,同一虚拟路由器的密钥必须一致
}
virtual_ipaddress { #虚拟IP
192.168.200.16 #绑定VIp,不指定网卡,默认为eth0;注意:不指定掩码默认为32
192.168.254.101/24 dev eth1
192.168.254.102/24 dev eth2 label eth2:1 #label:标记多VIP在同一网卡上的位置
}
}
启用keepalived日志功能
vim /etc/sysconfig/keepalived
独立子配置文件
当生产环境复杂时,主配置文件内容过多,不易管理,可以使用子配置文件划分内容
vim /etc/keepalived/keepalived.conf
在对应路径下配置响应后缀的文件即可
单主架构(抢占模式)
MASTER配置
yum install -y keepalived
vim /etc/keepalived/keepalived.conf
systemctl restart keepalived.service
BACKUP配置
yum install -y keepalived
推送完成后编辑
vim /etc/keepalived/keepalived.conf
[root@ka1 ~]# scp /etc/keepalived/keepalived.conf root@192.168.0.20:/etc/keepalived/keepalived.conf
#将配置文件推送至KA2
systemctl restart keepalived.service
测试
tcpdump -i eth0 -nn host 224.0.0.18
非抢占模式
抢占模式(preempt)为默认模式,当优先级高的主机回复上线后,会抢占优先级低的主机的MASTER角色,这会使VIP在主机之间切换,造成网络波动。
非抢占模式(nopreempt)在优先级高的主机上线后,不会抢占低优先级主机的MASTER角色,只有当低优先级主机下线后,VIP才会切换至高优先级主机,在非抢占模式下,各节点的角色都为BACKUP
KA1
配置完成后重启服务
KA2
配置完成后重启服务
测试
KA1
KA1停止keepalived,查看KA2
systemctl stop keepalived.service
开启KA1的leepalived查看VIP是否切换
systemctl start keepalived.service
延迟抢占模式
当高优先级的主机上线后,不立即切换VIP,而是延迟一段时间(默认300s)再切换
延迟抢占命令:preempt——delay #默认单位为s
注意:延迟抢占模式需要各节点身份为BACKUP,并且不启用vrrp_strict
KA1
修改配置文件,并重启服务
KA2
修改配置文件,并重启服务
测试
关闭KA1的keepalived服务,10s后重新启动,等待10s查看VIP是否切换到KA1上
VIP单播
默认keepalived节点之间使用组播相互通告信息,容易造成网络环境复杂,可以将其替换为单播,减少网络流量
注意:在开启vrrp_strict时,无法启用单播
KA1
配置完成后,重启服务
KA2
配置完成后,重启服务
测试
tcpdump -i eth0 -nn src host 192.168.0.10 and dst 192.168.0.20
#在没有VIP的节点上查看;src为拥有VIP的节点,dst为没有VIP的节点
双主架构
配置方式与单主架构相同,其keepalived节点之间互相为主备
KA1为VIP1的MASTER,KA2为BACKUP
KA1为VIP2的BACKUP,KA2为MASTER
通知脚本配置
当keepalived的状态发生变化时,通知脚本命令可以自动触发脚本执行,发送邮件通知管理员
默认以用户keepalived_script身份执行脚本
可以使用以下命令指定执行脚本的用户
global_defs {
script_user
}
通知类型
当前节点获得VIP
notify_master "<path> master"
当前节点转换为备用节点
notify_backup "<path> backup"
当前节点失效
notify_fault "<path> fault"
当前节点停止VRRP
notify_stop "<path> stop"
通用格式
notify "<path>"
创建通知脚本
KA1、KA2配置步骤相同
vim /etc/keepalived/mail.sh
chmod +x /etc/keepalived/mail.sh #提供可执行权限
安装邮件发送工具
yum install -y mailx
在收件邮箱中开启SMTP服务,获得授权密码(163、QQ邮箱均可)
添加mailx配置
vim /etc/mail.rc
echo test | mail -s test 123456@test.com #发送测试邮件
添加自动运行脚本命令
vim /etc/keepalived/keepalived.conf
配置完成后重启服务生效
scp /etc/mail.rc root@192.168.0.20:/etc/mail.rc
scp /etc/keepalived/mail.sh root@192.168.0.20:/etc/keepalived/mail.sh
配置后,重启生效
测试
停止、启动keepalived服务,查看邮箱是否收到邮件
keepalived+lvs高可用负载均衡集群
http://t.csdnimg.cn/VdtU4http://t.csdnimg.cn/VdtU4