文章目录

  • 阅读提示
  • 环境
  • 正常运行环境下该配置是对的
  • 主节点配置
  • 备节点配置
  • 在测试环境中发现了问题
  • 分析与解决
  • 出现原因
  • 解决方法
  • 在node1和node2分别加上以下配置
  • 测试顺序


阅读提示

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

环境

  1. centos 7.9
  2. 主服务器_充当主节点(node1):172.24.8.124/16
    备服务器_充当备节点(node2):172.24.8.125/16
  3. 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

keepalived无法绑定虚拟ip keepalived虚拟ip冲突_负载均衡


node2并没有出现vip

keepalived无法绑定虚拟ip keepalived虚拟ip冲突_linux_02


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

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

node1失去了vip

keepalived无法绑定虚拟ip keepalived虚拟ip冲突_linux_03


node2获得了vip

keepalived无法绑定虚拟ip keepalived虚拟ip冲突_linux_04


3. 再次开启node1的keepalived服务

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

主节点node1再次获取了Vip

keepalived无法绑定虚拟ip keepalived虚拟ip冲突_centos_05


备节点node2失去了Vip

keepalived无法绑定虚拟ip keepalived虚拟ip冲突_keepalived无法绑定虚拟ip_06