KeepAlived高可用性集群简介

浪子不回头ぞ 提交于 2020-03-08 04:27:42

我们之前都是一个调度器来调度多台web后端服务器
但是调度器也有不能工作的时候,完一坏了所有的web服务器都不能访问,这就要求调度器也要备份
因此就引出了高可用的集群KeepAlived
也就是有多个调度器(有主有备),利用keepalived保证web服务通过正常的调度器工作
所有调度器同时宕机的可能性是很小的

1.keepalived的基本概念

Keepalived是Linux下的一个轻量级别的高可用解决方案
高可用(High Avalilability,HA),其实两种不同的含义:广义上来讲,是指整个系统的高可用性,狭义上来讲就是主机的冗余和接管
Keepalived起初是为LVS设计的,专门用来监控集群系统中的各个服务的节点的状态
它根据TCP/IP参考模型的第三,第四,第五层交换机制检测每个服务器的节点状态
如果某个服务器出现异常,或者工作出现故障,keepalived将检测到,并将出现故障的服务器节点从集群系统中剔除
这些工作都只自动完成的,不需要人为干预,需要人工完成的只是修复出现故障的服务节点
也就是可以使用keepalived可以实现调度器的转换
后来keepalived又加入了VRRP的功能
VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议出现的目的是
解决静态路由出现单点故障的问题,通过VRRP可以实现网络不间断稳定运行
因此keepalived一方面具有服务器状态检测和故障隔离的功能,另外一方面也具有HA cluster功能

2.什么是VRRP协议?

在现实的网络环境中,主机之间的通信都是通过配置静态路由或者默认网关来完成的
而主机之间的路由器一旦发生故障,通信就会失败,因此在这种通信模式中,路由器就成了一个单点瓶颈
为了解决这个问题就引入了VRRP协议
它是一种主备模式的协议,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信
其中涉及两个概念:物理路由器和虚拟路由器

3.VRRP的工作原理

VRRP可以将两台或者多台物理路由器虚拟成一个虚拟路由,这个虚拟路由通过虚拟IP(一个或者多个)对外提供服务
而在虚拟路由器内部十多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务
这台物理路由设备称为主备路由器,他拥有对外虚拟IP,提供各种网络功能
而其它的物理路由器不拥有对外虚拟的IP,也不提供对外网络功能,仅仅接收master的VRRP状态通高信息
这些路由器统被称为BACKUP的角色,当主路由失败时,处于BACKUP角色的备份路由器将重新进行选举
产生一个新的主路由器进入MASTER角色,继续对外提供服务,整个切换对于用户来说是透明的
每个虚拟路由器都有一个唯一的标识号,成为VRID,一个VRID与一组IP地址构成一个虚拟路由器
在VRRP协议中,所有的报文都是通过IP多播放式发送的
而在一个虚拟的路由器中,只有处于Master角色的路由器会一直发送VRRP数据包
处于BACKUP角色的路由器只会接受Master角色发送过来的报文信息
用来监控Master的运行状态,一般不会发生BACKUP抢占的情况
除非它的优先级更高,而当Master不可用时,BACKUP也就无法受到Master发过来的信息
于是就认定Master出现故障,接着多台BACKUP就会进行选举,优先级最高的BACKUP将成为新的Master
这种选举角色的切换非常快。因而保证了服务的持续可用性

4.keepalived对服务器运行状态和故障隔离的工作原理

keepalived作为一个高性能集群软件,它能实现对集群中服务器运行状态的监控以及故障隔离
下面介绍对服务器运行状态和故障隔离的工作原理
Keepalived工作在TCP/IP参考模型的三层,四层,五层,也就是分别为:网络层,传输层,应用层
根据TCP,IP参数模型隔层所能实现的功能,Keepalived运行机制如下

(1)在网络层
在网络层的四个协议(互联网络IP协议,互联网络可控制报文协议ICMP,地址转换协议ARP,反向地址转换协议RARP)
Keepalived在网络层采用最常见的工作方式是通过ICMP协议向服务器集群中的每一个节点发送一个ICMP的数据包,类似于ping的功能
如果某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中的节点剔除
(2)在传输层
提供了两个主要的协议:
传输控制协议TCP和用户数据协议UDP,传输控制协议TCP可以提供可靠的数据输出服务,IP地址和端口
代表TCP的一个连接端,要获得TCP服务,需要在发送机的一个端口和接收机的一个端口上建立连接
而Keepalived在传输层利用了TCP协议的端口连接和扫描技术来判断集群节点是否正常
比如对web服务器常见的80端口,keepalived一旦在传输层探测到这些端口信号没有数据响应和数据返回
就认为这些端口发生异常,然后强制这些端口所对应的节点从服务器集群中剔除掉
(3)在应用层:
可以运行FTP,TELNEL,SMTP,DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化
用户可以通过自定义Keepalived工作方式,例如可以通过编写程序或者编写脚本来运行Keepalived
而Keepalived将根据用户设定的参数来检测各种程序或者服务是否运行正常
当Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除
Keepalived起初是为LVS设计的,由于Keepalived可以实现对集群节点的状态检测,而IPVS可以实现负载均衡功能
因此,Keepalived借助于第三方模块IPVS就可以很方便的搭建一套负载均衡系统
在这里有个误区就是由于Keepalived可以和IPVS一起工作,所以普遍就认为Keepalived是一个负载均衡软件,这种理解是错误的

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!