keepalived的知识概括

1.1 背景:
最近有客户在云上使用keepalived的实现应用高可用的场景,对keepalived的相关知识进行总结,虚机进行的安装测试,对相关测试进行记录
环境:

操作系统 节点名称 IP地址 VIP
centos-7.6 keepalived001 172.20.128.5 172.20.128.100
centos-7.6 keepalived002 172.20.128.6 172.20.128.100

1.2 keepalived介绍
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。
1.3 keepalived服务的三个重要功能

* 管理LVS负载均衡软件
* 实现LVS集群节点的健康检查中
* 网络服务的高可用性(failover)

1.4 Keepalived高可用故障切换转移原理Keepalived高可用服务对之间的故障切换转移,是通过 VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)来实现的。在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活看,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
1.5 VRRP原理VRRP ,全 称 Virtual Router Redundancy Protocol ,中文名为虚拟路由冗余协议 ,VRRP的出现就是为了解决静态路由的单点故障问题。
VRRP的工作过程:

* 虚拟路由器中的路由器根据优先级选举出Master。Master路由器通过发送ARP报文,将自己的虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务;
* Master路由器周期性发送VRRP报文,以公布其配置信息(优先级等)和工作状况;
* 如果Master路由器出现故障,虚拟路由器中的Backup路由器将根据优先级重新选举新的Master;
* 虚拟路由器状态切换时,Master路由器由一台设备切换为另外一台设备,新的Master路由器只是简单地发送一个携带虚拟路由器的MAC地址和虚拟IP地址信息的免费ARP报文,这样就可以更新与它连接的主机或设备中的ARP相关信息。网络中的主机感知不到Master路由器已经切换为另外一台设备。
* Backup路由器的优先级高于Master路由器时,由Backup路由器的工作方式(抢占方式和非抢占方式)决定是否重新选举Master。

VRRP的主要作用:

* Master路由器的选举;
* Master路由器状态的通告;
* 同时,为了提高安全性,VRRP还提供了认证功能;下面将从上述三个方面详细介绍VRRP的工作过程。

1、Master的选举过程:

* 如果VRRP报文中Master路由器的优先级高于自己的优先级,则路由器保持在Backup状态;

* 如果VRRP报文中Master路由器的优先级低于自己的优先级,采用抢占工作方式的路由器将抢占成为Master状态,周期性地发送VRRP报文,采用非抢占工作方式的路由器仍保持Backup状态;

* 如果在一定时间内没有收到VRRP报文,则路由器切换为Master状态。

VRRP优先级的取值范围为0到255(数值越大表明优先级越高),可配置的范围是1到254,优先级0为系统保留给路由器放弃Master位置时候使用,255则是系统保留给IP地址拥有者使用。当路由器为IP地址拥有者时,其优先级始终为255。因此,当虚拟路由器内存在IP地址拥有者时,只要其工作正常,则为Master路由器。
2、 Master路由器状态的通告

* Master路由器周期性地发送VRRP报文,在虚拟路由器中公布其配置信息(优先级等)和工作状况。Backup路由器通过接收到VRRP报文的情况来判断Master路由器是否工作正常。

* Master路由器主动放弃Master地位(如Master路由器退出虚拟路由器)时,会发送优先级为0的VRRP报文,致使Backup路由器快速切换变成Master路由器。这个切换的时间称为Skew time,计算方式为:(256-Backup路由器的优先级)/256,单位为秒。

* 当Master路由器发生网络故障而不能发送VRRP报文的时候,Backup路由器并不能立即知道其工作状况。Backup路由器等待一段时间之后,如果还没有接收到VRRP报文,那么会认为Master路由器无法正常工作,而把自己升级为Master路由器,周期性发送VRRP报文。如果此时多个Backup路由器竞争Master路由器的位置,将通过优先级来选举Master路由器。Backup路由器默认等待的时间称为Master_Down_Interval,取值为:(3×VRRP报文的发送时间间隔)+Skew time,单位为秒。

* 在性能不够稳定的网络中,Backup路由器可能因为网络堵塞而Master_Down_Interval期间没有收到Master路由器的报文,而主动抢占为Master位置,如果此时原Master路由器的报文又到达了,就会出现虚拟路由器的成员频繁的进行Master抢占现象。为了缓解这种现象的发生,特制定了延迟等待定时器。它可以使得Backup路由器在等待了Master_Down_Interval后,再等待延迟等待时间。如在此期间仍然没有收到VRRP报文,则此Backup路由器才会切换为Master路由器,对外发送VRRP报文。

* Backup路由器在Master路由器坏掉之后,正常情况下需要等待Master_Down_Interval才能切换为新的Master的位置,这段时间内主机将无法正常通信,因为此时没有Master设备替它转发报文。为了解决这个网络故障,Backup设备提供了一个监听Master工作状态的功能,使得Master路由器坏掉之后Backup能够立即切换成为新的Master路由器,维持网络通讯。Backup路由器监视Master路由器采用的是具有快速检测功能的BFD技术。在Backup设备上使用该技术监视Master路由器的状态,一旦Master路由器发生故障,Backup就可以自动切换成为新的Master路由器,将切换时间缩短到毫秒级。

二 Keepalived的安装
1、环境:

* yum install epel-release -y

* yum -y install keepalived

2、配置文件编辑
keepalived001
! Configuration File for keepalived

global_defs {
router_id 001
}

vrrp_instance VI_1 {

state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
    auth_type PASS
    auth_pass 1111
}
virtual_ipaddress {
    172.20.128.100
}

}

keepalived002
! Configuration File for keepalived

global_defs {
router_id 002

}

vrrp_instance VI_1 {

#状态参数 master/backup
state MASTER 
# 虚IP地址放置的网卡位置
interface eth0
# 同一家族要一直,同一个集群id一致
virtual_router_id 51
# 优先级决定是主还是备,越大越优先
priority 100 
#主备通讯时间间隔
advert_int 1
authentication {
    auth_type PASS
    auth_pass 1111
}
virtual_ipaddress {
    172.20.128.100
    #  设备之间使用的虚拟ip地址
}

}
在keepalived001上把进程杀掉,可以看到服务自动被backup接管并成为master向外发vrrp的消息。如下图:
keepalived的知识概括
在keepalived001上启动进程,发现keepalived又成为主
keepalived的知识概括
三 keepalived 抢占式 和 非抢占式

抢占式
抢占模式是指当keepalived的某台机器挂了之后VIP漂移到了备节点,当主节点恢复后主动将VIP再次抢回,keepalived默认工作在抢占模式下。抢占式有三种情况:

* 两台都为master,server1的优先级比server2的高,keepalived启动后server1为主,server1出问题的时候server2接管,server1恢复后再次提升为master角色。

实验环境如上面的截图,keepalived001和keepalived002均为master节点,节点keepalived001的优先级为150,keepalived002为优先级100,当keepalived001上的keepalived被杀掉后keepalived002接管,keepalived001节点上的keepalived进程开启后自动抢占vip。

* server1为master ,server2为backup,server1的优先级高于server2,当server1出现故障的时候切到server2,此时server2提升为master,当server1恢复的时候,因server1的优先级比较高server1重新升级为master。

实现环境如下图所示:
keepalived的知识概括
keepalived的知识概括
keepalived的知识概括
server1为master ,server2为backup,server1的优先级低于server2,服务启动时由于server2的优先级高,将提升为master, server1为backup,当server2故障的时候,server1接管,当server2恢复后接管变为master,server1降级为backup。

keepalived的知识概括
keepalived的知识概括
keepalived的知识概括
keepalived的知识概括
总结:抢占模式下,哪个server的优先级高,则为master, 与配置文件state配置的状态无关。

非抢占式

非抢占模式则是当主节挂了再次起来后不再抢回VIP。两个节点的state都必须配置为BACKUP,两个节点都必须加上配置 nopreempt。
server1和server2都为backup。我们要注意启动server服务的启动顺序,先启动的升级为master,与优先级无关。且配置文件中必须配置nopreempt。
实验环境:
两台服务器的keepalived的进程都杀掉,先启动keepalived001节点上的进程,此时可以看到虽然keepalived001的节点的优先级低,但依然是keepalived001的状态为master状态。
keepalived的知识概括
keepalived的知识概括
然后杀掉keepalived001上的keepalived进程,会看到keepalived002由BACKUP状态变为master,抢占了vip服务。
keepalived的知识概括
当在keepalived001上启动了进程之后,vip随机立即释放掉,依旧为BACKUP状态,keepalived002上没有新日志产生,依旧是MASTER状态,说明没有vip的抢占。
keepalived的知识概括

上一篇:基于MaxCompute的大数据BI分析


下一篇:CentOS7安装GitLab、汉化、邮箱配置及使用