一、配置文件
vim /etc/keepalived/keepalived.confGLOBAL CONFIGURATION --- 全局配置部分VRRPD CONFIGURATION --- VRRP协议配置部分LVS CONFIGURATION --- LVS服务管理配置部分[root@lb01 ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalivedglobal_defs { --- 全局配置部分notification_email { --- 设置发送邮件信息的收件人acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from oldboy@163.com --- 设置连接的邮件服务器信息smtp_server 163.smtp.xxx_smtp_connect_timeout 30 router_id LVS_DEVEL --- 高可用集群主机身份标识(集群中主机身份标识名称不能重复)}vrrp_instance oldboy { --- Vrrp协议家族 oldboystate MASTER --- 标识所在家族中的身份 (MASTER/BACKUP)interface eth0 --- 指定虚拟IP地址出现在什么网卡上virtual_router_id 51 --- 标识家族身份信息 多台高可用服务配置要一致 priority 100 --- 设定优先级 优先级越高,就越有可能成为主advert_int 1 --- 定义组播包发送的间隔时间(秒) 主和备配置一样 1authentication { --- 实现通讯需要有认证过程auth_type PASSauth_pass 1111}virtual_ipaddress { --- 配置虚拟IP地址信息192.168.200.16192.168.200.17192.168.200.18}}
二、环境准备
1、服务器规划
角色 IP 地址 主机名 虚拟 IP (VIP) 优先级
Master 192.168.1.101 node1 192.168.1.100 100
Backup 192.168.1.102 node2 192.168.1.100 90
2、网络要求
主备节点需在同一局域网(二层互通)。确保防火墙允许 VRRP 协议报文(IP 协议号 112,组播地址 224.0.0.18)。若为云环境(如 AWS、阿里云),需确认支持组播或配置单播模式。
三、安装 Keepalived
1、在 Master 和 Backup 节点安装
# CentOS/RedHat
yum install keepalived -y# Ubuntu/Debian
apt-get install keepalived -y
2、启动服务并设置开机自启
systemctl start keepalived
systemctl enable keepalived
3、配置 Keepalived
1、主节点(Master)配置
配置文件路径:/etc/keepalived/keepalived.conf
global_defs {router_id NODE_MASTER # 唯一标识,建议按节点角色命名
}vrrp_instance VI_1 {state MASTER # 初始状态为 MASTERinterface eth0 # 绑定网卡名称(需根据实际修改)virtual_router_id 51 # 虚拟路由 ID,同一组需相同(1-255)priority 100 # 优先级,Master 需高于 Backupadvert_int 1 # 心跳间隔(秒)authentication { # 认证配置(主备需一致)auth_type PASSauth_pass 12345678 # 密码建议复杂化}virtual_ipaddress { # 虚拟 IP(VIP)192.168.1.100/24 dev eth0}# 可选:触发切换的脚本(如检测服务状态)track_script {chk_nginx # 引用健康检查脚本}
}# 可选:定义健康检查脚本(示例:检查 Nginx 是否存活)
vrrp_script chk_nginx {script "/usr/bin/killall -0 nginx" # 检查 Nginx 进程是否存在interval 2 # 检查间隔(秒)weight -20 # 检测失败时优先级降低值fall 2 # 连续失败 2 次判定为故障rise 1 # 成功 1 次即恢复
}
2、备节点(Backup)配置
配置文件路径:/etc/keepalived/keepalived.conf
global_defs {router_id NODE_BACKUP
}vrrp_instance VI_1 {state BACKUP # 初始状态为 BACKUPinterface eth0virtual_router_id 51 # 必须与 Master 一致priority 90 # 优先级低于 Masteradvert_int 1authentication {auth_type PASSauth_pass 12345678}virtual_ipaddress {192.168.1.100/24 dev eth0}track_script {chk_nginx}
}# 健康检查脚本需与 Master 一致
vrrp_script chk_nginx {script "/usr/bin/killall -0 nginx"interval 2weight -20fall 2rise 1
}
四、关键配置说明
virtual_router_id:同一 VRRP 组内所有节点必须相同,不同组需不同。priority:优先级决定选举结果,范围 1-254,默认 100。advert_int:心跳间隔建议设为 1 秒,超时时间为 3 × advert_int + skew_time。track_script:用于扩展健康检查(如检测应用服务状态),故障时触发优先级降低。
五、启动与验证
1、启动服务
systemctl restart keepalived
2、检查 VIP 绑定
在 Master 节点执行:ip addr show eth0 | grep 192.168.1.100
# 应输出:inet 192.168.1.100/24 scope global secondary eth0
3、查看 Keepalived 状态
journalctl -u keepalived -f # 查看实时日志
# 正常日志示例:VRRP_Instance(VI_1) Transition to MASTER STATE
4、模拟故障切换
1、手动停止 Master 的 Keepalived:
systemctl stop keepalived
2、验证 Backup 是否接管 VIP:
# 在 Backup 节点执行:
ip addr show eth0 | grep 192.168.1.100
六、高级配置
1、多实例负载均衡
为不同服务配置多个 VRRP 实例:
vrrp_instance VI_2 {state MASTERinterface eth0virtual_router_id 52priority 100virtual_ipaddress {192.168.1.200/24 dev eth0}# 其他配置...
}
2、结合 Nginx/Haproxy 实现七层负载均衡
在 Keepalived 节点部署 Nginx/Haproxy,绑定 VIP。通过 Keepalived 监控 Nginx/Haproxy 进程,实现服务级高可用。
7、常见问题处理
1、脑裂(Split-Brain)
现象:主备节点同时持有 VIP。
解决:
检查防火墙是否允许 VRRP 报文。配置 nopreempt 关闭抢占模式。使用单播替代组播。
2、 VIP 无法绑定
原因:网卡未正确配置或 IP 冲突
解决
检查 interface 配置与实际网卡名称是否一致。
使用 arping 检测 VIP 是否被占用:
arping -I eth0 192.168.1.100