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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 高可用 - 03 Keepalived_ Keepalived工作原理&体系结构

0bc7b7bcd1fc4752b429566093397057.png


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体系结构拓扑图】


38f8c46292e64f70b0a6e5d53f5cb83d.png


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模块的负载均衡功能。


Core components - Netlink Reflector


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

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
监控 网络协议 应用服务中间件
Keepalived工作原理
Keepalived工作原理
|
监控 算法 网络协议
高可用 - 02 Keepalived_VRRP工作原理
高可用 - 02 Keepalived_VRRP工作原理
115 0
|
监控 负载均衡 网络协议
Keepalived的原理和web服务高可用实践
Keepalived的原理和web服务高可用实践
Keepalived的原理和web服务高可用实践
|
网络架构
|
网络架构
Keepalived 介绍、安装、配置(高可用)
1、keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。 2、VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。
1218 0
|
网络协议 网络架构
|
网络协议 网络架构
|
网络协议 应用服务中间件 nginx