Keepalived 一文带你理解Keepalived负载高可用原理

Keepalived是什么?


keepalived软件起初是专门为LVS负载均衡软件而设计,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能,因此,keepalived除了能够管理LVS软件ipvsadm外,还可以作为其它服务(例如:Nginx、HAProxy、MySQL等)的高可用解决方案软件 keepalived软件主要使用过VRRP协议实现高可用功能。

VRRP是Virtual Route Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行 所以,Keepalived一方面具有配置管理LVS的功能,同时还具有LVS下面节点进行健康检查的功能,另一方面也可以实现系统网络服务的高可用功能 Keepalived官网 http://www.keepalived.org

 

Keepalived服务的三个重要功能


1)管理LVS负载均衡软件ipvsadm 2)实现LVS集群节点的健康检查 3)作为系统网络服务的高可用性

Keepalived 一文带你理解Keepalived负载高可用原理_第1张图片

 

工作机制


Keepalived通过VRRP协议来竞争实现虚拟路由的功能,所有的协议报文都是通过IP多播(multicast)包发送(多播地址224.0.0.18)每个发送的多播数据包都是从多播地址发送;虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址:00-00-5E-00-01-{VRID}.所以在一个虚拟路由器中,不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因为MASTER的改变而修改自己的路由配置,对他们来说,这一切都是透明的。在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP多播包,这里说的MASTER发送多播包就是指的是上面所说的由VRRP协议224.0.0.18地址所发出的多播包,发多播包是为了告诉Backup节点自己还活着,BACKUP就不会抢占MASTER,除非它的优先级(priority更高)。

工作原理:Keepalived高可用对之间是通过VRRP通信的,因此,我们从 VRRP开始了解起:    

1) VRRP,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。    

2) VRRP是通过一种竟选协议机制来将路由任务交给某台 VRRP路由器的。    

3) VRRP用 IP多播的方式(默认多播地址(224.0.0.18))实现高可用对之间通信。

[root@real-server1 tmp]#  tcpdump -i ens32 -nn net 224.0.0.18
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens32, link-type EN10MB (Ethernet), capture size 262144 bytes
17:37:57.081086 IP 192.168.179.103 > 224.0.0.18: VRRPv2, Advertisement, vrid 151, prio 100, authtype simple, intvl 5s, length 20
17:38:02.082833 IP 192.168.179.103 > 224.0.0.18: VRRPv2, Advertisement, vrid 151, prio 100, authtype simple, intvl 5s, length 20

4) 工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般 Keepalived系统运维工作中都是一对。    

5) VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码。  

介绍完 VRRP,接下来我再介绍一下 Keepalived服务的工作原理:  

Keepalived高可用对之间是通过 VRRP进行通信的, VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。  

在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。

 

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


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

 

Keepalived双主模式


Keepalived不抢占机制(nopreempt)

当Master出现问题后,Backup会竞选为新的Master,那么之前的Master如果故障恢复后,是继续成为Master还是变成Backup呢?默认情况下,如果没设置不抢占,那么之前的Master起来后还是会继续抢占成为Master,也就是说,整个过程需要发生两次切换;主机诶单出故障会发送Master —> Backup,主节点恢复会发送 Backup —>Master;这样对业务频繁的切换是不能容忍的,因此我们希望Master起来后成为Backup,所以要设置不抢占。

Keepalived里面提供了 nopreempt 这个配置只能用在状态为Backup的机器上,但是我们明明希望的是Master不进行抢占,那没办法,Master的状态也得设置为Backup,也就是说两台负载均衡器都要讲state状态设置为Backup;那么谁是Master?就要通过优先级priority的高低来决定了,优先级高得成为Master,反之。

你可能感兴趣的:(keepalived)