目录
前言
Keepalived 是由 VRRP 实现的,因此博主在介绍 Keepalived 之前,首先,了解一下 VRRP 的原理,所以,本篇博客的第一部分将介绍:VRRP 的原理及其架构浅解析;第二部分主要介绍 Keepalived 的内部架构及其实现原理。
Keepalived 内部架构及其实现原理解析
一、VRRP 缘起
在现实的网络环境中(比如Internet),两台需要通信的主机(end-host)大多数情况下并没有直接的物理连接。对于这样的情况,它们之间的路由怎么选择?主机如何选定到达目的主机的下一跳路由,这是个问题。通常的解决办法有两种:
1、在主机上使用动态路由协议(比如:RIP、OSPF、IS-IS、IGRP、EIGRP、BGP等);
2、在主机上配置静态路由很
很明显,在主机上配置动态路由协议是非常不切实际的,因为管理维护成本以及是否支持等诸多问题。那么配置静路由就变得十分的流行,实际上,配置静态路由的这种方式我们至今一直在用。但是路由器(或者说默认网,Default Gateway)却经常成为单点,就算配置了多个静志路由,却因为必须重启网络才能生效而变得不实用。
二、关于 VRRP
VRRP 协议(Virtual Router Redundancy Protocol,虚拟路由冗余协议)的目的:为了解决静路单点故障的问题。
VRRP 通过一种竞选协议来动态的将路由任务交给 LAN 中虚拟路由器中的某台 VRRP 路由器。
两个关键的名词:VRRP 路由器和 VRRP 虚拟路由器。
VRRP 路由器:VRRP 路由器就是一台路由器,只不过上面运行了 VRRPD 这样的程序来实现 VRRP 协议,VRRP 路由器是现实的物理的路由器,一台 VRRP 路由器可以位于多个虚拟路由器。
VRRP 虚拟路由器:所谓虚拟,就是说并不是实际存在的,而是一个逻辑的路由器并不是物理的路由器。虚拟路由器通常由多台VRRP 路由器通过某种方式组成,就好比这些物理的路由器都丢到一个池(pool)里面去,整个pool对外看起来就象是一台路由器,但其内部有多台物理路由器。虚拟路由器的标识称为 VRID。
三、VRRP Master-Backup
在一个 VRRP 虚拟路由器中,有多台物理的 VRRP 路由器,但是几台物理的机器并不同时工作,而是由一台称为 Master 的路由器负责路由工作,其他的都是 Backup,Master 并非一成不变,VRRP 协议会让所有 VRRP 路由器参与竞选,最终获胜的就是 Master,Master有一些特权,比如拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的,拥有特权的 Master 路由器将负责转发发送给网关地址的包和响应 ARP(根据IP地址获取物理地址的一个TCP/IP协议,Address Resolution Protocol)请求。
四、VRRP 工作机制
VRRP 通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(multicast)包(多播地址224.0.0.18)形式发送的。主要由虚拟路由器由 VRID(范围0-255)和一组IP地址组成,对外表现为一个众所周知的 MAC 地址(00-00-5E-00-01-{VRID})。所以,在一个虚拟路由器中,不管谁是 Master,对外都是相同的 MAC 和 IP(称之为VIP)。客户端主机并不需要因为Master 的改变而修改自己的路由配置,对客户端来说,像这种主从的切换是透明的。
在一个虚拟路由器中,只有作为 Master 的 VRRP 路由器会一直发送 VRRP 广播的包(VRRP Advertisement message),Backup 不会抢占 Master,除非 Backup 的优先级(priority)设值更高,当 Master 不可用时(Backup收不到广播的包),多台 Backup 中优先级最高的这台路由器会抢占为 Master,这种抢占是非常快速的(<1秒),以保证服务的连续性。出于安全性考虑,VRRP 广播包使用了加密协议进行加密。
五、关于 Keepalived
Keepalived 是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。Keepalived 的作用是检测 web 服务器的状态,如果有一台 web 服务器死机,或工作出现故障,Keepalived 将检测到,并将有故障的 web 服务器从系统中剔除,当 web 服务器工作正常后 Keepalived 自动将 web 服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复因为故障导致服务器宕机的 web 服务器。
Keepalived 是以 VRRP 协议(Virtual Router Redundancy Protocol,虚拟路由冗余协议)为实现基础的。虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将 N 台提供相同功能的路由器组成一个路由器组,(原理同上)这个组里面有一个 Master 和多个 Backup,Master 上面有一个对外提供服务的 VIP(Virtual IP Address,虚拟IP地址),该路由器所在局域网内其他机器的默认路由为该 VIP,Master 会发组播,当 Backup 收不到 VRRP 包时就认为 Master 宕掉了,这时就需要根据 VRRP 的优先级来选举一个 Backup 充当 Master。这样的话就可以保证路由器的高可用了。
六、Keepalived的三个核心模块
Keepalived 是一个高度模块化的设计的软件,Keepalived 三个核心模块分别为core、check和VRRP(当然还有:libipfwc、libipvs-2.4、libipvs-2.6)
- core Keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析;
- check Keepalived的Healthchecker,负责健康检查,包括常见的各种检查方式,以及对应的配置的解析,其中包括了LVS的配置解析;
- VRRP Keepalived中实现VRRP协议的;
七、Keepalived 多进程模式
Keepalived 采用了多进程的设计模式,每个进程负责不同的功能。
八、Keepalived 控制单元
在 Keepalived 中,所谓的控制单元,就是对配置文件的编译和解析,Keepalived 的配置文件解析和其它不同的是,它并不是一次解析所有的配置,而是用到某个模块的时候才解析相应的配置,每个模块中的 xxx_parser.c 就是负责解析配置文件的。
九、Keepalived 对 IPVS 的封装
Keepalived 里面所有对 LVS(Linux Virtual Server,Linux 虚拟服务器)的相关操作并不是直接使用 ipvsadm 这样的客户端程序,而是直接使用 IPVS 提供的函数进行操作,而这些操作都存在与 check/ipwrapper.c 中。
下一篇文章:《 Nginx+Keepalived搭建高可用Web服务器详细教程 》
参考文档:
Keepalived 官网:【https://www.keepalived.org/】
好了,关于 VRRP协议的工作机制介绍,Keepalived内部架构及其实现原理解析 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。
作 者: | 华 仔 |
联系作者: | who.seek.me@java98k.vip |
来 源: | CSDN (Chinese Software Developer Network) |
原 文: | https://blog.csdn.net/Hello_World_QWP/article/details/104224876 |
版权声明: | 本文为博主原创文章,请在转载时务必注明博文出处! |