Keepalived工作原理

前文Keepalived简单介绍,知道Keepalived两大重要功能:基于LVS的负载均衡和基于VRRP的故障切换。从本质上讲Keepalived是提供数据流转发与服务器健康检查并具备故障切换的高可用路由,而数据转发与健康检查是对LVS功能的扩展和增强,因此可以认为Keepalived是运行在用户空间的LVS路由(LVS Router)进程。在实际应用中,Keepalived通常部署在两台主备或一主多备的服务器上,即Keepalived进程既可以运行在Active/Master状态的LVS Router中,也可以运行在Passive/Slave状态的LVS Router中,而所有运行Keepalived进程的LVS Router都遵循虚拟路由冗余协议VRRP

在RHEL7/Centos7系统中,由Systemctl命令通过读取/etc/keepalived/keepalived.conf配置文件来启动Keepalived进程。在遵循VRRP协议的Master Router中,Keepalived进程会启动内核中的LVS服务以创建虚拟服务器,并根据配置拓扑对服务运行状况进行监控。

在VRRP的协议框架下,作为Master的Router将会处理两个主要任务,即转发客户端访问请求到后端物理服务器以进行负载均衡和向Slave Routers周期性的发送VRRP协议报文,而作为Slave的Routers则负责接收VRRP报文,如果在用户预置的时间内,作为Slave的Routers接收VRRP报文失败,则Keepalived认为Master Router故障,并从Slave Routers中重新选举产生一个新的Master Router,触发LVS Router的Failover故障切换操作。

在故障切换Failover的过程中,Keepalived创建的虚拟服务器会被清除,新的Master  Router将接管VIP、发送ARP信息、设置IPVS Table记录条目(Virtual Server)以及物理服务器的健康检查和发送VRRP广播报文。Keepalived的Failover操作针对的是四层TCP/IP协议,即传输层,因为TCP在传输层上进行的是基于链路连接的数据传输。当服务器在响应TCP请求时,如果出现设置时间段的Timeout,则Keepalived的健康检查机制将会监测到该情况并认为该服务器故障,然后将其从服务器池中移除(故障隔离)。

基于Keepalived的两层拓扑负载均衡架构
基于Keepalived的两层拓扑负载均衡架构

基于Keepalived设计的具有二层拓扑的负载均衡架构,第一层为负载均衡层,由一个Active和多个Backup的LVS Routers组成,其中,每个LVS Router都配置有两个网络接口,一个接入Internet网络,另一个接入内部私有网络,Active的LVS Router在这两个网络接口间进行数据转发。位于第一层的LVS Routers和第二层的物理服务器通过私网接口接入相同的局域网中,Active的LVS Router通过NAT技术将Internet数据流转发到私网物理服务器上,而这些位于第二层的物理服务器运行着最终响应请求的服务。位于二层私网中的服务器在与Internet交互时必须经过主LVS Router的NAT转发,对于外部网络中的客户端而言,访问二层私网中的物理服务器就如访问Internet网络中的服务,因为从客户端的角度来看,访问请求的目的地址正是位于主LVS Router上的VIP地址,而该VIP与客户端地址处于相同网络中,VIP还可以是管理员指定的互联网域名。VIP在Keepalived的配置中通常被指定到一个或者多个虚拟服务器上,而虚拟服务器的主要任务便是监听VIP及相应端口上的请求当主LVS Router进行Failover操作的时候,VIP会从一个LVS Router转移到另一个LVS Router (VIP也称为浮动IP),从而保证了对外提供服务的VIP具有高可用性。

在Keepalived负载均衡架构的VIP配置中,每个将LVS Router连接到Internet的物理网卡接口均可配置多个VIP,且每个VIP对应着不同的Virtual Server,即多个Virtual Servers可以同时监听相同物理网卡上的不同VIP,其中每个VIP都对应着不同的服务。例如,Linux系统中的接口eth0将LVS Router连接到Internet中,则可以在eth0上配置一个地址为192.168.115.100的VIP以用于响应HTTP服务请求,同时还可以在eth0上配置另一个地址为192.168.115.200的VIP以用于响应FTP服务请求。

在由一个Active Router和一个Backup  Router组成的Keepalived负载均衡架构中,Active Router的主要任务是将VIP上的请求转发到选中的某个后端服务器上,具体服务器的选举机制则由Keepalived所支持的负载均衡算法来决定。此外,Active Router还负责动态监控后端服务器上特定服务的健康状况监控方式主要是Keepalived自带的三种健康检测机制,即简单TCP连接、HTTP和HTTPS简单TCP连接检测方式,Active  Router会周期性地对服务器上某个特定端口进行TCP连接,如果TCP连接超时或者中断则认为服务不可用,而对于HTTP和HTTPS检测方式,Active Router通过周期性地抓取(Fetch)请求URL并验证其内容来判断服务的可用性。与此同时,Backup Router一直处于Standby状态,LVS Router的Failover由VRRP来处理。在Keepalived进程启动的时候,所有LVS Routers会加入一个用来接收和发送VRRP广播的多播组,由于VRRP是一种基于优先级的协议,因此在启动之初优先级高的LVS Router会被选举为Master Router,而Master Router将会周期性地向多播组中的成员发送VRRP广播。如果多播组中的Backup Routers在一定时间内接收VRRP广播失败,则重新选举新的Master Router,新的Master Router将会接管VIP并广播地址解析协议(Address Resolution Protocol,ARP)信息。而当故障Router重新恢复后,根据该Router的优先级情况,其可能恢复到Master状态也可能保持为Backup状态。

两层负载均衡架构是最常见的部署环境,主要用于很多数据源变化不是很频繁的数据请求服务中。

基于Keepalived的三层拓扑负载均衡架构
基于Keepalived的三层拓扑负载均衡架构

在三层负载均衡架构中,前端的LVS Router负责将访问请求转发到物理服务器(Real  Servers)中,然后Real Server再通过网络形式访问可共享的数据源。对于数据请求比较繁忙的FTP站点,三层架构是最为理想的负载均衡架构,在这种架构下,可供访问的数据源集中存储在高可用的集群服务器上,Real Servers通过NFS共享目录或者Samba文件共享等网络文件系统形式来访问数据。此外,类似的三层负载均衡架构在需要提供中心化及数据库事务处理高可用的Web站点中也被普遍使用。

笔记整理来自山金孝的《OpenStack高可用集群(上册):原理与架构》4.1.2章节,如有侵权请通知删除

你可能感兴趣的:(Keepalived工作原理)