keepalived集成指南
一、环境准备
系统:Linux localhost.localdomain 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
服务器A(主节点):10.10.83.121
服务器B(备节点):10.10.83.122
虚拟IP:10.10.83.100
二. 安装/检查 keepalived
注: 主备节点均需安装 keepalived
- 安装
sudo yum install -y keepalived
- 检查
keepalived -v

三. 配置keepalived
- 主节点配置
(/etc/keepalived/keepalived.conf)
global_defs {
router_id LVS_MASTER # 唯一标识
}
# Java进程检测脚本
vrrp_script chk_java {
script "/etc/keepalived/check_java.sh"
interval 2 # 每2秒检查一次
weight -20 # 失败时优先级降低20
}
vrrp_instance VI_1 {
state MASTER # 主节点
interface ens33 # 网络接口
virtual_router_id 51 # 主备必须相同
priority 100 # 优先级(100-254),主高于备
# 主备通信认证
authentication {
auth_type PASS
auth_pass 1111 # 密码,主备需一致
}
# 虚拟IP配置
virtual_ipaddress {
10.10.83.100/24 dev ens33
}
# 引用Java检测脚本
track_script {
chk_java
}
# 状态切换通知(可选)
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
- 备节点配置
(/etc/keepalived/keepalived.conf)
global_defs {
router_id LVS_BACKUP
}
vrrp_script chk_java {
script "/etc/keepalived/check_java.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP # 备节点
interface ens33
virtual_router_id 51 # 与主节点相同
priority 90 # 优先级低于主节点
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.10.83.100/24 dev ens33
}
track_script {
chk_java
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
-
创建Java进程检测脚本(两台服务器相同)
创建
/etc/keepalived/check_java.sh:
#!/bin/bash
# 检查Java进程是否存在
if pgrep -f "ESBServer" > /dev/null; then
exit 0
fi
# 两者都不存在则返回错误
exit 1
赋予执行权限:
sudo chmod +x check_java.sh
-
(可选)创建状态通知脚本
创建
/etc/keepalived/notify.sh:
#!/bin/bash
TYPE=$1
LOG_FILE="/var/log/keepalived-status.log"
VIP="10.10.83.100"
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $TYPE state entered" >> $LOG_FILE
case $TYPE in
master)
# 成为主节点时的操作
echo "VIP $VIP activated on $(hostname)" | mail -s "Keepalived Master Activated" admin@example.com
;;
backup)
# 成为备节点时的操作
;;
fault)
# 故障状态时的操作
echo "Keepalived FAULT state on $(hostname)" | mail -s "Keepalived Fault Alert" admin@example.com
;;
esac
赋予执行权限:
sudo chmod +x notify.sh
- (可选)防火墙配置(两台服务器)
# 允许VRRP协议
sudo firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
# 允许组播通信(可选)
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="224.0.0.0/24" accept' --permanent
# 重载防火墙
sudo firewall-cmd --reload
四. TongESB Server keepalived 支持
/etc/keepalived/check_java.sh修改如下:
#!/bin/bash
# 检查Java进程是否存在
if pgrep -f "ESBServer" > /dev/null; then
exit 0
fi
# 两者都不存在则返回错误
exit 1
- 主节点验证:

- 备节点验证:

- vip验证:

如上图通过虚拟ip 10.10.83.100 访问到了主节点服务。
- 关闭主节点,通过vip验证:

如上图通过虚拟ip 10.10.83.100 访问到了备节点服务。
- 重启主节点,通过vip验证:
