返回介绍

11.1 Keepalived 介绍

发布于 2025-04-21 21:33:25 字数 5316 浏览 0 评论 0 收藏

Keepalived 是 Linux 下一个轻量级的高可用解决方案,它与 HeartBeat、RoseHA 实现的功能类似,都可以实现服务或者网络的高可用,但是又有差别,HeartBeat 是一个专业的、功能完善的高可用软件,它提供了 HA 软件所需的基本功能,比如心跳检测和资源接管,监测集群中的系统服务,在群集节点间转移共享 IP 地址的所有者等,HeartBeat 功能强大,但是部署和使用相对比较麻烦;与 HeartBeat 相比,Keepalived 主要是通过虚拟路由冗余来实现高可用功能,虽然它没有 HeartBeat 功能强大,但 Keepalived 部署和使用非常简单,所有配置只需一个配置文件即可完成。这也是本章重点介绍 Keepalived 的原因。

11.1.1 Keepalived 是什么

Keepalived 起初是为 LVS 设计的,专门用来监控集群系统中各个服务节点的状态。它根据 TCP/IP 参考模型的第三、第四和第五层交换机制检测每个服务节点的状态,如果某个服务节点出现异常,或工作出现故障,Keepalived 将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,Keepalived 又可以自动将此服务节点重新加入服务器集群中,这些工作全部自动完成,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。

Keepalived 后来又加入了 VRRP 的功能,VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过 VRRP 可以实现网络不间断稳定运行。因此,Keepalived 一方面具有服务器状态检测和故障隔离功能,另一方面也具有 HA cluster 功能。下面详细介绍 VRRP 协议的实现过程。

11.1.2 VRRP 协议与工作原理

在现实的网络环境中,主机之间的通信都是通过配置静态路由(默认网关)完成的,而主机之间的路由器一旦出现故障,通信就会失败,因此,在这种通信模式中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了 VRRP 协议。

熟悉网络的读者对 VRRP 协议应该并不陌生。它是一种主备模式的协议,通过 VRRP 可以在网络发生故障时透明地进行设备切换而不影响主机间的数据通信,这其中涉及两个概念:物理路由器和虚拟路由器。

VRRP 可以将两台或多台物理路由器设备虚拟成一个虚拟路由器,这个虚拟路由器通过虚拟 IP(一个或多个)对外提供服务,而在虚拟路由器内部是多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由器被称为主路由器(处于 MASTER 角色)。一般情况下 MASTER 由选举算法产生,它拥有对外服务的虚拟 IP,提供各种网络功能,如 ARP 请求、ICMP、数据转发等。而其他物理路由器不拥有对外的虚拟 IP,也不提供对外网络功能,仅仅接收 MASTER 的 VRRP 状态通告信息,这些路由器被统称为备份路由器(处于 BACKUP 角色)。当主路由器失效时,处于 BACKUP 角色的备份路由器将重新进行选举,产生一个新的主路由器进入 MASTER 角色继续提供对外服务,整个切换过程对用户来说完全透明。

每个虚拟路由器都有一个唯一标识,称为 VRID,一个 VRID 与一组 IP 地址构成了一个虚拟路由器。在 VRRP 协议中,所有的报文都是通过 IP 多播形式发送的,而在一个虚拟路由器中,只有处于 MASTER 角色的路由器会一直发送 VRRP 数据包,处于 BACKUP 角色的路由器只接收 MASTER 发过来的报文信息,用来监控 MASTER 运行状态,因此,不会发生 BACKUP 抢占的现象,除非它的优先级更高。而当 MASTER 不可用时,BACKUP 也就无法收到 MASTER 发过来的报文信息,于是就认定 MASTER 出现故障,接着多台 BACKUP 就会进行选举,优先级最高的 BACKUP 将成为新的 MASTER,这种选举并进行角色切换的过程非常快,因而保证了服务的持续可用性。

11.1.3 Keepalived 工作原理

上节简单介绍了 Keepalived 通过 VRRP 实现高可用功能的工作原理,而 Keepalived 作为一个高性能集群软件,它还能实现对集群中服务器运行状态的监控及故障隔离。下面继续介绍下 Keepalived 对服务器运行状态监控和检测的工作原理。

Keepalived 工作在 TCP/IP 参考模型的第三、第四和第五层,也就是网络层、传输层和应用层。根据 TCP/IP 参考模型各层所能实现的功能,Keepalived 运行机制如下。

- 在网络层,运行着 4 个重要的协议:互联网协议 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 将把对应的服务从服务器中移除。

11.1.4 Keepalived 的体系结构

Keepalived 是一个高度模块化的软件,结构简单,但扩展性很强,感兴趣的读者可以阅读 Keepalived 的源码。图 11-1 是官方给出的 Keepalived 体系结构拓扑图。

从图 11-1 中可以看出,Keepalived 的体系结构从整体上分为两层,分别是用户空间层(User Space)和内核空间层(Kernel Space)。下面介绍 Keepalived 两层结构的详细组成及实现的功能。

内核空间层处于最底层,它包括 IPVS 和 NETLINK 两个模块。IPVS 模块是 Keepalived 引入的一个第三方模块,通过 IPVS 可以实现基于 IP 的负载均衡集群。IPVS 默认包含在 LVS 集群软件中。而对于 LVS 集群软件,相信做运维的读者并不陌生:在 LVS 集群中,IPVS 安装在一台叫做 Director Server 的服务器上,同时在 Director Server 上虚拟出一个 IP 地址对外提供服务,而用户必须通过这个虚拟 IP 地址才能访问服务。这个虚拟 IP 一般称为 LVS 的 VIP,即 Virtual IP。访问的请求首先经过 VIP 到达 Director Server,然后由 Director Server 从服务器集群节点中选取一个服务节点响应用户的请求。

图 11-1 Keepalived 体系结构图

Keepalived 最初就是为 LVS 提供服务的,由于 Keepalived 可以实现对集群节点的状态检测,而 IPVS 可以实现负载均衡功能,因此,Keepalived 借助于第三方模块 IPVS 就可以很方便地搭建一套负载均衡系统。在这里有个误区,由于 Keepalived 可以和 IPVS 一起很好地工作,因此很多初学者都以为 Keepalived 就是一个负载均衡软件,这种理解是错误的。

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

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

用户空间层位于内核空间层之上,Keepalived 的所有具体功能都在这里实现,下面介绍几个重要部分所实现的功能。

在用户空间层,Keepalived 又分为 4 个部分,分别是 Scheduler I/O Multiplexer、Memory Management、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,下面介绍每个模块所实现的功能如下。

(1)WatchDog

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

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

(2)Checkers

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

(3)VRRP Stack

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

(4)IPVS wrapper

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

(5)Netlink Reflector

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。