zl程序教程

您现在的位置是:首页 >  其他

当前栏目

高可用 - 03 Keepalived_ Keepalived工作原理&体系结构

amp原理 工作 可用 03 体系结构 Keepalived
2023-06-13 09:17:12 时间

文章目录

Pre

高可用 - 02 Keepalived_VRRP工作原理了解了Keepalived通过VRRP实现高可用功能的工作原理。

而Keepalived作为一个高性能集群软件,它还能实现对集群中服务器运行状态的监控及故障隔离。

下面我们看下Keepalived对服务器运行状态监控和检测的工作原理。


Keepalived工作原理

Keepalived工作在TCP/IP参考模型的第三层、第四层和第五层,也就是网络层、传输层和应用层。

根据TCP/IP参考模型各层所能实现的功能,Keepalived运行机制如下:

网络层

在网络层,运行着四个重要的协议:互连网协议(IP)、互连网控制报文协议(ICMP)、地址转换协议(ARP)以及反向地址转换协议(RARP)

Keepalived在网络层采用的最常见的工作方式是通过ICMP向服务器集群中的每个节点发送一个ICMP的数据包(类似于ping实现的功能),如果某个节点没有返回响应数据包,那么就认为此节点发生了故障,Keepalived将报告此节点失效,并从服务器集群中剔除故障节点。


传输层

在传输层,提供了两个主要的协议:传输控制协议(TCP)和用户数据协议(UDP)

TCP可以提供可靠的数据传输服务,IP地址和端口代表一个TCP连接的一个连接端。要获得TCP服务,须在发送机的一个端口上和接收机的一个端口上建立连接。

而Keepalived在传输层就是利用TCP的端口连接和扫描技术来判断集群节点是否正常的。比如,对于常见的Web服务默认的80端口、SSH服务默认的22端口等,Keepalived一旦在传输层探测到这些端口没有响应数据返回,就认为这些端口发生异常,然后强制将此端口对应的节点从服务器集群组中移除。


应用层

在应用层,可以运行FTP、TELNET、SMTP、DNS等各种不同类型的高层协议

Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived的工作方式,例如用户可以通过编写程序来运行Keepalived,而Keepalived将根据用户的设定监测各种程序或服务是否允许正常,如果Keepalived的监测结果与用户设定不一致时,Keepalived将把对应的服务从服务器中移除。


Keepalived的体系结构

【官方给出的Keepalived体系结构拓扑图】

Keepalived的体系结构从整体上分为两层,分别是用户空间(User Space)层和内核空间(Kernel Space)层 。

内核空间

内核空间层处于最底层,它包括IPVS和NETLINK两个模块。

IPVS

IPVS模块是Keepalived引入的一个第三方模块,通过IPVS可以实现基于IP的负载均衡集群。

在LVS集群中,IPVS安装在一个叫做Director Server的服务器上,同时在Director Server上虚拟出一个IP地址来对外提供服务,而用户必须通过这个虚拟IP地址才能访问服务。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达Director Server,然后由Director Server从服务器集群节点中选取一个服务节点响应用户的请求。

Keepalived最初就是为LVS提供服务的,由于Keepalived可以实现对集群节点的状态监测,而IPVS可以实现负载均衡功能,因此,Keepalived借助于第三方模块IPVS就可以很方便地搭建一套负载均衡系统。

在这里有个误区,由于Keepalived可以和IPVS一起很好地工作,因此很多初学者都以为Keepalived就是一个负载均衡软件,这种理解是错误的。

在Keepalived中,IPVS模块是可配置的。如果需要负载均衡功能,可以在编译Keepalived时打开负载均衡功能,反之,也可以通过配置编译参数关闭。


NETLINK模块

NETLINK模块主要用于实现一些高级路由框架和一些相关的网络功能,完成用户空间层Netlink Reflector模块发来的各种网络请求。


用户空间

用户空间层位于内核空间层之上,Keepalived的所有具体功能都在这里实现。

下面介绍几个重要部分所实现的功能。

在用户空间层,Keepalived又分为四个部分,分别是Scheduler I/O Multiplexer、Memory Management(Mngt)、Control Plane和Core components。

Scheduler I/O Multiplexer是一个I/O复用调度器,它负责安排Keepalived所有内部的任务请求。

Memory Management是一个内存管理机制,这个框架提供了访问内存的一些通用方法。

Control Plane是Keepalived的控制面板,可以实现对配置文件进行编译和解析,Keepalived的配置文件解析比较特殊,它并不是一次解析所有模块的配置,而是只有在用到某模块时才解析相应的配置

Core components,这个部分是Keepalived的核心组件,它包含了一些列功能模块,主要有WatchDog、Checkers、VRRP Stack、IPVS wrapper和Netlink Reflector

Core components - WatchDog

WatchDog是计算机可靠性领域中一个极为简单又非常有效的监测工具。它的工作原理是针对被监控的目标设置一个计数器和一个阈值,WatchDog会自己增加此计数值,然后等待被监控的目标周期性地重置该计数值。一旦被监控目标发生错误,就无法重置此计数值,WatchDog就会检测到,于是就采取对应的恢复措施,例如重启或关闭。

在Linux中很早就引入了WatchDog功能,而Keepalived正是通过WatchDog的运行机制来监控Checkers和VRRP进程的。


Core components - Checkers

这是Keepalived最基础的功能,也是最主要的功能,可实现对服务器运行状态监测和故障隔离。


Core components - VRRP Stack

这是Keepalived后来引入的VRRP功能,可以实现HA集群中的故障切换(failover)功能。Keepalived通过VRRP功能再结合LVS负载均衡软件即可部署一套高性能的负载均衡集群系统。


Core components - IPVS wrapper

这是IPVS功能的一个实现。IPVS wrapper模块可以将设置好的IPVS规则发送到内核空间并提交给IPVS模块,最终实现IPVS模块的负载均衡功能。


Netlink Reflector用来实现高可用集群中故障转移时虚拟IP(VIP)的设置和切换。Netlink Reflector的所有请求最后都发送给内核空间的NETLINK模块来完成。