一、基本概念
keepalived进程
keepalived启动后会有三个进程
父进程内存管理子进程管理等等
子进程VRRP子进程
子进程healthchecker子进程
二、主备切换
切换前:
关闭主节点:
在mater节点执行命令reboot
备升主 :
可以发现发现备节点多了一个虚拟ip(vip)
keepalived配置文件说明
bash
local_address_group laddr_g1 {
172.31.1.23
}
vrrp_script chk_lvs
{
script "/etc/keepalived/lvs_check.sh 192.168.79.253"
interval 2
timeout 150
fall 10
rise 5
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 5
priority 150
nopreempt
advert_int 1
dont_track_primary
virtual_ipaddress {
192.168.79.253 dev eth1 label eth1:1
}
track_script {
chk_lvs
}
notify_master "/etc/keepalived/exclusive_role_change.sh master"
notify_backup "/etc/keepalived/exclusive_role_change.sh backup"
notify_fault "/etc/keepalived/exclusive_role_change.sh fault"
garp_master_refresh 30
}
bash
这段配置文件是一个 keepalived 的配置示例,描述了一个 VRRP 实例(VI_1),用于在两台服务器之间实现高可用性。具体来说,这个配置文件中定义了以下内容:
local_address_group 定义了本地地址组,其中包含一个 IP 地址(172.31.1.23)。
vrrp_script 定义了一个 VRRP 脚本(chk_lvs),用于检查 LVS 的状态。脚本的路径为 "/etc/keepalived/lvs_check.sh 192.168.79.253",检查间隔为 2 秒,超时时间为 150 秒,连续失败 10 次后切换到备用状态,连续成功 5 次后切换回主用状态。
vrrp_instance 定义了一个 VRRP 实例(VI_1),其中包括了以下内容:
state BACKUP 表示当前实例的状态为备用状态。
interface eth0 指定了 VRRP 实例使用的网络接口。
virtual_router_id 5 定义了虚拟路由器的 ID。
priority 150 设置了当前节点的优先级为 150。
nopreempt 表示不允许其他节点抢占主用状态。
advert_int 1 设置了 VRRP 广播间隔为 1 秒。
dont_track_primary 表示不跟踪主用节点。
virtual_ipaddress 定义了虚拟 IP 地址(192.168.79.253),并指定了使用的网络接口和标签。
track_script 指定了需要跟踪的脚本(chk_lvs)。
notify_master、notify_backup 和 notify_fault 分别定义了在节点角色变化时需要执行的通知脚本。
garp_master_refresh 30 设置了主用节点发送 GARP 包的刷新间隔为 30 秒。
这个配置文件的作用是在两台服务器之间实现高可用性,通过 VRRP 实现了虚拟 IP 地址的故障切换,同时通过跟踪脚本检测 LVS 的状态来实现故障检测和自动切换。
如何判断是否会进行切换
bash
vrrp_script 里的script返回值为0时认为检测成功,其它值都会当成检测失败;
weight 为正时,脚本检测成功时此weight会加到priority上,检测失败时不加;
主失败:主 priority < 从 priority + weight 时会切换。
主成功:主 priority + weight > 从 priority + weight 时,主依然为主
weight 为负时,脚本检测成功时此weight不影响priority,检测失败时priority -- abs(weight)
主失败:主 priority -- abs(weight) < 从priority 时会切换主从
主成功:主 priority > 从priority 主依然为主