Keepalived介绍
前面我们介绍了LVS的原理和DR模式的搭建,搭建完成后我们发现整个架构存在两个重要的隐患:
1、LVS解决了Real Server的过载的问题,但是LVS本身存在单点问题,如果LVS挂了,那么整个服务将不可用。
2、目前搭建的LVS无法识别后端Real Server是否存活,如果某个Real Server服务挂掉,那么任何请求到这个Real Server的请求将会失败。
本章就通过引入Keepalived来解决这两个问题。
学习任何组件首先我们应该有个习惯,就是首先要搞清楚学习目标组件两个问题:
1、what?(是什么)
2、why?(解决什么)
通常这两个问题都可以在组件的官方网站找到答案,所以下面我们进入keepalived官方网站:
https://www.keepalived.org/
从官网提取几句关键描述:
1、Keepalived是用C语言编写的路由软件。(what)
2、Keepalived是开源免费的软件。(what)
3、Keepalived基于Linux虚拟服务器LVS实现负载均衡。(why)
4、Keepalived基于ARRP协议实现高可用性。(why)
5、Keepalived通过一组检查器检查负载后端Real Server存活状态。(why)
Keepalived原理
Keepalived启动时,首先会创建一个master主进程,然后由master父进程forked出来的两个孩子进程,这两个子进程分别是VRRP协议进程和Real Server检查器进程。每个子进程都有自己的I / O多路复用器。master父进程通过定期发送hello数据包来检测子进程是否存活,如果父进程无法将hello数据包发送给子进程,则重新启动子进程。
Keepalived使用四个Linux内核组件:
1、LVS框架:使用getsockopt和setsockopt调用来获取和设置LVS套接字上的参数。
2、Netfilter框架:支持NAT和Masquerading的IPVS代码。
3、Netlink接口:设置和删除网络接口上的VRRP虚拟IP。
4、Multicast:将VRRP通告发送到保留的VRRP MULTICAST组(224.0.0.18)。
下面是Keepalived架构图:
下面分别介绍每个模块的作用。
Control Plane
该模块主要负责解析并检查配置文件keepalived.conf,将解析后的keepalived.conf保存到内存中。
Scheduler-I/O Multiplexer
该模块通过selector多路I/O复用器模型提供调度进程中所有内部任务的支持。
Memory Management
该模块提供对某些通用内存管理功能的访问,例如分配,重新分配,发布等。可以在两种模式下使用:normal_mode和debug_mode。
Core Components
该模块定义了所有代码中都使用的一些通用库和全局库。这些库是:html解析,链接列表