一、简述
Keepalived 组件是Linux服务器端做高可用方案的常用组件,它通过在主备节点配置虚IP的方式,实现主节点故障时自动转移切换到备节点,实现高可用性。
二、部署安装
1、需要准备两个节点 ,如 172.20.27.121 , 172.20.27.128
2、需要准备一个测试用的虚拟IP ,如 172.20.27.205
3、安装
yum install keepalived
systemctl start/status/restart/stop keepalived.service
4、配置 ( /etc/keepalived/keepalived.conf )
! Configuration File for keepalived
global_defs {
router_id name # 定义标识
}
vrrp_script chk_ngnix { ## 定义需要检测的服务
script "/etc/keepalived/check_nginx.sh" # 检测的脚本
interval 5 ## 间隔时间 秒
weight -20 ## 权重降低 脚本返回非 0
fail 2 ## 连续两次失败 算失败
rise 1 ## 成功一次 就算成功,恢复 priority
}
vrrp_instance VI_1 {
state MASTER ## 初始状态
interface eth0 ## 绑定的网卡 ,必须按实际机器的网卡填 ,
garp_master_delay 10 ##
smtp_alert
virtual_router_id 51 ## 路由标识 , MASTER和BACKUP 必须一致, 同一网段里有多个VIP时, 需要配置不一样的, 或者使用单播模式, 默认是组播通信方式
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 172.20.27.121 ## 单播 方式 本机IP ,,
unicast_peer {
172.20.27.128 ## 单播 方式 另一节点的IP ,或者多个, backup 节点 配置需要反过来
}
virtual_ipaddress {
172.20.27.205 ## 虚拟IP 可以是一个或者多个
}
}
三、测试验证
1、明确验证测试场景及预期
挑选两个节点部署 keepalived 和nginx服务 ,验证vip 是否自动漂移,以及漂移时的变化
启动keepalived 时会将vip 加入到网卡, 两个keepalived 服务只会有一个Master 节点, master所在节点,网卡有VIP, backup节点,进程状态是backup state , 网卡是没VIP的,
在将Master keepalived 停止掉后, 另一节点自动变更为Master, 网卡会更新写入VIP ,对外提供服务。
2、验证
准备nginx 作为运行的服务,设定一个可访问的页面作为测试可用性的例子 ,默认都先运行好nginx 服务, 且设定主备节点上的页面内容不一样,以便区分。
以128节点为主,121节点为备, 启动keepalived 服务,启动后可以观察到121节点上没有绑定205虚IP:
用虚IP访问nginx ,可以看到页面
模拟故障,通过停止keepalived服务模拟故障,可以观察到虚IP发生了转移
在备节点121上可以看到虚IP已经转移到节点上了, keepalived的状态日志有显示状态变化“entering Master state ”
仍然访问虚IP指向的页面 ,可以看到是121的页面
可以看到keepalived能否实现故障转移
四、常见问题
vrrp_id 配置相同导致异常
同一网段内多组虚IP 的keepalived 的 virtual_router_id 使用的都是100 ,默认的组播模式 ,keepalived 服务会收到别的keepalived发送的心跳包,但是心跳包里面的虚IP不同,冲突造成心跳检测不稳定,这样会引起keepalived 备节点发生异常的状态切换, 修改后没有错误打印
五、 参考资料
1、keepalived组播与单播的深入对比 keepalived组播与单播的深入对比