keepalived简介
Keepalived 是一个用 C 语言编写的开源软件,主要用于实现高可用性(High Availability)和负载均衡。它基于 VRRP (Virtual Router Redundancy Protocol) 协议,能够确保在服务器故障时自动切换到备份服务器,从而保证服务的连续性。
核心功能
高可用性(HA)
通过 VRRP 协议实现主备服务器切换
自动检测服务器故障并执行故障转移
支持多备份节点
负载均衡
基于 Linux 虚拟服务器(LVS)实现负载均衡
支持多种调度算法(轮询、加权轮询、最少连接等)
健康检查
支持对后端服务器进行健康状态检测
可自定义检查脚本
工作原理
Keepalived 通过 VRRP 协议在多个服务器之间共享一个虚拟 IP 地址(VIP)。正常情况下,主服务器持有 VIP 并对外提供服务,备份服务器处于待命状态。主服务器会定期向备份服务器发送 VRRP 通告报文,如果备份服务器在一定时间内没有收到通告,就会接管 VIP 并成为新的主服务器
主要组件
VRRP Stack - 处理 VRRP 协议的实现
Checkers - 负责健康检查
SMTP - 提供邮件通知功能
IPVS wrapper - 与 LVS 集成实现负载均衡
System call - 执行系统命令和脚本
实现独立子配置文件
当生产环境复杂时, /etc/keepalived/keepalived.conf 文件中内容过多,不易管理 将不同集群的配置,比如:不同集群的VIP配置放在独立的子配置文件中利用include 指令可以实现包含 子配置文件。
示例:mkdir /etc/keepalived/conf.d
vim /etc/keepalived/keepalived.conf
include /etc/keepalived/conf.d/*.conf #相关子配置文件
vim /etc/keepalived/conf.d/router.conf
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 20 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.25.254.100/24 dev eth0 label eth0:0 } }
日志分离
示例:
vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 6"
vim /etc/rsyslog.conf
local6.* /var/log/keepalived.log
systemctl restart keepalived.service rsyslog.service
Keepalived 企业应用示例
实现master/slave的 Keepalived 单主架构
MASTER配置
vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 20 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.25.254.100/24 dev eth0 label eth0:0 } }
BACKUP配置
vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 20 priority 80 #相同id管理同一个虚拟路由 #低优先级 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.25.254.100/24 dev eth0 label eth0:0 } }
抓包观察
tcpdump -i eth0 -nn host 224.0.0.18
抢占模式和非抢占模式
默认为抢占模式preempt,即当高优先级的主机恢复在线后,会抢占低先级的主机的master角色, 这样会使vip在KA主机中来回漂移,造成网络抖动, 建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的master角色 非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机
注意:要关闭 VIP抢占,必须将各 keepalived 服务器state配置为BACKUP
设置优先级不一样,但state都是 backup的
再添加一个nopreempt参数
抢占延迟模式
抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认300s)再抢回 VIP
preempt_delay # #指定抢占延迟时间为#s,默认延迟300s
注意:需要各keepalived服务器state为BACKUP,并且不要启用 vrrp_strict
priority 100 #优先级高 preempt_delay 300s #抢占延迟时间
VIP单播配置
默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量
注意:启用 vrrp_strict 时,不能启用单播
配置:
#在所有节点vrrp_instance语句块中设置对方主机的IP,建议设置为专用于对应心跳线网络的地址,而非使 用业务网络
unicast_src_ip #指定发送单播的源IP unicast_peer { #指定接收单播的对方目标主机IP ...... }
#vrrp_strict #注释此参数,与vip单播模式冲突
实现 master/master 的 Keepalived 双主架构
master/slave的单主架构,同一时间只有一个Keepalived对外提供服务,此主机繁忙,而另一台主机却 很空闲,利用率低下,可以使用master/master的双主架构,解决此问题。 master/master 的双主架构: 即将两个或以上VIP分别运行在不同的keepalived服务器,以实现服务器并行提供web访问的目的,提高 服务器资源利用率
配置
vrrp_instance VI_1 { state BACKUP #备 interface ens33 virtual_router_id 50 priority 80 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.25.254.50 dev ens33 label ens33:0 } } vrrp_instance VI_60 { state MASTER } #主 interface ens33 virtual_router_id 60 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.25.254.60 dev eth0 label eth0:1