手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

Linux 高可用(HA)集群之Keepalived详解

[日期:2013-08-22] 来源:Linux社区  作者:freeloda [字体: ]

 

(4).增加脚本
[root@slave keepalived]# pwd
/etc/keepalived
[root@slave keepalived]# vim notify.sh
[root@slave keepalived]# cat notify.sh
#!/bin/bash
# Author: freeloda
# description: An example of notify script
# Usage: notify.sh -m|--mode {mm|mb} -s|--service SERVICE1,... -a|--address VIP -n|--notify {master|backup|falut} -h|--help
contact='15251076067@163.com'
helpflag=0
serviceflag=0
modeflag=0
addressflag=0
notifyflag=0
Usage() {
echo "Usage: notify.sh [-m|--mode {mm|mb}] [-s|--service SERVICE1,...] <-a|--address VIP> <-n|--notify {master|backup|falut}>"
echo "Usage: notify.sh -h|--help"
}
ParseOptions() {
local I=1;
if [ $# -gt 0 ]; then
while [ $I -le $# ]; do
case $1 in
-s|--service)
[ $# -lt 2 ] && return 3
serviceflag=1
services=(`echo $2|awk -F"," '{for(i=1;i<=NF;i++) print $i}'`)
shift 2 ;;
-h|--help)
helpflag=1
return 0
shift
;;
-a|--address)
[ $# -lt 2 ] && return 3
addressflag=1
vip=$2
shift 2
;;
-m|--mode)
[ $# -lt 2 ] && return 3
mode=$2
shift 2
;;
-n|--notify)
[ $# -lt 2 ] && return 3
notifyflag=1
notify=$2
shift 2
;;
*)
echo "Wrong options..."
Usage
return 7
;;
esac
done
return 0
fi
}
#workspace=$(dirname $0)
RestartService() {
if [ ${#@} -gt 0 ]; then
for I in $@; do
if [ -x /etc/rc.d/init.d/$I ]; then
/etc/rc.d/init.d/$I restart
else
echo "$I is not a valid service..."
fi
done
fi
}
StopService() {
if [ ${#@} -gt 0 ]; then
for I in $@; do
if [ -x /etc/rc.d/init.d/$I ]; then
/etc/rc.d/init.d/$I stop
else
echo "$I is not a valid service..."
fi
done
fi
}
Notify() {
mailsubject="`hostname` to be $1: $vip floating"
mailbody="`date '+%F %H:%M:%S'`, vrrp transition, `hostname` changed to be $1."
echo $mailbody | mail -s "$mailsubject" $contact
}
# Main Function
ParseOptions $@
[ $? -ne 0 ] && Usage && exit 5
[ $helpflag -eq 1 ] && Usage && exit 0
if [ $addressflag -ne 1 -o $notifyflag -ne 1 ]; then
Usage
exit 2
fi
mode=${mode:-mb}
case $notify in
'master')
if [ $serviceflag -eq 1 ]; then
RestartService ${services[*]}
fi
Notify master
;;
'backup')
if [ $serviceflag -eq 1 ]; then
if [ "$mode" == 'mb' ]; then
StopService ${services[*]}
else
RestartService ${services[*]}
fi
fi
Notify backup
;;
'fault')
Notify fault
;;
*)
Usage
exit 4
;;
esac

(5).给脚本增加执行权限
[root@slave keepalived]# chmod +x notify.sh

(6).将master上脚本复制到slave上
[root@slave keepalived]# scp -p notify.sh root@192.168.18.207:/etc/keepalived/

(7).测试一下脚本
[root@slave keepalived]# ./notify.sh -h
Usage: notify.sh [-m|--mode {mm|mb}] [-s|--service SERVICE1,...] <-a|--address VIP> <-n|--notify {master|backup|falut}>
Usage: notify.sh -h|--help
[root@slave keepalived]# ./notify.sh --help
Usage: notify.sh [-m|--mode {mm|mb}] [-s|--service SERVICE1,...] <-a|--address VIP> <-n|--notify {master|backup|falut}>
Usage: notify.sh -h|--help
[root@slave keepalived]# ./notify.sh -m mb -a 1.1.1.1 -n master

(8).查看一下邮件

注,大家可以看到成功收到邮件,测试成功。在模拟故障时先重启一下keepalived服务。
(9).模拟故障
[root@master keepalived]# ip addr show #查看一下VIP
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:4b:a1:85 brd ff:ff:ff:ff:ff:ff
inet 192.168.18.208/24 brd 192.168.18.255 scope global eth0
inet 192.168.18.200/32 scope global eth0
inet6 fe80::20c:29ff:fe4b:a185/64 scope link
valid_lft forever preferred_lft forever
[root@master keepalived]# touch down #进入维护模式
[root@master keepalived]# ll
总用量 8
-rw-r--r-- 1 root root 0 8月 22 14:39 down
-rw-r--r-- 1 root root 1543 8月 22 14:04 keepalived.conf
-rwxr-xr-x 1 root root 2516 8月 22 14:15 notify.sh
[root@master keepalived]# ip addr show #再次查看VIP
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:4b:a1:85 brd ff:ff:ff:ff:ff:ff
inet 192.168.18.208/24 brd 192.168.18.255 scope global eth0
inet6 fe80::20c:29ff:fe4b:a185/64 scope link
valid_lft forever preferred_lft forever
[root@slave keepalived]# ip addr show #大家可以看到VIP成功移动到slave上
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:f9:e6:26 brd ff:ff:ff:ff:ff:ff
inet 192.168.18.207/24 brd 192.168.18.255 scope global eth0
inet 192.168.18.200/32 scope global eth0
inet6 fe80::20c:29ff:fef9:e626/64 scope link
valid_lft forever preferred_lft forever

(10).查看一下邮件

注,大家可以看到,主备切换时,会发送邮件报警,好了到这里所有演示全部完成。希望大家有所收获^_^……

linux
相关资讯       keepalived  HA集群  Linux高可用 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款