原理 keepalived 主要包含如下三个模块:
core: keepalived 的核心莫模块,负责主进程的启动和维护,全局配置文件的加载解析等
check: 负责对 real server 的健康检查,包括了各种健康检查方式,以及对应的配置的解析
vrrp: 维护了 VIP 与 real server 的映射关系,根据优先级来选择主备节点.它基于 vrrp(虚拟路由冗余)协议,实现了当主节点挂掉时,使得 VIP 和对应的 MAC 地址漂移到备机上,通知其它主机刷新 arp 列表的功能.
配置文件 keepalived 常用配置文件示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 # /etc/keepalived/keepalived.conf global_defs { # 尽量不使用 root 运行脚本 enable_script_security } # 定义定期执行脚本的相关属性 vrrp_script haproxy-check { user root script "/bin/bash /etc/keepalived/check_haproxy.sh" interval 3 weight -2 fall 10 rise 2 } # 定义 vrrp_instance 示例 vrrp_instance haproxy-vip { # 主机状态 MASTER 或 BACKUP state MASTER # 定义节点优先级,MASTER 比其他节点多 50 priority 100 interface ens33 # 0-255 的任意数字 virtual_router_id 1 # 指定发送 VRRP 通告的间隔,单位是秒 advert_int 3 # 使用单播将 vrrp 报文发送到以下地址列表.可以理解为 real server 地址列表 unicast_peer { 192.168.1.3 192.168.1.4 192.168.1.5 } # 虚拟 IP 地址 virtual_ipaddress { 192.168.1.100 } # 添加追踪脚本,用于监测 real server 的脚本 track_script { haproxy-check } }
如下是配置文件中用到的 /etc/keepalived/check_haproxy.sh
脚本文件,用于监测 VIP 的指定端口是否存活
1 2 3 4 5 6 7 8 9 10 11 #!/bin/bash VIRTUAL_IP=192.168.1.100 errorExit () { echo "*** $*" 1>&2 exit 1 } if ip addr | grep -q $VIRTUAL_IP ; then curl -s --max-time 2 --insecure https://${VIRTUAL_IP} :8443/ -o /dev/null || errorExit "Error GET https://${VIRTUAL_IP} :8443/" fi