IP (相关资料图) | 用途 | 账号/密码 | 安装方式 |
10.100.174.84 | 实IP | test/******** root/******** | Yum install |
10.100.174.85 | 实IP | Yum install | |
10.100.174.86 | VIP |
[test@localhost ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
Locate包名称:mlocate
yum install mlocate
Tcpdump包名称:tcpdump
yum install tdpdump
rz\sz包名称:lrzsz
两台实体服务器均执行安装命令:
yum install keepalived
为避免脑裂情况,本次采用非抢占模式配置,非抢占模式说明:
(1)两个节点的state都必须配置为BACKUP;
(2)两个节点都必须加上配置nopreempt;
(3)其中一个节点的优先级必须要高于另外一个节点的优先级;
1)两台服务器配置文件路劲:/etc/keepalived/keepalived.conf
2)主节点配置(注意:本次采用非抢占模式配置)
[root@localhost ~]# cat /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs { router_id ultra01}vrrp_instance VI_1 { state BACKUP nopreempt interface ens192 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass Tmp123$%^ } virtual_ipaddress { 10.100.174.86 }}
3)备节点配置
[root@localhost ~]# cat /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs { router_id ultra02}vrrp_instance VI_1 { state BACKUP nopreempt interface ens192 virtual_router_id 51 priority 50 advert_int 1 authentication { auth_type PASS auth_pass Tmp123$%^ } virtual_ipaddress { 10.100.174.86 }}
两台服务器同时执行命令:
systemctl start keepalived.service
启用keepalived服务:
systemctl enable keepalived
启动keepalived服务:
systemctl start keepalived
#配置keepalived
vi /etc/sysconfig/keepalived
添加:KEEPALIVED_OPTIONS="-D -d -S 0"
#配置rsyslog抓取日志
vi /etc/rsyslog.conf
添加:local0.* /var/log/keepalived.log
#重启服务
systemctl restart keepalived rsyslog
说明:#两个节点都启动时,由于主节点优先级高于备用节点,所以只有主节点上有VIP地址生效;
主节点-VIP地址生效查看:
[root@localhost ~]# ip a|grep 174.86 inet 10.100.174.86/32 scope global ens192
备节点-VIP地址查看:(说明:未生效-无VIP结果)
[root@localhost ~]# ip a|grep 174.86[root@localhost ~]#
说明:#由于主节点keepalived挂掉,备用节点会自动接管主节点的工作,即VIP
主节点-停服后,无VIP信息
[root@localhost ~]# systemctl stop keepalived[root@localhost ~]# ps -ef |grep keepalivedroot 108049 107959 0 15:37 pts/0 00:00:00 grep --color=auto keepalived[root@localhost ~]# ip a|grep 174.86[root@localhost ~]#
备节点-接管业务,有VIP信息
[root@localhost ~]# ip a|grep 174.86 inet 10.100.174.86/32 scope global ens192[root@localhost ~]#
如何检查keepalived正常运行:
查看keepalived三个进程是否都启动,命令:ps aux | grep keepalived
Keepalived 正常运行时,共启动 3 个进程,其中一个进程是父进程,负责监控其子进程;一个是 vrrp 子进程;另外一个是 checkers 子进程。
1)查看已启动的服务列表:systemctl list-unit-files |grep enabled
输出的结果中无 keepalived.service
2)设置在开机时启用服务: systemctl enable keepalived.service
3)查看服务是否开机启动:systemctl is-enabled keepalived.service 结果输出 enabled,则设置成功;
查看服务列表:chkconfig--list
查看keepalived是否开机启动:chkconfig--list |grepkeepalived
设置开机启动:chkconfigkeepalived on
脑裂(split-brain):指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。
一般来说裂脑的发生,有以下几种原因:
1.高可用服务器对之间心跳线链路发生故障,导致无法正常通信。
2.因心跳线坏了(包括断了,老化)。
3. 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。
4.因心跳线间连接的设备故障(网卡及交换机)。
5.因仲裁的机器出问题(采用仲裁的方案)。
6.高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
7.高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。
8.其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。
9.Keepalived配置里同一 VRRP实例如果virtual_router_id两端参数配置不一致也会导致裂脑问题发生。
————————————————
但有一个问题,正常情况下A(master)主服务器运行时浮动ip(vip)绑定在A服务器的网卡上,当A服务器宕机时,B(backup)从服务器自动接替工作浮动ip绑定到B服务器网卡上,若修复好A服务器从新上线,A服务器会抢占浮动ip,强制重新绑定到A服务器网卡上。
如何避免抢占浮动ip,A宕机时B接替工作,当A恢复上线时自动当从机,B继续工作?
解决方案:
修改A(master)主服务的/etc/keepalived/keepalived.conf文件中state的值为BACKUP,在参数中添加nopreempt命令,B服务器的配置文件不改变。
【这个nopreempt配置只能设置在state为BACKUP的主机上,而且这个主机的priority必须比另外一台高】
问题原因:是防火墙禁用了vrrp协议
问题解决:需要防火墙允许vrrp协议
Iptables命令:
Iptables -A INPUT -i eth0 -p 112 -j ACCEPT
firewalld命令:
firewalld添加规则:
firewall-cmd --add-rich-rule="rule protocol value="vrrp" accept" --permanent
firewall-cmd --reload
以上验证,配置成功;或者==>
firewalld开放vrrp协议
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens192--destination 224.0.0.18 --protocol vrrp -j ACCEPT
通过tcpdump抓包判断高可用网络是否正常
命令:tcpdump -i ens192|grep VRRP
说明:正常情况下,主节点会像备节点发送VRRP报文。