! Configuration File for keepalived
# 定义全局参数
global_defs {
notification_email {
you@example.com # 节点状态改变时发送通知的邮箱地址
}
notification_email_from keepalived@localhost # 发送通知的邮箱地址
smtp_server 127.0.0.1 # SMTP服务器地址
smtp_connect_timeout 30 # SMTP连接超时时间
router_id LVS_DEVEL # 路由ID
}
# 定义VRRP实例
vrrp_instance VI_1 {
# 监听的网络接口
interface eth0
# 配置主节点状态
state MASTER
# 虚拟路由ID
virtual_router_id 51
# 优先级,主节点优先级高于备份节点
priority 100
# 虚拟IP地址
virtual_ipaddress {
192.168.1.100 # VIP地址
}
# 轮询检测haproxy服务是否存活,最多执行10次
# 通过kill命令向进程发送0号信号,如果haproxy进程存活则不执行任何操作
# 如果haproxy进程不存在,则重启haproxy进程
# 如果执行10次之后haproxy依旧未启动,则切换keepalived节点状态
# 如果当前节点为主节点,则切换到备份节点,如果当前节点为备份节点,则切换到主节点
track_script {
chk_haproxy_script
}
# 定义通知机制,如果节点状态发生变化,则通过邮件通知管理员
# 如果配置了notification_email,则在状态改变时发送邮件通知
# 如果未配置notification_email,则将日志信息写入/var/log/messages中
notify_master "/usr/local/bin/keepalived_notify.sh MASTER"
notify_backup "/usr/local/bin/keepalived_notify.sh BACKUP"
notify_fault "/usr/local/bin/keepalived_notify.sh FAULT"
# 检查主备节点之间的连接是否正常
# 如果检测到故障,则将当前节点切换到备份节点
# 如果当前节点为主节点,则切换到备份节点,如果当前节点为备份节点,则继续保持备份状态
track_interface {
eth0
}
}
# 定义VRRP实例
vrrp_instance VI_2 {
# 监听的网络接口
interface eth1
# 配置备份节点状态
state BACKUP
# 虚拟路由ID
virtual_router_id 52
# 优先级,主节点优先级高于备份节点
priority 50
# 虚拟IP地址
virtual_ipaddress {
192.168.2.100 # VIP地址
}
# 轮询检测web服务是否存活,最多执行10次
# 如果web服务不存在,则切换keepalived节点状态
# 如果当前节点为主节点,则切换到备份节点,如果当前节点为备份节点,则切换到主节点
track_script {
chk_web_script
}
# 定义通知机制,如果节点状态发生变化,则通过邮件通知管理员
# 如果配置了notification_email,则在状态改变时发送邮件通知
# 如果未配置notification_email,则将日志信息写入/var/log/messages中
notify_master "/usr/local/bin/keepalived_notify.sh MASTER"
notify_backup "/usr/local/bin/keepalived_notify.sh BACKUP"
notify_fault "/usr/local/bin/keepalived_notify.sh FAULT"
# 检查主备节点之间的连接是否正常
# 如果检测到故障,则将当前节点切换到备份节点
# 如果当前节点为主节点,则切换到备份节点,如果当前节点为备份节点,则继续保持备份状态
track_interface {
eth1
}
}
# 定义检测haproxy进程的脚本
# 如果haproxy进程存活,则不执行任何操作
# 如果haproxy进程不存在,则重新启动haproxy
# 如果执行10次之后haproxy依旧未启动,则切换keepalived节点状态
# 如果当前节点为主节点,则切换到备份节点,如果当前节点为备份节点,则切换到主节点
vrrp_script chk_haproxy_script {
script "/usr/local/bin/haproxy_check.sh"
interval 5
weight 2
fall 10
rise 2
}
# 定义检测web服务进程的脚本
# 如果web服务进程存活,则不执行任何操作
# 如果web服务进程不存在,则切换keepalived节点状态
# 如果当前节点为主节点,则切换到备份节点,如果当前节点为备份节点,则切换到主节点
vrrp_script chk_web_script {
script "/usr/local/bin/web_check.sh"
interval 5
weight 2
fall 10
rise 2
}
脚本文件内容
/usr/local/bin/haproxy_check.sh
#!/bin/bash
# 检测haproxy进程是否存活
pgrep haproxy > /dev/null
if [ $? -ne 0 ]; then
# 如果haproxy进程不存在,则尝试重新启动haproxy
service haproxy restart
# 给haproxy启动一些时间
sleep 10
# 再次检测haproxy进程是否存活
pgrep haproxy > /dev/null
if [ $? -ne 0 ]; then
# 如果haproxy仍未启动,则退出并切换节点状态
exit 1
fi
fi
# 如果haproxy进程存活,则直接退出
exit 0
/usr/local/bin/web_check.sh
#!/bin/bash
# 检测web服务进程是否存活
pgrep nginx > /dev/null
if [ $? -ne 0 ]; then
# 如果web服务进程不存在,则退出并切换节点状态
exit 1
fi
# 如果web服务进程存活,则直接退出
exit 0