定义keepalived发生地址漂移时发邮件给客户端:
host1: 172.16.52.59 node2
host2: 172.16.52.60 node3
eg1:
]# vim /etc/keepalived/notify.sh
#!/bin/bash
#
addressee='root@localhost' ///定义收件人
notify(){
subject=" `hostname` to be $1 vip floating. "
content=" `date +%F:%H:%M:%S` `hostname` exchange to be $1 "
echo $content | mail -s "$subject" $addressee
}
case $1 in
master)
notify master
exit 0
;;
backup)
notify backup
exit 0
;;
fault)
notify default
exit 0
;;
*)
;;
esac
///自定义脚本,实现若主机发生了地址漂移,则将发送提示的邮件信息给该主机,注意事项,一定要给予脚本可执行的权限,不然会收不到邮件,执行命令
~] chmod +x /etc/keepalived/notify.sh
host1:
]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node2
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 3
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass vHvJ7g
}
virtual_ipaddress {
172.16.52.12
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_default "/etc/keepalived/notify.sh default"
}
/// 配置node2
host2:
]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node3
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777736
virtual_router_id 3
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass vHvJ7g
}
virtual_ipaddress {
172.16.52.12
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_default "/etc/keepalived/notify.sh default"
}
///配置node3
测试:
各主机重启服务后,使用mail命令直接查看:
接着按回车,就可以看到更多的内容,使用q退出
总结:这种定义脚本生效的方式必须得重启keepalived服务,不太方便,尝试另外一种机制track。
eg2:
host1:
]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node2
}
vrrp_script scape {
script "[[ -f /etc/keepalived/dead ]] && exit 1 || exit 0"
interval 1
weight -3
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 3
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass vHvJ7g
}
virtual_ipaddress {
172.16.52.12
}
track_script {
scape
}
}
/// vrrp_script在vrrp_instance之外定义,而track_script则在内部定义,并且interval指的是通告的间隔时长,weight指的是对权重减去3,记得重启脚本。。。
host2:
]# cat keepalived.conf! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node3
}
vrrp_script scape {
script "[[ -f /etc/keepalived/dead ]] && exit 1 || exit 0"
interval 1
weight -3
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777736
virtual_router_id 3
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass vHvJ7g
}
virtual_ipaddress {
172.16.52.12
}
track_script{
scape
}
}
测试:
务必重启服务使得配置文件生效,是在stop不掉,就pkill keepalived进程,touch /etc/keepalived/dead文件,用ip addr list 查看,
eg3:
host1:
]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node2
}
vrrp_script search_nginx{
script "killall -0 nginx"
interval 1
weight -5
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 3
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass vHvJ7g
}
virtual_ipaddress {
172.16.52.12
}
track_script {
search_nginx
}
}
host2:
]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node3
}
vrrp_script search_nginx{
script "killall -0 nginx"
interval 1
weight -5
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777736
virtual_router_id 3
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass vHvJ7g
}
virtual_ipaddress {
172.16.52.12
}
track_script{
search_nginx
}
}
测试:分别在两个主机上面安装nginx服务,并分别在根目录下写一个能够区别主机的html文档,启动nginx服务,接着重启keepalived服务后,host1停掉nginx服务,用浏览器访问 172.16.52.12 可以看到结果