前言

环境:centos 7.9 keepalived-2.2.7

什么是keepalived

市面上一般有两款高可用开源方案:KeepalivedHeartbeat
keepalived的官网:https://www.keepalived.org/

Keepalived:Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
heartbeat:Heartbeat 是一个基于Linux开源的高可用集群系统。主要包括心跳服务和资源接管两个高可用集群组件。心跳监测服务可以通过网络链路和串口进行,而且支持冗余链路, 它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务。

keepalived高可用故障切换转移原理

Keepalived 高可用服务对之间的故障切换转移,是通过 VRRPVirtual Router Redundancy Protocol , 虚拟路由器冗余协议)来切换的;
Keepalived 服务正常工作时,主 Master 节点会不断地向备节点发送(默认多播的方式)心跳消息,用以告诉备 Backup 节点自己还活着,当主 Master 节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master 节点的心跳了,于是调用自身的接管程序,接管主 Master 节点的 IP 资源及服务,而当主 Master 节点恢复时,备 Backup 节点又会释放主节点故障时自身接管的 IP 资源及服务,恢复到原来的备用角色。

VRRP(Virtual Router Redundancy Protocol , 虚拟路由器冗余协议)协议

VRRP,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由器冗余协议VRRP 的出现就是为了解决静态路由的单点故障问题,VRRP 是通过一种竞选机制来将路由的任务交给某台 VRRP 路由器的。

VRRP 早期是用来解决交换机、路由器等设备单点故障的,下面是交换机、路由的 MasterBackup 切换原理描述,同样适用于 Keepalived 的工作原理。

在一组 VRRP 路由器集群中,有多台路由 VRRP 路由器,但是这么多台物理的机器并不是同时工作的,而是由一台称为 Master 机器负责路由工作,其他的机器都是 BackupMaster 角色并非一成不变的,VRRP 会让每个 VRRP 路由参与竞选,最终获胜的就是 Master 。获胜的 Master 有一些特权,比如拥有虚拟路由器的 IP 地址等,拥有系统资源的 Master 负责转发给网关地址的包和响应 ARP 请求。

VRRP 通过竞选机制来实现虚拟路由器的功能,所有的协议报文都是通过 IP 多播(Multicast)包(默认的多播地址 224.0.0.18)形式发送的。虚拟路由器由 VRID (范围 0-255)和一组 IP 地址组成,对外表现为一个周知的 MAC 地址:00-00-5E-00-10-{VRID}。所以,在一个虚拟路由器中,不管谁是 Master,对外都是相同的 MACIP (称之为 VIP)。客户端主机并不需要因 Master 的改变而修改自己的路由设置。对它们来说,这种切换是透明的。

在一组虚拟路由器中,只有作为 MasterVRRP 路由器会一直发送 VRRP 广播包(VRRP Advertisement messages),此时 Backup 不会抢占 Master。当 Master 不可用时,Backup 就收不到来自 Master 的广播包了,此时多台 Backup 中优先级别最高的路由器会抢占为 Master。这种抢占是非常快速的(可能只有1秒甚至更少),以保证服务的连续性。出于安全性考虑,VRRP 数据包使用了加密协议进行了加密。

keepalive原理 面试技巧

如果你在面试的时候,面试官问你keepalive原理,建议如下这样回答:
keepalive是通过VRRP协议进行通信的,所以我从vrrp开始给您讲起:

1)VRRP,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。
2)VRRP 是通过一种竞选协议机制来将路由任务交给某台 VRRP 路由器的。
3)VRRP 用 IP 多播的方式(默认多播地址(224.0.0.18 ))实现高可用对之间通信。
4)工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的资源。备节点可以有多个,通过优先级竞选,但一般 Keepalived 系统运维工作中都是一对。
5)VRRP 使用了加密协议加密数据,但 Keepalived 官方目前还是推荐用明文的方式配置认证类型和密码。

介绍完了 VRRP,接下来我再介绍一下 Keepalived 服务的工作原理:
Keepalived 高可用对之间是通过 VRRP 进行通信的,VRRP 是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点由于接收不到vrrp心跳包了,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
keepalive服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备就不会抢占主,当主不可用时,备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性,接管的速度最快可以小于1秒。

脑裂现象及原因

何为脑裂,指的是主备节点都活着但因为某些原因导致主节点和备节点无法检测到对方的心跳包,导致各自都争抢资源的所有权,这样严重的就会导致VIP或服务出现在主备两端中,当前端用户写入数据时就可能造成数据混乱或损坏;导致脑裂的原因可能有以下这些:

1、高可用服务器之间的心跳线路出现问题,导致无法正常通信,比如,心跳线坏了断了老化,网卡驱动坏了,ip配置冲突,心跳线连接的设备网卡或交换机坏了等;
2、高可用的服务器上开启了防火墙阻挡了心跳消息传输;
3、心跳网卡地址配置不当,导致心跳信息发送失败等;
4、其他服务配置不当,如心跳方式不同,心跳广播冲突,软件bug等;

常见解决脑裂方案

1、同时使用串行电缆和以太网电缆连接,同时用两条心跳线,这样一条坏了,另外一条还能传输心跳信息;
2、当检测到脑裂时强行关闭一个节点,这需要特殊设备的支持,如stonithfence,即通关单独的电缆发送关机命令关闭其中一个节点服务器;
3、做好对脑裂的监控报警,在问题发生时第一时间介入,降低损失;
4、开发监控脑裂的脚本;
5、如果防火墙开启,一定要允许心跳消息通过,一般通过允许IP段的形式解决;

双实例双主keepalived配置

以上讲的单实例主备的实现,下面讲一下双实例双主的配置实现,其实就是A业务在LB01是主模式,在LB02上是备模式,B业务在LB01是备模式,在LB02上是主模式,下面就以双实例为例讲解不同业务实现双主的配置。
配置的大概如下图所示:
在这里插入图片描述
下面我们在LB01和LB02上重启keepalived服务

systemctl start  keepalived.service					#LB01 LB02都重启keepalived
ip addr| grep 192.168.43.16
ip addr| grep 192.168.43.17

在这里插入图片描述

关闭LB01的keepalived服务,LB02的keepalived服务正常开着,结果如下:
在这里插入图片描述
开启LB01的keepalived服务,关闭LB02的keepalived服务,结果如下:
在这里插入图片描述
以上已经能实现地址漂移了,VIP可以实现相互切换接管,在实际工作中可以把网站A域名解析到192.168.43.16提供服务,把B域名析到192.168.43.17提供服务,当然LB01 LB02也要配置响应的服务,如Nginx反向代理。

解决多组keepalive服务器在一个局域网的冲突问题

我们前面讲到了keepalive都是使用224.0.0.18来作为多播地址发送信息的,那么当在同一个局域网内存在多组keepalive服务器时就会存在多播地址冲突,同时又未使用专门的心跳线通信时,就可能会出现严重的接管问题,解决这个问题的办法就是在同组的keepalive服务器所有的配置文件中指定唯一的多播地址,如下:

global_defs { 
.........................
vrrp_mcast_group4 224.0.0.19		#这就是指定多播地址的配置
}

说明:最好不同的keepalive实例其通信认证密码也不一样。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐