目录
什么是Keepalived
Keepalived 是一种用于实现高可用的软件工具
主要功能
实现对服务器的健康检查:定期检测服务器的运行状态,如网络连接是否正常、服务是否可用等。
虚拟 IP(VIP)管理:可以将一个虚拟 IP 绑定到多台服务器上,当主服务器故障时,自动将虚拟 IP 切换到备份服务器。
工作原理
通过发送心跳报文来检测服务器的状态。主服务器和备份服务器之间相互发送这些报文,当备份服务器在一定时间内未收到主服务器的心跳报文时,就会认为主服务器故障。
触发故障转移机制,将虚拟 IP 绑定到备份服务器上,并接管主服务器的服务,以保证服务的连续性。
应用场景
在负载均衡架构中:与负载均衡软件(如 LVS、Nginx 等)配合使用,当其中一台负载均衡服务器故障时,自动切换到另一台服务器,确保负载均衡服务不中断。
保障关键业务服务的高可用性:如数据库服务器、Web 服务器等,当主服务器出现故障时,快速切换到备份服务器,减少服务中断时间
Keepalived 的工作原理
Keepalived 的工作原理主要包含以下关键要点:
心跳机制
Keepalived 采用多播或单播等方式在主服务器(Master)和备份服务器(Backup)之间发送心跳报文,通常是按照一定的时间间隔(可配置)进行发送。
这些心跳报文用于相互检测对方的状态,以判断服务器是否正常运行。
状态监测
对自身服务以及关联的关键资源(如网络连接、应用程序端口等)进行持续监测。
同时也接收来自对方服务器的心跳报文,并根据报文的接收情况和自身监测结果来综合判断服务器的健康状态。
故障转移
当主服务器在规定时间内没有收到备份服务器的心跳报文,或者自身监测到自身或对方出现故障时,会认为自身或对方出现问题。
如果主服务器判定自身故障,它会主动停止自身的服务并释放资源,如虚拟 IP(VIP)等。
备份服务器在发现主服务器故障后,会迅速启动自身的服务,并接管主服务器的虚拟 IP,开始对外提供服务,以实现服务的无缝切换,保证业务的连续性。
选举机制(在多主多备场景下)
在一些复杂的高可用架构中,如果存在多个 Keepalived 实例,当故障发生后,多个备份服务器之间可能需要通过一定的选举规则来确定新的主服务器。
选举通常基于预先配置的优先级或者根据服务器的一些特定属性(如硬件性能等)来进行。
Keepalived功能
基于 vrrp 协议完成地址流动
为 VIP 地址所在的节点生成 ipvs 规则(在配置文件中预先定义)
为 ipvs 集群的各 RS 做健康状态检测
基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务
Keepalived环境准备
###主机1
版本:rhel7.9
hostname: real server1
172.25.254.110
###主机2
版本:rhel7.9
hostname: real server2
172.25.254.120
###主机3
版本:rhel7.9
hostname: KA1
172.25.254.10
###主机4
版本:rhel7.9
hostname: KA2
172.25.254.20
Keepalived相关文件
软件包名: keepalived
主程序文件:/usr/sbin/keepalived
主配置文件:/etc/keepalived/keepalived.conf
配置文件示例:/usr/share/doc/keepalived/
Unit File:/lib/systmed/system/keepalived.service
Unif File的环境配置文件:/etc/sysconfig/keepalived
Keepalived的安装
### KA1
dnf install keepalived -y
systemctl start keepalived
ps axf | grep keepalived
Keepalived配置说明
keepalived配置文件组成部分
配置文件:/etc/keepalived/keepalived.conf
配置文件组成:
GLOBAL CONFIGURATION
Global definitions: 定义邮件配置,route_id,vrrp配置,多播地址等
VRRP CONFIGURATION
VRRP instance(s): 定义每个vrrp虚拟路由器
LVS CONFIGURATION
Virtual server group(s)
Virtual server(s): LVS集群的VS和RS
Keepalived配置语法说明
帮助
man keepalived.conf
全局配置
global_defs {
notification_email {
111122223333@qq.com #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
111222333555@163.com
}
notification_email_from keepalived@example.com #发邮件的地址
smtp_server 127.0.0.1 #邮件服务器地址
smtp_connect_timeout 30 #邮件服务器连接超时时间
router_id ka1.ccc.com #每个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 #绑定为当前虚拟路由器使用的物理接口,如:eth0,可以和VIP不在一个网卡
virtual_router_id 100 #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动
#同属一个虚拟路由器的多个keepalived节点必须相同
#务必要确认在同一网络中此值必须唯一
priority 100 #当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同
advert_int 1 #vrrp通告的时间间隔,默认1s
authentication { #认证机制
auth_type PASS #两种机制分别为AH和PASS
#AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
auth_pass 1111 #预共享密钥,仅前8位有效
#同一个虚拟路由器的多个keepalived节点必须一样
}
}
virtual_ipaddress { #虚拟IP,生产环境可能指定上百个IP地址
172.25.254.100/24 dev eth0
}
}
修改KA1配置文件
### 安装keepalived
yum install keepalived -y