Keepalived是一个在Linux下的轻量级高可用解决方案。它是一个类似于layer3、4和5交换机制的软件,用于检测服务器的状态。
Keepalived可以自动完成服务器的状态检测和故障隔离,不需要人工干涉。它通过定期向服务器群中的服务器发送ICMP数据包来检测服务器的IP地址是否激活。
如果发现某台服务器的IP地址没有激活,Keepalived将报告这台服务器失效,并将它从服务器群中剔除。
当服务器工作正常后,Keepalived会自动将服务器加入到服务器群中。这些工作全部自动完成,不需要人工干涉。
keepalived利用VRRP Script 技术 调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先动态调整,从而实现其它应用的高可用性功能。
VRRP Script 配置
定义脚本
vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值,公共定义,可被多个实例调用,定义在vrrp实例之外的独立配置块,一般放在global_defs设置块之后。
vrrp_script {
script | #此脚本返回值为非0时,会触发下面OPTIONS执行
OPTIONS
}
通常此脚本用于监控指定应用的状态。一旦发现应用的状态异常,则触发对MASTER节点的权重减至低于SLAVE节点,从而实现 VIP 切换到 SLAVE 节点
调用脚本
track_script:调用vrrp_script定义的脚本去监控资源,定义在VRRP实例之内,调用事先定义的vrrp_script
track_script {
SCRIPT_NAME_1
SCRIPT_NAME_2
}
定义 VRRP script
vrrp_script { #定义一个检测脚本,在global_defs 之外配置
script | #shell命令或脚本路径
interval #间隔时间,单位为秒,默认1秒
timeout #超时时间
weight #默认为0,如果设置此值为负数,当上面脚本返回值为非0时,会将此值与本节点权重相加可以降低本节点权重,即表示fall. 如果是正数,当脚本返回值为0,会将此值与本节点权重相加可以提高本节点权重,即表示 rise.通常使用负值
fall #执行脚本连续几次都失败,则转换为失败,建议设为2以上
rise #执行脚本连续几次都成功,把服务器从失败标记为成功
user USERNAME [GROUPNAME] #执行监测脚本的用户或组
init_fail #设置默认标记为失败状态,监测成功之后再转换为成功状态
}
调用 VRRP script
-254..254>
vrrp_instance VI_1 {
…
track_script {
chk_down
}
}
-254..254>
抢占延迟模式 preempt_delay
抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认300s)再抢回VIP
preempt_delay # #指定抢占延迟时间为#s,默认延迟300s
注意:需要各keepalived服务器state为BACKUP,并且不要启用 vrrp_strict
#ha1主机配置
-254..254>
vrrp_instance VI_1 {
state BACKUP #都为BACKUP
interface eth0
virtual_router_id 66
priority 100 #优先级高
advert_int 1
preempt_delay 60 #抢占延迟模式,默认延迟300s
}
#ha2主机配置
-254..254>
vrrp_instance VI_1 {
state BACKUP #都为BACKUP
interface eth0
virtual_router_id 66
priority 80 #优先级低
advert_int 1
}
VIP单播配置
默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量
-254..254>
#在所有节点vrrp_instance语句块中设置对方主机的IP,建议设置为专用于对应心跳线网络的地址,而非使用业务网络
unicast_src_ip #指定发送单播的源IP
unicast_peer {
#指定接收单播的对方目标主机IP
......
}
Keepalived也实现了虚拟路由冗余协议(VRRP),可以解决静态路由出现的单点故障问题,实现网络不间断稳定运行。它通过VRRP能够在网络发生故障时透明的进行设备切换而不影响主机之间的数据通讯。
总的来说,Keepalived是一个用于实现高可用性解决方案的软件,能够检测服务器的状态并自动完成故障隔离和恢复工作。
✨✨ 欢迎关注 ✨✨