定义通知脚本:
  notify_master <STRING>|<QUOTED-STRING>:
    当前节点成为主节点时触发的脚本
  notify_backup <STRING>|<QUOTED-STRING>:
    当前节点转为备节点时触发的脚本
  notify_fault <STRING>|<QUOTED-STRING>:
    当前节点转为“失败”状态时触发的脚本
  notify <STRING>|<QUOTED-STRING>:
    通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知

  一、编写通知脚本

vim /etc/keepalived/notify.sh

存放位置,脚本名自定义

示例脚本如下:

#!/bin/bash
#

  rpm -qi mail &>/dev/null || yum install mailx -y &>/dev/null

contact='root@localhost'
notify() {
        mailsubject="$(hostname) to be $1, vip floating"
        mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
        echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
        notify master
        ;;
backup)
        notify backup
        ;;
fault)
        notify fault
        ;;
*)
        echo "Usage: $(basename $0) {master|backup|fault}"
        exit 1
        ;;
esac

  二、添加执行权限

chmod +x /etc/keepalived/notify.sh

  三、将这个脚本拷贝到其他keepalive服务器上

scp /etc/keepalived/notify.sh 192.168.1.8:/etc/keepalived/notify.sh

  四、测试脚本

bash notify.sh backup

  五、查看是否有收到邮件

2 root                  Wed May 26 01:39  19/678   "ka1 to be backup, vip floating"
& 2
Message  2:
From root@ka1.localdomain  Wed May 26 01:39:38 2021
Return-Path: <root@ka1.localdomain>
X-Original-To: root@localhost
Delivered-To: root@localhost.localdomain
Date: Wed, 26 May 2021 01:39:38 -0400
To: root@localhost.localdomain
Subject: ka1 to be backup, vip floating
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root@ka1.localdomain (root)
Status: RO

2021-05-26 01:39:38: vrrp transition, ka1 changed to be backup

&

  六、在配置文件中添加脚本

vim /etc/keepalived/keepalived.conf

  1、在实例的最下面添加三行

notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"

   解释:

notify_master "/etc/keepalived/notify.sh master"

master时触发notify.sh master

notify_backup "/etc/keepalived/notify.sh backup"

backup的时候触发notify.sh backup

notify_fault "/etc/keepalived/notify.sh fault"

fault (有故障)的时候触发fault

  七、测试

  1、查看主服务器的邮件

[02:20:29 root@ka1 keepalived]#mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 3 messages
>   1 root                  Wed May 26 01:33  19/678   "ka1 to be master, vip floating"
    2 root                  Wed May 26 01:39  19/678   "ka1 to be backup, vip floating"
    3 root                  Wed May 26 02:17  19/678   "ka1 to be master, vip floating"
&

  2、我这邮件太多了,为了看的清楚,就清空现有的邮件

rm -rf /var/spool/mail/root

  3、直接杀掉keepalived进程

killall -9 keepalived

  4、查看从服务器的邮件,这时候从服务器已经获取了IP地址了,

但测试下来发现,直接杀死进程,所有服务器都没有收到邮件,停止服务可以收到邮件