介绍

  1. keepalived是Linux下一个轻量级的高可用解决方案,keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,如果某个服务器节点出现故障,keepalived将检测到后自动将节点从集群中剔除掉
  2. keepalived后来加入VRRP(虚拟路由冗余协议)功能,通过VRRP可以实现网络不间断稳定运行,因此keepalived一方面具有服务状态检测和故障隔离,另一方面也拥有HAcluster功能
  3. 健康检查和失败切换是keepalived的两大核心功能;请求等方式对负载均衡器后面的实际的服务器(通常业务服务器)进行保活
    1. 健康检查:采用TCP三次握手
    2. ICMP请求
    3. HTTP请求
    4. udp echo
  4. 失败切换:应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,挡住负载均衡器出现问题时,由备负载均衡器承载对应业务,从而最大限度上减少流量损失,并提供服务的稳定性

VRRP(虚拟路由冗余协议)功能——解决单点路由出现故障的问题

  1. VRRP是一种容错的主备模式协议,保证当主机的下一跳路由出现故障时,有另一台路由器来代替出现故障路由器进行工作,通过VRRP可以在网络发生故障的时候透明的进行设备切换而不影响主机之间的数据通信
  2. 虚拟路由器:虚拟路由器内部通常只有一个真实的物理路由器对外提供功能,拥有虚拟的IP+MAC地址
  3. 主路由器:主路由器是由选举算法产生,,对外提供各种网络服务功能
  4. 备份服务器:VRRP种除掉主路由器的所有理由,不对外提供任何服务功能,只接受主路由的通告,当主路由器挂掉之后,重新进行选举算法接替主路由器

    VRRP选举机制

    三种状态

    initializer状态:系统启动后进入
    master状态:
    backup状态

    选举机制

    优先级
    抢占模式:一旦有优先级高的路由器加入,即成为master
    非抢占模式:只要由master不挂,优先级高的路由只能等待

    工作原理

    网络层:通过ICMP协议向后端服务器集群中发送数据报文
    传输层:利用TCP协议的端口连接和扫描技术检测后端服务器集群是否正常
    应用层:自定义keepalived工作方式(脚本)

    体系结构

    image.png
    scheduler-I/O multiplexer:是一个IO复用分发调度器,他负责安排keepalived所有内部的任务请求
    memory mngt:内存管理机制,提供了访问内存的一些通用方法
    control plane:keepalived控制版面,可以实现对配置文件的编译和间隙
    core components
    -watchdog:检测工具,keepalived可以通过它监控checkers和VRRP进程
    -checkers:实现对服务器运行状态检测和故障隔离
    -VRRP stack:可以实现HA集群种失败切换功能,负责负载均衡器之间的失败切换
    -IPVS wrapper:IPVS的功能实现,这个模块可以将设置好的IPVS规则发送给内核空间中的IPVS模块,最终去实现IPVS模块的负载功能
    -netlink reflector:实现高可用集群发生故障时IP的设置和切换(故障隔离和故障恢复)
    keepalived运行时,会启动三个进程:
    core:负责主进程的启动,维护和全局配置文件的加载
    check:负责健康检查
    vrrp:用来实现VRRP协议

对比

  1. Keepalived的目的是模拟路由器的高可用
  2. Heartbeat或Corosync的目的是实现Service的高可用
  3. Keepalived是实现前端高可用,常用的前端高可用的组合有:

就是我们常见的LVS+Keepalived、 Nginx+Keepalived、HAproxy+Keepalived

  1. Heartbeat或Corosync是实现服务的高可用,常见的组合有:

Heartbeat v3(Corosync)+Pacemaker+NFS+Httpd 实现Web服务器的高可用、
Heartbeat v3(Corosync)+Pacemaker+NFS+MySQL 实现MySQL服务器的高可用。

keepalived相关实验

node1(nginx1):192.168.220.102
node2(nginx2):192.168.220.105
node3(web1):192.168.220.103
node4(web2):192.168.220.104
VIP:192.168.220.10
image.png
安装nginx,node1和node2使用nginx做服务器,web可用HTTP也可用nginx
web1(&web2):
image.png
nginx1:
image.png
nginx2:
image.png
keepalived1:
image.png
check_nginx_pid.sh脚本:
image.png
keepalived2:
image.png
测试:
访问http://192.168.220.10:8080
停止node1的Keepalived服务,观察VIP是否漂移,访问正常
停止node1的nginx服务,观察VIP是否漂移,访问正常
如果需要检测后端服务,可以通过Nginx提供策略

排查辅助

查看keepalived日志相关:cat /var/log/messages