虚拟的 Linux 机器 Linux Virtual Server、LVS,这个名称再恰当不过了。在多台 Linux 机器上安装 IPVS 和 Keepalive,IPVS 实际上是一个虚拟的Linux 服务,具有 Linux 机器的部分功能,各个机器上分别启动一个 Linux 虚拟服务(虚拟机),这些 Linux 虚拟服务(虚拟机)设置为同一个 IP(称为虚IP),这样在一个内网中就只能有一个 linux 虚拟服务能够抢占到这个虚 IP。所有的请求都指向这一个虚 IP,假如抢占到虚 IP 的机器宕机了,这时候其他Linux 虚拟服务就会有其中一个抢占到虚 IP,对于服务调用者来说,仍然可以访问到服务。Keepalive 的作用就是用来检测 Linux 虚拟服务是否正常。
Keepalived 是 Linux 下一个轻量级别的高可用解决方案。称为存活检测机制。起初针对 LVS 进行研发,专门用来监控集群系统中各个服务节点的状态。如果负载调度器出现故障,Keepalive 检测到以后将故障点直接从集群中剔除。支持故障自动切换和节点健康状态检查。
其通过 VRRP 协议(虚拟路由冗余协议)来实现容错保证。它通过把几台路由设备连接组成一台虚拟的路由设备,并通过一定的机制来保证当主机的下一跳设备出现故障时,可以及时将业务切换到设备,从而保持通信的连续性和可靠性。
VRRP 将局域网内的一组路由器划分在一起,称为一个备份组。备份组由一个 Master 路由器和多个Backup 路由器组成,功能上相当于一台虚拟路由器。局域网内的主机只需要知道这个虚拟路由器的 IP 地址,并不需知道具体是哪一台设备的 IP 地址,将网络内主机的缺省网关设置为该虚拟路由器的 IP 地址, 主机就可以利用该虚拟网关与外部网络进行通信。VRRP 将该虚拟路由器动态关联到承担传输业务的物理路由器上,当该物理路由器出现故障时,再次选择新路由器来接替业务传输工作,整个过程对用户完全透明,实现了内部网络和外部网络不间断通信。
Keepalive 的工作流程:
● Initialize模式。
设备启动时进入此状态,当接收到 Startup 接口的消息,将转入 Backup 或Master 状态(IP 地址拥有者的接口优先级为255,直接转为Master)。在此状态时,不会对 VRRP 报文做任何处理。
● Master模式。
(1) 定期发送 VRRP 报文。
(2) 以虚拟 MAC 地址响应对虚拟 ip 地址的 ARP 请求。
(3) 转发目的标 MAC 地址为虚拟 MAC 地址的 ip 报文。
(4) 如果它是这个虚拟 ip 地址的拥有者,则接收目的 ip 地址为这个虚拟ip 地址的 ip 报文。否则,丢弃这个 ip 报文。
(5) 如果收到比自己优先级大的报文则转为 Backup 状态。
(6) 如果收到优先级和自己相同的报文,并且发送端的 ip 地址比自己的ip 地址大,则转为 Backup 状态。
(7) 当接收到接口的 Shutdown 事件时,转为 Initialize(初始状态)。
● Backup模式。
(1) 接收 Master 发送的 VRRP 报文,判断 Master 的状态是否正常。
(2) 对虚拟 ip 地址的 ARP 请求,不做响应。
(3) 丢弃目的 MAC 地址为虚拟 MAC 地址的 ip 报文。
(4) 丢弃目的 ip 地址为虚拟 ip 地址的 ip 报文。
(5) Backup 状态下如果收到比自己优先级小的报文,丢弃报文,立即切换为 Master( 仅在抢占模式下生效 )。
(6) 如果收到优先级和自己相同或者比自己高的报文,则重置定时器, 不进一步比较 ip 地址。
(7) 当接收到接口的 Shutdown 事件时,转为 Initialize。
(8) 如果 MASTER_DOWN_INTERVAL 定时器超时,则切换为 Master。
Keepalive 的各项功能:
(1)后端节点健康状态检测。目的:搭配 LVS 使用,当后端节点出现故障时。主动剔除出集群,使集群后端节点出现故障时用户可以较为畅通地 访问相应的资源。
(2) 脚本调用。脚本所在目录:/etc/keepalive/script/。
(3) 服务检测脚本:当 Keepalive 对其他服务(非 LVS)进行高可用时, 使服务器出现故障时可迅速切换至从节点,使用户仍可以正常访问后端真实服务器。
切换至主节点脚本:当从节点承当负载调度器的角色时,需获取一些资源, 比如目录的挂载。
切换至关闭状态脚本:当该服务器需要关闭时,需释放一些资源,以免多台调度器同时写入某文件以致文件损坏。
(4) 非抢占模式。在主节点和备节点性能相差不大时采用非抢占模式, 可减少资源的浪费和提升用户体验(减少用户不能使用的时间)。
在非抢占模式中,配置文件中应都为备份模式。