Keepalived主要用于解决各种服务集群的高可用性问题,高可用集群类型主要包括LB(Load Balance负载均衡)、HA(High Availability高可用集群)和HPC(High Performance Computing高性能集群)三大类,其中我们主要关注的是前两类。

    在LB中我们可能会用到LVS来达到负载均衡,但集群前面的调度器依然可能会存在单点失败问题,因此可以用到keepalived。keepalived在设计之初就是为了配合LVS解决单点失败问题,并在后期加入了VRRP协议,能为Nginx、MySQL和HAProxy等服务的集群提供高可用解决方案。因此在了解keepalived工作原理前,我们先来看下什么是VRRP。

  1. VRRP

    VRRP(Virtual Router Redundancy Protocol),虚拟路由冗余协议,它借鉴了物理路由器的技术,并逐渐引用到Linux系统中,成为了keepalived软件的核心组件,用于解决静态网关单点风险。VRRP协议是一种容错协议,它保证了当某一台路由出现故障时,另一台路由器能及时替代出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。

1.1 VRRP网络层硬件实现

    当企业内网服务器数量较多时,可能会用到多台路由器,以下图为例,201.1.1.1和201.1.1.2为使用公网IP的路由器,172开头的为使用内网IP的能提供具体服务的服务器。

简述keepalived工作原理_服务器

    由于路由器只有一个入口和一个出口,可能会出现以下情况:

    ①当用户通过路由器向企业内网服务器发出服务请求时,可能是由201.1.1.1或201.1.1.2中任意一台向内网服务器进行转发,并且每一台路由器和内网服务器之间是类似于绑定的状态,而且当某一台路由器出现故障时,指向该路由器的内网服务器将无法对外提供服务,并不能解决单点失败问题。

    ②如果内网服务器指向多台路由器,当用户发送服务请求时,由于企业内网和经过公网路由一般做NAT转换,可能会导致用户收到的第一个包来自201.1.1.1,第二个包则是来自201.1.1.2,无法判断出是否是同一个用户或出现用户无法登录等情况。该方法虽然在一定程度上解决了内网服务器的负载均衡,但会导致无法上网等情况。

    针对以上问题,我们可以虚拟出一个VIP地址201.1.1.3,让内网服务器的网关都指向该VIP,该VIP是流动的,并不固定在201.1.1.1或201.1.1.2上。当用户发起服务请求时会到达201.1.1.3这个VIP,如果VIP此刻正处于201.1.1.1这个路由器上,就由201.1.1.1向内网服务器进行转发,响应报文的出口由VIP出去;当201.1.1.1出现故障时,VIP就会通过201.1.1.2这台路由器来向内网服务器进行服务请求的转发,并且最终出口还是VIP的地址201.1.1.3,从而解决了高可用问题。

1.2 VRRP相关术语

    VRRP相关术语包括以下几种:

    ①虚拟路由器:Virtual Router,由一个Master路由器和多个Backup路由器组成,主机将虚拟路由器当作默认网关。

    ②虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器,有相同VRID的一组路由器构成一个虚拟路由器。

    ③虚拟IP地址(VIP):Virtual IP,一个虚拟路由器可以拥有一个或多个IP地址;

    ④虚拟MAC地址(VMAC):Virutal MAC (00-00-5e-00-01-VRID),一个虚拟路由器拥有一个虚拟MAC地址,通常情况下虚拟路由器回应ARP请求使用的是虚拟MAC地址,只有虚拟路由器做特殊配置的时候,才回应接口的真实 MAC 地址。

    ⑤物理路由器,该术语主要注意三部分内容:master(主设备),虚拟路由器中承担报文转发任务的路由器;backup(备用设备),master路由器出现故障时,能够代替master路由器工作的路由器;priority(优先级),VRRP根据优先级来确定虚拟路由器中每台路由器的地位。

1.3 VRRP相关技术

    VRRP相关技术包括:

    ①通告:主要是对外通告心跳和优先级等,并且通告是周期性的,具体时间可以自定义;

    ②工作方式:工作方式分抢占式和非抢占式两种,在抢占式中,如果备用设备的优先级比主设备优先级高,则主动将自己切换成主设备;在非抢占式中,如果主设备没有出现故障,备用设备即使被设置了更高的优先级也不会成为主设备。

    ③安全认证:安全认证包括无认证、简单字符认证(利用预共享秘钥等方式来实现)和MD5认证三种。

    ④工作模式:VRRP工作模式包括主/备模式和主/主模式两种,在主/备模式下虚拟出一台路由器即可,而在主/主模式需虚拟出两台路由器,并且要将彼此设为主/备。

  1. keepalived工作原理

    keepalived是基于VRRP协议的软件实现,其原生设计目的为了高可用ipvs服务。

2.1 keepalived功能

    keepalived的功能包括以下几点:

    ①基于VRRP协议完成地址流动;

    ②为VIP地址所在的节点生成ipvs规则(在配置文件中预先定义)

    ③为ipvs集群的各RS做健康状态检测;

    ④基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持Nginx、HAProxy等服务。

2.2 keepalived架构

    keepalived架构如下图所示,可分为用户空间核心组件、控制组件、IO复用器和内存管理组件四部分。

简述keepalived工作原理_内网_02

    ①用户空间核心组件包括:VRRP Stack(VIP消息通告)、Checkers(监测real server)、System call(实现 vrrp 协议状态转换时调用脚本的功能)、SMTP(邮件组件)、IPVS wrapper(生成IPVS规则)、Netlink Reflector(网络接口)和WatchDog(监控进程)

    ②控制组件主要是提供keepalived.conf 的解析器,以完成Keepalived配置;

    ③IO复用器可以针对网络目的而优化的自己的线程抽象;

    ④内存管理组件可以为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限。

2.3 keepalived工作原理

    在了解了以上知识后,我们可以总结keepalived工作原理:

    ①keepalived服务对之间通过VRRP来进行通信,VRRP利用竞选机制来确定主节点和备用节点,优先级高的作为主节点,优先级低的作为备用节点;

    ②主节点在工作时会优先获得所有的资源,而备用节点则是处于等待状态。只有在主节点出现故障时,备用节点才会接管主节点的资源,并作为新的主节点对外提供服务;

    ③keepalived服务对中,只有主节点的服务器会一直发送VRRP广播包来传递heartbeat信息,告诉备用节点它还活着,此时备用节点不会抢占主节点资源;

    ④当主节点出现故障不可用时,备用节点因无法接收到主节点发送的VRRP广播,就会启动相关服务接管主节点的资源,保证业务的连续性。而当之前出现故障的主节点恢复正常后,现有的由备用节点转变过来的主节点会自动释放已接管的资源,重新由恢复正常的主节点接管。