keepalived实现业务高可用

时间:2022-12-20 19:08:55

安装部署配置

keepalived实现业务高可用

IP

用途

账号/密码

安装方式

10.100.174.84

实IP

test/********

root/********

Yum install

10.100.174.85

实IP

Yum install

10.100.174.86

VIP


1、查看系统版本

[test@localhost ~]$ cat  /etc/redhat-release

Red Hat Enterprise Linux Server release 7.9 (Maipo)

2、安装运维工具

Locate包名称:mlocate

yum install mlocate

Tcpdump包名称:tcpdump

yum install tdpdump

rz\sz包名称:lrzsz

3、yum默认安装

两台实体服务器均执行安装命令:

yum install keepalived

keepalived实现业务高可用

4、配置keepalived

为避免脑裂情况,本次采用非抢占模式配置,非抢占模式说明:

(1)两个节点的state都必须配置为BACKUP;

(2)两个节点都必须加上配置 nopreempt;

(3)其中一个节点的优先级必须要高于另外一个节点的优先级;

1)两台服务器配置文件路劲:/etc/keepalived/keepalived.conf

2)主节点配置(注意:本次采用非抢占模式配置)

[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_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 keepalived

global_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
}
}

5、启动keepalived

两台服务器同时执行命令:

systemctl start keepalived.service

启用keepalived服务:

systemctl enable keepalived

启动keepalived服务:

systemctl start keepalived


6、日志配置

#配置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

Keepalived生效验证

1、两个节点都启动的正常情况验证

说明:#两个节点都启动时,由于主节点优先级高于备用节点,所以只有主节点上有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 ~]#

2、停掉主节点的情况验证

说明:#由于主节点keepalived挂掉,备用节点会自动接管主节点的工作,即VIP

主节点-停服后,无VIP信息

[root@localhost ~]# systemctl stop keepalived
[root@localhost ~]# ps -ef |grep keepalived
root 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 ~]#

3、如何查看keepalived正常运行

 如何检查keepalived正常运行:

查看keepalived三个进程是否都启动,命令:ps aux | grep keepalived

Keepalived 正常运行时,共启动 3 个进程,其中一个进程是父进程,负责监控其子进程;一个是 vrrp 子进程;另外一个是 checkers 子进程。

keepalived实现业务高可用


开机自启动配置

1、Rhel7.9通过systemctl开机自启keepalived设置 ;


1)查看已启动的服务列表:systemctl list-unit-files |grep enabled

输出的结果中无 keepalived.service

2)设置在开机时启用服务: systemctl enable keepalived.service  

3)查看服务是否开机启动:systemctl is-enabled keepalived.service 结果输出 enabled,则设置成功;

2、通过chkconfig设置开机启动服务:

查看服务列表:chkconfig --list

查看keepalived是否开机启动:chkconfig --list | grep keepalived

设置开机启动:chkconfig keepalived on

其他常见问题记录

keepalived脑裂产生的原因

脑裂(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必须比另外一台高】

问题二:keepalived配置nopreempt不抢占模式,总是失效;或者问题现象为:双BACKUP加nopreempt不抢占模式时不起作用,两个机器同时拥有vip

问题原因:是防火墙禁用了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报文。