Keepalived VIP迁移邮件告警配置指南

Keepalived 业务 VIP 迁移告警

本文档说明如何在两台 Keepalived 节点上配置邮件告警(当 VRRP 状态发生迁移时发送邮件通知),包含环境准备、脚本与 keepalived 配置、测试与常见问题排查。


1 概要

目标:当 Keepalived 的 VRRP 状态由 MASTER/BACKUP/Fault 变化时,自动发送邮件告警,以便运维人员及时知晓 VIP 迁移情况。

思路:利用 s-nail(mailx)+ postfix 发送邮件;Keepalived 的 notify_* 回调执行脚本发送邮件。


2 前提与环境

  • 两台机器(例如 KA1、KA2),并且 Keepalived 已安装并正常运行。
  • 系统:基于 RHEL/Fedora/CentOS 的发行版(命令使用 dnf)。
  • 可以使用外部 SMTP(例如 163 SMTP)或本机 postfix 做转发。
  • 需要一个用于接收告警的邮箱(示例用 18717458451@163.com)。

3 安装邮件相关软件

在两台节点上安装 s-nail 与 postfix:

bash 复制代码
#安装邮件软件# 在两台节点上执行
dnf install -y s-nail postfix

启动并设置 postfix#启动邮件代理:

bash 复制代码
[root@KA1 KA2 ~] systemctl enable --now postfix.service

(可选)如果使用本机 postfix 作为 relaying,需保证 postfix 配置允许本机提交邮件并能通过公网 SMTP 路由到目标 SMTP。


4 配置 s-nail

(/etc/mail.rc)

在每台节点上配置 /etc/mail.rc,使 s-nail 能通过外部 SMTP 发送邮件(示例使用 163):

bash 复制代码
在Linux主机中配置mailrc(KA1+KA2)
[root@KA1+KA2 ~]# vim /etc/mail.rc
set smtp=smtp.163.com
set smtp-auth=login
set smtp-auth-user=your_account@163.com
set smtp-auth-password=your_authorization_password
set from=your_account@163.com
set ssl-verify=ignore

示例内容(请替换邮箱账号/授权码):

获取授权码:qq邮箱

获取163邮箱

说明:

  • smtp-auth-password 使用 SMTP 授权码(不是邮箱登录密码)------视邮件服务商要求。
  • 若使用本机 postfix 转发到 ISP 或外部 SMTP,可不用配置 /etc/mail.rc,直接让 postfix 发信。

测试发信:

复制代码
[root@KA1 mail]echo hello | mailx -s "填写发送内容" your_receive_mail@163.com
# 查看邮件队列
[root@KA1 mail]mailq
# 查看本地 /var/spool/mail/root 是否有退信等
[root@KA1 mail]mail

2.设定keepalived告警脚本

在两台节点创建脚本目录并编写脚本:

bash 复制代码
mkdir -p /etc/keepalived/scripts
vim /etc/keepalived/scripts/warning.sh

脚本示例(请根据需要调整接收邮箱、主题等):

bash 复制代码
#!/bin/bash
mail_dest='@163.com'   # 告警接收邮箱

mail_send()
{
    mail_subj="$HOSTNAME -> $1 : VIP 转移告警"
    mail_mess="$(date +'%F %T'): vrrp 转移, $HOSTNAME 变为 $1"
    echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
}

case "$1" in
    master)
        mail_send master
        ;;
    backup)
        mail_send backup
        ;;
    fault)
        mail_send fault
        ;;
    *)
        exit 1
        ;;
esac

授权并测试脚本:

复制代码
[root@KA1+2 ~]# chmod  +x /etc/keepalived/scripts/waring.sh

[root@KA1 ~]# /etc/keepalived/scripts/waring.sh master

#对应邮箱中会出现邮件

配置keepalived告警

复制代码
[root@KA1 ~]# vim /etc/keepalived/keepalived.conf

#在KA1和KA2中设定配置文件
! Configuration File for keepalived

global_defs {
   notification_email {
     timinglee_zln@163.com
   }
   notification_email_from timinglee_zln@163.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id KA1
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 1
   vrrp_gna_interval 1
   vrrp_mcast_group4 224.0.0.44
   enable_script_security
   script_user root
}
vrrp_instance WEB_VIP {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
  # unicast_src_ip 172.25.254.50
  # unicast_peer {
  #   172.25.254.60
#   }
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:0
    }
    notify_master "/etc/keepalived/scripts/waring.sh master"
    notify_backup "/etc/keepalived/scripts/waring.sh backup"
    notify_fault "/etc/keepalived/scripts/waring.sh fault"
}
复制代码
#重启 keepalived[root@KA1+2 ~]# systemctl restart keepalived.service

测试流程

  1. 确认 keepalived 在两台机器上正常运行,VIP 已绑定在 MASTER 节点。

  2. 停掉主节点的 keepalived,观察 backup 变为 MASTER:

    • 在主节点执行: systemctl stop keepalived.service
    • 检查另一台节点是否收到邮件告警(notify_backup/on master)。
  3. 重启主节点的 keepalived(或启动),观察主节点重新成为 MASTER 并收到告警。

  4. 查看 /var/log/maillog 或 /var/log/maillog 的 postfix 日志以排查发送失败原因;查看 /var/spool/mqueue(如有)或 mailq

    #测试
    [root@KA1 ~]# systemctl stop keepalived.service #停止服务后查看邮件

复制代码
[root@KA1 ~]# systemctl start keepalived.service	#开启服务后查看邮件

常见问题与排查建议

  • 收不到告警邮件:

    • 检查 /etc/mail.rc 或 postfix 是否配置正确,尝试手动用 mailx 发送邮件排查。
    • 检查防火墙或网络是否阻塞 SMTP(端口 25/465/587)。
    • 查看本地邮件队列 mailq 和邮件日志(/var/log/maillog 或 /var/log/maillog)。
    • 一些邮件服务商会将自动化邮件判为垃圾,检查目标邮箱垃圾箱与拦截策略。
  • keepalived 无法执行脚本:

    • 确认脚本可执行 (chmod +x),并有正确的 shebang(#!/bin/bash)。
    • 若启用了 enable_script_security,确认 script_user 有权限执行脚本和调用 mailx。
    • 在脚本内显式使用全路径(例如 /usr/bin/mail/usr/bin/mailx),避免 PATH 问题。
  • 脚本执行但邮件发送失败:

    • 在脚本中记录日志(重定向输出到 /var/log/keepalived-notify.log)以便排查:

      复制代码
      echo "$mail_mess" | /usr/bin/mail -s "$mail_subj" $mail_dest >> /var/log/keepalived-notify.log 2>&1

/usr/bin/mailx),避免 PATH 问题。

  • 脚本执行但邮件发送失败:

    • 在脚本中记录日志(重定向输出到 /var/log/keepalived-notify.log)以便排查:

      复制代码
      echo "$mail_mess" | /usr/bin/mail -s "$mail_subj" $mail_dest >> /var/log/keepalived-notify.log 2>&1
  • SMTP 验证失败:确认使用的用户名/授权码正确,且邮件服务开启了 SMTP/授权码功能。

相关推荐
物联网软硬件开发-轨物科技4 小时前
【轨物洞见】告别“被动维修”!预测性运维如何重塑老旧电站的资产价值?
运维·人工智能
程序员允诺5 小时前
[DevOps实战] 彻底解决依赖地狱:如何编译全静态、可移植的 Xorriso 工具
运维·devops
酣大智5 小时前
接口模式参数
运维·网络·网络协议·tcp/ip
Genie cloud5 小时前
1Panel SSL证书申请完整教程
服务器·网络协议·云计算·ssl
一只自律的鸡5 小时前
【Linux驱动】bug处理 ens33找不到IP
linux·运维·bug
!chen5 小时前
linux服务器静默安装Oracle26ai
linux·运维·服务器
莫大3305 小时前
2核2G云服务器PHP8.5+MySQL9.0+Nginx(LNMP)安装WordPress网站详细教程
运维·服务器·nginx
刚刚入门的菜鸟5 小时前
php-curl
运维·web安全·php
ling___xi5 小时前
《计算机网络》计网3小时期末速成课各版本教程都可用谢稀仁湖科大版都可用_哔哩哔哩_bilibili(笔记)
网络·笔记·计算机网络