Keepalived是什么
Keepalived是LVS的扩展项目,主要功能是实现服务器的状态检测、故障隔离和负载均衡器的失败切换FailOver。
状态检测、故障隔离功能工作在TCP/ IP 参考模型的第3、4和5层,也就是网络层、传输层和应用层。如果某个务节点出现异常,或工作出现故障, Keepalived 将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后, Keepalived又可以自动将此服务节点重新新加入服务器集群中。
- Layer3:在网络层采用的最常见的工作方式是定期通过ICMP协议向服务器集群中的每个节点发送一个ICMP的数据包(类似Ping实现的功能),如果某个节点没有返回响应的数据包,那么认为此节点发生了故障,Keepalived将此节点失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。
- Layer4:在传输层采用TCP协议的端口连接和扫描技术来判断集群节点是否正常,即主要以TCP端口的状态来决定服务器工作正常与否。如web服务默认80端口、SSH服务默认22端口,如果Keepalived在传输层探测到相应的端口没有响应数据,则认为这些端口发生异常,强制将端口对应的节点从服务器群组中移除。
- Layer5:在应用层,可以运行FTP、TELNET、SMTP、DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂话,在网络上占用的带宽也要更大一些。用户可以通过自定义Keepalived的工作方式检测服务器是否正常工作,如Keepalived根据用户的设定检测对应的程序或服务是否和设定一致。
失败切换FailOver功能实现的基础是VRRP协议,关于VRRP协议,参看《
VRRP协议简介》
关于LVS
一个完整的负载均衡项目,一般由虚拟服务器、故障隔离及失败切换 3 个功能框架所组成。
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。
LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。
一般来说,LVS集群采用三层结构,其主要组成部分为:
1)负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
2)服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
3)共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
1)负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
2)服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
3)共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
故障隔离指虚拟服务器中的某个真实服务器(或某几个真实服务器)失效或发生故障,系统将自动把失效的服务器从转发队列中清理出去,从而保证用户访问的正确性;另一方面,当实效的服务器被修复以后,系统再自动地把它加入转发队列。
失败切换,这是针对负载均衡器 Director采取的措施,在有两个负载均衡器Director的应用场景,当主负载均衡器(MASTER)失效或出现故障,自动接管主负载据衡器的工作。
要从技术上实现虚拟服务器、故障隔离及失败切换 3 个功能,需要两个工具:ipvsadm和keepalived。其中ipvsadm实现虚拟服务器,keepalived实现故障隔离和失败切换。
Ipvs(IP Virtual Server)是整个负载均衡的基础,基本上是一种高效的Layer-4交换机,提供负载均衡的功能。当一个TCP连接的初始SYN报文到达时,IPVS就选择一台服务器,将报文转发给它。此后通过查发报文的IP和TCP报文头地址,保证此连接的后继报文被转发到相同的服务器。
失败切换,这是针对负载均衡器 Director采取的措施,在有两个负载均衡器Director的应用场景,当主负载均衡器(MASTER)失效或出现故障,自动接管主负载据衡器的工作。
要从技术上实现虚拟服务器、故障隔离及失败切换 3 个功能,需要两个工具:ipvsadm和keepalived。其中ipvsadm实现虚拟服务器,keepalived实现故障隔离和失败切换。
Ipvs(IP Virtual Server)是整个负载均衡的基础,基本上是一种高效的Layer-4交换机,提供负载均衡的功能。当一个TCP连接的初始SYN报文到达时,IPVS就选择一台服务器,将报文转发给它。此后通过查发报文的IP和TCP报文头地址,保证此连接的后继报文被转发到相同的服务器。
Keepalived体系结构
Keeplived的体系结构分两层:内核空间(Kernel Spase)和用户空间(User Spase)。
Keepalived启动后会有三个进程:
- 父进程:内存管理,子进程管理等
- 子进程:VRRP子进程
- 子进程:healthchecker子进程
内核空间层包括两个模块:
- IPVS:功能如之前所述。在Keepalived中,IPVS模块是可配置的,如果需要负载均衡功能,可以在编译Keepalived时打开负载均衡功能,也可以通过配置编译参数关闭。
- NETLINK:主要用于实现一些高级路由框架和一些相关的网络功能,完成用户空间层Netlink Reflector模块发来的各种网络请求。
用户空间层分为4个部分:
- Scheduler - I/O Multiplexer : I/O复用分发调度器,负责安排Keepalived所有内部的任务请求。
- Memory Management:内存管理机制,这个框架提供了访问内存的一些通用方法。
- Control Plane:Keepalived的控制面板,实现对配置文件进行编译和解析,Keepalived的配置文件解析比较特殊,不是一次解析所有模块的配置,而是在用到某个模块时才解析相应的配置。
- Core components:Keepalived的核心组件,包含了一系列功能模块,主要有WatchDog、Checkers、VRRP Stack、IPVS wrapper和Netlink Reflector。
Core components的5个主要功能模块:
- WatchDog:负责监控Checkers和VRRP进程。
- Checkers:负责对服务器运行状态检测和故障隔离
- VRRP Stack:负责HA集群中失败切换(Failover)。
- IPVS wrapper:负责将设置好的IPVS规则发送到内核空间并提交给IPVS模块,最终实现IPVS模块的负载均衡功能。
- Netlink Reflector:负责高可用集群中Failover时虚拟IP(VIP)的设置和切换。Netlink Reflector的所有请求最后都发送到内核空间层的NETLINK模块来完成。
所以,Checkers+IPVS wrapper+IPVS实现了负载均衡功能,而VRRP Stack+Netlink Reflector+NETLINK则实现HA高可用。
参考资料
http://keepalived.org/pdf/sery-lvs-cluster.pdf 第六章 负载均衡及服务器集群(lvs)
http://bbs.nanjimao.com/thread-845-1-1.html Keepalived原理与实战精讲
《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群机构》第11章