Keepalived——解决 主备节点同时抢占VIP 的问题

阅读提示
该文中的VIP,vip,Vip都是指一个东西
Virtual IP——虚拟IP地址

环境
centos 7.9
主服务器_充当主节点(node1):172.24.8.124/16
备服务器_充当备节点(node2):172.24.8.125/16
Virtual IP设为172.24.8.242
正常运行环境下该配置是对的
主节点配置

#yum install keepalived //装了心跳检测包
#vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

vrrp_script chk_nfs {
script "/etc/keepalived/chk_nfs.sh"
interval 2
weight -40
}
vrrp_instance node1 {
state MASTER # 主节点标志——MASTER
interface ens32
virtual_router_id 51
priority 100 # 优先级数最高为255,主节点的优先级必须要高于备节点
advert_int 1
unicast_src_ip 172.24.8.124
unicast_peer {
172.24.8.125
}

authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nfs
}
notify_stop /etc/keepalived/notify_stop.sh
notify_master /etc/keepalived/notify_master.sh
notify_backup /etc/keepalived/notify_backup.sh
virtual_ipaddress {
172.24.8.242
}
}

备节点配置

#yum install keepalived //装了心跳检测包
#vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

vrrp_script chk_nfs {
script "/etc/keepalived/chk_nfs.sh"
interval 2
weight -40
}
vrrp_instance node2 {
state BACKUP # 备节点标志——BACKUP
interface ens32
virtual_router_id 51
priority 99 #备节点要小于主节点
advert_int 1
unicast_src_ip 172.24.8.125 #本机网卡IP
unicast_peer {
172.24.8.124 #对端网卡IP
}
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nfs
}
notify_stop /etc/keepalived/notify_stop.sh
notify_master /etc/keepalived/notify_master.sh
notify_backup /etc/keepalived/notify_backup.sh
virtual_ipaddress {
172.24.8.242
}
}

在测试环境中发现了问题
主备节点同时拥有了Virtual IP,所以需要进一步分析与解决。

分析与解决
出现原因
出现这问题的原因是服务器网络环境中,因为路由交换层禁用了ARP的广播限制,造成KEEPALIVE主备协议无法通过广播的方式进行通信,造成主备两台服务器都抢占Virtual-IP地址,所以导致两台服务器同时拥有同一个VIP地址的情况出现。

解决方法

- 通过配置来指定IP的两台服务器间进行单薄通讯(基于阿里云说明文档中解释只能支持两台使用同一个HAVIP地址)
- 根据该解决方法可行性的分析下,多备方式用同样的方式应该同样可行。

在node1和node2分别加上以下配置

node1主节点添加的配置

unicast_src_ip 172.24.8.124##(本地IP地址)
unicast_peer {
172.168.8.125#(对端IP地址)该地址一定不能忘记
}

 

node2备节点添加的配置

unicast_src_ip 172.24.8.125##(本地IP地址)
unicast_peer {
172.168.8.124#(对端IP地址)该地址一定不能忘记
}

通过加上unicast_src_ip和unicast_peer参数实现了主备节点的单播通讯。

测试顺序

1.node1,node2同时启用keepalived,并分别查看其VIP地址

$ systemctl start keepalived
$ ip a

node1出现了vip

node2并没有出现vip

2. node1关闭keepalived,Virtual ip向node2漂移

$ systemctl stop keepalived #node1操作
$ ip a #node1,node2都操作以查看vip的变化

node1失去了vip

node2获得了vip

3. 再次开启node1的keepalived服务

$ systemctl start keepalived #node1操作
$ ip a #node1,node2都操作以查看vip地址变化

主节点node1再次获取了Vip

备节点node2失去了Vip

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_45052781/article/details/125772755

posted on 2024-11-20 14:54  北橘  阅读(760)  评论(0)    收藏  举报