一、keepalived概述
官方介绍
Keepalived is a routing softwarewritten in C. The main goal of this project is to provide simple and robust[强大的] facilities[设施] for loadbalancing and high-availability to Linux system and Linux based infrastructures. Loadbalancing framework relies[依赖] on well-known and widely used Linux Virtual Server (IPVS)kernel module providing Layer4 loadbalancing. Keepalived implements[使生效] a set of checkers to dynamically and adaptively[自适应] maintain and manage loadbalanced server pool according their health.
On the other hand high-availability is achieved[实现] by VRRP protocol. VRRP is a fundamental brick[基石] for router failover. In addition[另外], Keepalived implements a set of hooks to the VRRP finite[有限] state machine providing low-level and high-speed protocol interactions. In order to offer fastest network failure detection[检测], Keepalived implements BFD protocol. VRRP state transition can take into account BFD hint to drive fast state transition. Keepalived frameworks can be used independently[单独] or all together to provide resilient infrastructures.
Keepalived is free software; ...
关键点:
Keepalived软件是有C语言编写的一个开源软件项目,其本质是一个路由软件。
Keepalived基于ipvs功能进行二次整合实现负载均衡功能。
Keepalived基于VRRP协议进行二次整合实现高可用性功能。
Keepalived借助于大量的功能脚本实现高质量的状态检查功能。
Keepalived框架可以单独使用,也可以和其他软件进行整合使用。
二、软件结构
1、结构图简介
从图中,可以看得出,Keepalived的多数核心功能模块均位于用户空间,而仅有的IPVS和NETLINK模块位于内核空间。
2、核心模块
这两个内核模块却是keepalived实现负载均衡和高可用性功能的核心模块,其中NETLINK主要用于提供高可用性的路由及网络功能,IPVS主要实现虚拟主机的负载均衡功能。
3、功能组件
Keepalived的大部分功能模块位于用户空间,主要有这么几个比较核心的功能组件:
WatchDog、Checkers、VRRP Stack、IPVS wrapper、Netlink Reflector
4、其他功能:
配置文件解析器、调度管理器、内存管理机制
5、工作流程
keepalived部署在多台主机上(一般是两台),keepalived服务启动后,会加载专用的配置文件,调用内核的LVS服务以创建虚拟服务器,并根据配置启用对外的统一访问接口,并且基于相关插件脚本对服务进行监控。
为了保证服务对外的统一接口的高可用,VRRP协议将物理Router进行统一管理,并创建一个虚拟路由地址,作为外网的统一出口,物理Router内部通过VRRP机制进行内部通信,保证虚拟路由地址永远可用。
6、软件理解
通过我们对keepalived软件的结构和官方的介绍,我们可以知道,Keepalived其实就是通过整合和加强LVS和VRRP软件,从而得到的一套适用于高扩展和高可用的软件整合解决方案。
根据Keepalived软件的简单结构,我们可以了解到,我们要实现Keepalived的功能,需要在用户空间安装相应的软件才可以。
三、LVS
1、项目简介
LVS是Linux Virtual Server的简称,即Linux虚拟服务器,它是由国内的章文松博士于1998年发起的开源软件项目,目前已被纳入到Linux内核中,进行统一管理。目前LVS项目已经非常成熟了,被应用于各种高扩展的服务中。
它主要有三部分组成:最前端的负载均衡层、中间的应用服务层、后端的数据共享层。在整个LVS负载均衡架构中,尽管整个机器内部有非常多的应用服务主机结点组成,并相应用户的请求,但是在用户看来,所有的内部应用服务都是透明的,用户只是在使用一个虚拟服务器提供的高扩展服务,这也是LVS项目核心目标所在。
2、架构简介
负载均衡层
位于集群服务的最前端,有一台或多态负载调度器(Director Server)组成,lvs软件就部署在这层的主机上,我们结合内核空间的IPVS模块,使用用户空间的ipvsadm定义各种ipvs规则,来管理后端所有的应用服务主机。
这一层是LVS集群架构中最核心的一层。
应用服务层
位于集群服务的中间层,由一大堆运行应用服务的主机组成,Real Server可以是Web服务、mysql服务、DNS服务等服务器中的一个或多个组合,他们通过基础网络被前段的Director Server进行管理。
数据共享层
位于集群服务的最末端,为所有Real Server提供共享存储空间和内容一致性的存储区域,根据业务场景的不同,可以基于NFS或者是分布式文件系统软件来实现。
3、核心功能
互联网中常见的负载均衡解决方案有很多:基于DNS域名轮流解析方案、基于客户端调度访问方案、基于IP地址的调度方案、基于应用层系统负载的调度方案等等。
LVS结合IPVS内核模块实现为中间层的应用集群服务提供负载均衡的方式也有很多,其中效率最高的就是基于IP方式的负载均衡,它基于Director Server启用IPVS模块,结合ipvsadm来管理中间层的应用服务器,通过LVS服务器上的VIP同一对外提供服务。
IPVS实现负载均衡的方法主要有四种,分别是NAT、DR、TUN、Fullnet。其中效率最高的是DR模型、使用最广的是NAT模型,大网络场景下适用TUN模型,更大的网络场景下可以使用Fullnet模型,只不过该模型需要进行二次内核编译才能实现。
LVS不但实现了多种的负载均衡模型,而且实现了多种资源调度算法,在最新版的linux内核中,IPVS模块提供了将近13种资源调度算法,我们可以结合实际的业务应用场景进行合理的调整和选择。
这13种调度算法如下:RR|WRR|LC|WLC|FO|OVF|LBLC|LBLCR|DH|SH|MH|SED|NQ
四、VRRP
1、场景需求
集群内部主机响应用户的请求,然后将数据报文发往到其他网段的目标地址主机,通常情况下,数据报文将通过缺省路由发往网关,再由网关进行转发到其他网段,经过层层的路由转发,从而实现主机与外部网络的通信。当网关发生故障时,本网段内所有以网关为出口的主机将无法与外部网络通信。
所谓的缺省路由,其实就是就是对某一网段(10.0.0.0/8)通用的网关接口,它为用户的网络配置操作提供了方便,但是由于该网关的单一性,所以其稳定性是一个很大的限制。常见的解决方法就是增加出口网关数量,即使某一个网关出现问题,我们还有备用的出口地址。而此时在多个网关出口之间或者某个网关故障时就出现了线路选择的问题。
在具有多播或广播能力的局域网中,借助VRRP可以完美的解决这个问题,有效避免单一链路发生故障后网络中断的现象。
2、项目简介
虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是由IETF提出的解决局域网中配置静态网关出现单点故障现象的路由协议,其本质上是一种路由容错协议。
VRRP将局域网内的一组路由器虚拟为单个路由器。我们称该路由器组为VRRP备份组,它根据优先级选择一个Master主路由器,承担网关功能,其他路由器称为Backup从路由器。基于VRRP虚拟出来是路由我们称之为虚拟路由,该虚拟路由有独立的IP地址(VIP)。
局域网内主机不知道后端真实的路由器的ip地址,仅仅知道这个虚拟路由的ip地址,让后将VIP设定为其数据包的出网地址,通过该虚拟路由与外部的其他网络进行通信。
在整个过程中,如果Master路由器发生故障时,Backup取代Master继续履行网关职责,从而保证网络内的主机不间断地与外部网络进行通信。