跳到主要内容

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

  1. 安装
sudo yum install -y keepalived
  1. 检查
keepalived -v

keepalived_check

三. 配置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"
}

  1. 备节点配置 (/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"
}
  1. 创建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
  1. (可选)创建状态通知脚本

    创建 /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
  1. (可选)防火墙配置(两台服务器)
# 允许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

  1. 主节点验证:

keepalived_master_check

  1. 备节点验证:

keepalived_slave_check

  1. vip验证:

keepalived_vip_check

如上图通过虚拟ip 10.10.83.100 访问到了主节点服务。

  1. 关闭主节点,通过vip验证:

keepalived_slave_vip_check

如上图通过虚拟ip 10.10.83.100 访问到了备节点服务。

  1. 重启主节点,通过vip验证:

keepalived_restart_master_vip_check