集成keepalived
目录
一、Keepalived简介
Keepalived 诞生于 2001 年,用来解决 LVS 的高可用问题。后来,它基于 VRRP 协议发展成一款通用的高可用工具,可以自动管理虚拟 IP,实现主备切换。在网络高可用和 VIP 漂移方面,Keepalived 是 Linux 系统里最经典、最稳定的选择。
LVS(inux Virtual Server,Linux 虚拟服务器):Linux 内核提供的四层(L4)负载均衡技术,用于将客户端请求分发到多台后端服务器,实现高可用和高性能服务集群。LVS 本身依赖 Linux 内核,默认模块可能没有加载,需要手动加载。
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议):一种标准网络协议(L3),用于实现主备节点间的虚拟 IP 漂移,提高路由或服务器的高可用性。
1. Keepalived的定位
Keepalived 主要基于 VRRP 协议实现 VIP(虚拟 IP)漂移,加上健康检查,来保证高可用。
2. Keepalived与负载均衡
Keepalived 本身不提供负载均衡算法,但提供对 LVS 的管理功能。
-
Keepalived(提供 VRRP 实现) = 主备高可用(HA)。
-
Keepalived + LVS = 四层负载均衡(L4 LB),实现IP 层、TCP/UDP 转发,比如:按照源 IP、目标 IP、端口做分发。
-
实现应用层负载均衡(L7 LB),可以使用TongHttpServer(简称:THS,与Nginx的作用相同),实现基于 HTTP 头、URI、Cookie 等更灵活的规则转发请求。
TongHttpServer是东方通的高性能服务代理中间件(已经被集成在TUS中,只为TUS提供服务;若用于TUS之外的系统,需要单独购买),支持OSI四层七层协议,可作为静态资源服务器、正向代理服务器、反向代理服务器、负载均衡服务器使用,支持带权轮询、IP哈希、最小连接、随机、哈希等多种负载均衡算法,满足企业构建高可用、高扩展性、高性能的应用服务集群需求。
常见部署模式
ESB 主备(单活):
客户端 → VIP (Keepalived 提供) → ESB主备 → 后端应用
Nginx主备(单活) + ESB 集群(双活)
客户端 → VIP (Keepalived 提供) → THS主备 → ESB集群 → 后端应用
Nginx集群(双活) + ESB 集群(双活)
客户端 → VIP (Keepalived 提供) → LVS(L4调度) → THS集群 → ESB集群 → 后端应用
二、环境准备
系统: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
1. 安装
sudo yum install -y keepalived
2. 检查
keepalived -v

四、配置keepalived
1. 主节点配置
(/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"
}
2. 备节点配置
(/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"
}
3. 创建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
4. 创建状态通知脚本(可选)
创建 /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 支持
1. 修改配置文件
(/etc/keepalived/check_java.sh)
#!/bin/bash
# 检查Java进程是否存在
if pgrep -f "ESBServer" > /dev/null; then
exit 0
fi
# 两者都不存在则返回错误
exit 1
2. 主节点验证

3. 备节点验证

4. vip验证

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

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