Keepalived开源软件项目实现的主要目标是简化LVS项目的配置并增强其稳定性。Keepalived为Linux系统和基于Linux的架构提供了负载均衡和高可用能力,其负载均衡功能主要源自集成在Linux内核中的LVS项目模块IPVS(IP Virtual Server),基于IPVS提供的4层TCP/IP协议负载均衡。Keepalived还实现了基于多层TCP/IP协议(3层、4层、5/7层)的健康检查机制,因此Keepalived在LVS负载均衡功能的基础上,还提供了LVS集群物理服务器池健康检查和故障节点隔离的功能。除了扩展LVS的负载均衡服务器健康检查能力,Keepalived还基于虚拟路由冗余协议(Virtual Route Redundancy Protocol,VRRP)实现了LVS负载均衡服务器的故障切换转移,即Keepalived实现了LVS负载均衡器的高可用性。根据Keepalived官方网站得知,Keepalived是为LVS集群节点提供健康检查和为LVS负载均衡服务器提供故障切换的用户空间进程。
Keepalived原理架构图
从Keepalived原理架构图看到,Keepalived的多数核心功能模块均位于用户空间,而仅有IPVS和NETLINK模块位于内核空间,这两个内核模块是Keepalived实现负载均衡和路由高可用的核心模块,其中NETLINK主要用于提供高级路由及其相关的网络功能。Keepalived位于用户空间的几个核心功能模块介绍如下:
1) WatchDog:主要负责监控Checkers和VRRP子进程的运行状况。
2) Checkers:主要负责真实服务器的健康检查(HealthChecking),是Keepalived最主要的功能之一,因为HealthChecking是负载均衡功能稳定运行的基础,LVS集群节点的故障隔离和重新加入均依赖于HealthChecking的健康检查结果。
3) VRRP Stack:主要负责负载均衡器之间的故障切换,如果集群架构中仅使用一个LVS负载均衡器,由于本身不具备故障切换的条件,则VRRP Stack不是必须的。
4) IPVS Wrapper:主要用来发送设定的规则到内核IPVS代码。Keepalived设计目标是构建高可用的LVS负载均衡群集,Keepalived在运行中将会通过IPVS Wrapper模块调用IPVSAdmin工具来创建虚拟服务器,检查和管理LVS集群物理服务器池。
5) Netlink Reflector:主要用来设定VRRP的VIP地址并提供相关的网络功能,该模块通过与内核中的NETLINK模块交互,从而为Keepalived提供路由高可用功能。
Linux虚拟服务器—LVS,负载均衡
LVS简称Linux Virtual Server,即Linux虚拟服务器,最初是由国内的章文嵩博士于1998年发起的自由软件项目,其官方网址(对应的中文网站)。目前LVS项目已经被集成到Linux内核中,在Linux2.4内核之前,要使用LVS功能就必须重新编译内核以支持LVS功能模块,但从Linux2.4之后,LVS的各个功能模块已经被内置到Linux内核中,无需进行额外的安装和内核重新编译,便可直接使用LVS提供的各种功能。LVS具有良好的可靠性、可扩展性和可操作性,加上其实现最优的集群服务性能所需的低廉成本,LVS的负载均衡功能经常被用于高性能、高可用的服务器群集中。
在基于LVS项目架构的服务器集群系统中,通常包含三个功能层次:最前端的负载均衡层(Load Balancer)、中间的物理服务器群组层(Server Array)以及最底端的数据共享存储层(Shared Storage)。尽管整个集群内部有多个物理节点在处理用户发出的请求,但是在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务,对LVS集群架构中各个层次的功能描述如下:
1)Load Balancer层,负载均衡层位于整个集群系统的最前端,由一台或者多台负载调度器(Director Server)组成,LVS模块就安装在Director Server的系统上,而Director Server的主要功能类似路由器,包含了完成LVS负载转发功能所设定的路由表,Director利用这些路由表信息把用户的请求分发到Server Array层的物理服务器(Real Server)上。此外,为了监测各个Real Server服务器的健康状况,在Director Server上还要安装监控模块Ldirectord,而当监控到某个Real Server不可用时,该服务器会被从LVS路由表中剔除,恢复时又会重新加入。
2)Server Array层,服务器阵列或服务器池由一组实际运行应用服务的物理机器组成,Real Server可以是Web服务器、Mail服务器、FTP服务器、DNS服务器以及视频服务器中的一个或者多个的组合。每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。为了减少资源浪费,Director Server也可以同时兼任Real Server的角色,即在Real Server上同时部署LVS模块。
3)Shared Storage层,存储层为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理实现上,该层一般由磁盘阵列设备组成。而为了提供一致性的内容,通常利用NFS网络文件系统提供集群的共享数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Red hat的GFS文件系统和IBM的GPFS文件系统等。
LVS的核心功能为集群服务提供软件负载均衡,而负载均衡技术有很多实现方案:基于DNS域名轮流解析方案、基于客户端调度访问方案、基于应用层系统负载的调度方案,以及基于IP地址的调度方案。在上述负载调度算法中,执行效率最高的是IP负载均衡技术,LVS采用的便是IP负载均衡。LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,主要安装在集群的Director Server上,并在Director Server上虚拟出一个服务IP地址,用户对服务的访问只能通过该虚拟IP地址实现。这个虚拟IP通常称为LVS的VIP(Virtual IP),用户的访问请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中按照一定的负载均衡算法选取一个服务节点响应用户的请求。在这个过程中,当用户的请求到达Director Server后,Director Server如何将请求转发到提供服务的Real Server节点,而Real Server节点又如何将数据返回给用户,这是IPVS实现负载均衡的核心技术。IPVS实现数据路由转发的机制有三种,分别是NAT、TUN和DR技术。
1)VSNAT(Virtual Server via Network Address Translation)通过网络地址转换的虚拟服务器技术:在这种负载转发方案中,当用户的请求到达调度器时,调度器自动将请求报文的目标IP地址(VIP)替换成LVS选中的后端Real Server地址,同时报文的目标端口也替换为选中的Real Server对应端口,最后将报文请求发送给选中的Real Server进行处理。当Real Server处理完请求并将结果数据返回给用户时,需要再次经过负载调度器,此时调度器进行相反的地址替换操作,即将报文的源地址和源端口改成VIP地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。
在这种方式下,用户请求和响应报文都必须经过Director Server进行地址转换,请求时进行目的地址转换(Destination Network Address Translation,DNAT),响应时进行源地址转换(Source Network Address Translation,SNAT)。在这种情况下,如果用户请求越来越多,调度器的处理能力就会成为集群服务快速响应的瓶颈。
2)VSTUN(Virtual Server via IP Tunneling )IP隧道技术实现的虚拟服务器。VSTUN与VSNAT技术的报文转发方法不同,在VSTUN方式中,调度器采用IP隧道技术将用户请求转发到某个选中的Real Server上,而这个Real Server将直接响应用户的请求,不再经过前端调度器。此外,IPTUN技术对Real Server的地域位置没有要求,其既可以与Director Server位于同一个网段,也可位于独立网络中。因此,在VSTUN方式中,调度器将只处理用户的报文请求,而无需进行转发,故集群系统的响应速率相对而言得到极大提高。
3)VSDR(Virtual Server via Direct Routing)直接路由技术实现的虚拟服务器。这种技术在调度连接和管理上与VSNAT和VSTUN技术是一样的,不过它的报文转发方式与前两种均不同,VSDR通过改写请求报文的MAC地址,将请求直接发送到选中的Real Server,而Real Server则将响应直接返回给客户端。因此,这种技术不仅避免了VSNAT中的IP地址转换,同时也避免了VSTUN中的IP隧道开销,所以VSDR是三种负载调度机制中性能最高的实现方案。但是,Director Server与Real Server必须在同一物理网段上互联。
虚拟路由冗余协议—VRRP,故障切换
虚拟路由冗余协议(Virtual Router Redundancy Protocol,VRRP)是由因特网工程任务组(Internet Engineering Task Force,IETF)提出的解决局域网中配置静态网关出现单点失效现象的路由协议。VRRP是一种容错协议,其主要目的是解决路由单点故障的问题。VRRP虚拟路由示意图中,VRRP协议将局域网内的一组路由器虚拟为单个路由,通常将其称为一个路由备份组,而这组路由器内包括一个Master路由(即活动路由器)和若干个Backup路由(即备份路由器),RouterA、RouterB和RouterC属于同一个VRRP组,组成一个虚拟路由器,而由VRRP协议虚拟出来的路由器拥有自己的IP地址10.110.10.1,而备份组内的路由器也有自己的IP地址(Master的IP地址为10.110.10.5, Backup的IP地址为10.110.10.6和10.7)。
在实际使用中,局域网内的主机仅仅知道这个虚拟路由器的IP地址10.110.10.1,而并不知道具体的Master路由器的IP地址以及Backup路由器的IP地址。局域网内的主机将自己的默认路由下一跳地址设置为该虚拟路由器的IP地址10.110.10.1,之后,网络内的主机就通过这个虚拟的路由器来与其他网络进行通信。在通信过程中,如果备份组内的Master路由器故障,则Backup路由器将会通过选举机制重新选出一个新的Master路由器,从而继续向网络内的主机提供路由服务,最终实现了路由功能的高可用。
在实际使用中,路由器开启VRRP功能后,会根据设定的优先级确定自己在备份组中的角色:优先级高的路由器成为Master路由器,优先级低的成为Backup路由器,并且Master路由器定期发送VRRP通告报文,通知备份组内的其他Backup路由器自己工作正常,而备用路由器则启动定时器等待通告报文的到来。如果Backup路由器的定时器超时后仍未收到Master路由器发送来的VRRP通告报文,则认为Master路由器已经故障,此时Backup路由器会认为自己是主用路由器(备份组内的路由器会根据优先级选举出新的Master路由器),并对外发送VRRP通告报文。此外,VRRP在提高路由可靠性的同时,还简化了主机的路由配置,在具有多播或广播能力的局域网中,借助VRRP能在某台路由器出现故障时仍然提供高可靠的默认链路,有效避免单一链路发生故障后网络中断的问题,并且无需修改主机动态路由协议、路由发现协议等配置信息。
笔记整理来自山金孝的《OpenStack高可用集群(上册):原理与架构》4.1.1章节,如有侵权请通知删除