1,在主机A上编写keepalived脚本
[root@ c7-41 ~] vim /root/keep_master.sh
#!/bin/bash
systemctl stop firewalld
setenforce 0 &> /dev/null
yum -y install keepalived
echo "正在安装keepalived服务,请稍后......"
rpm -qa |grep keepalived &> /dev/null
if [ $? -eq 0 ];then
echo "keepalived安装成功"
else
echo "安装失败,请处理!"
fi
cat>/etc/keepalived/keepalived.conf<<\EOF
! Configuration File for keepalived
global_defs {
router_id 10.0.0.41 #运行keepalived的机器的一个标识,这里设置的是本机ip
script_user root
enable_script_security
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_port.sh 80" #这里通过脚本监测
interval 2 #脚本执行间隔,每2s检测一次
weight -30 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级
}
vrrp_instance VI_1 { #keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管
state BACKUP #指定keepalived的角色
interface ens33 #指定监测网络的接口
virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,双机必须是一致的
priority 100 #定义优先级,数字越大,优先级越高
mcast_src_ip 10.0.0.41 # 发送多播数据包时的源IP地址
nopreempt #不抢占
advert_int 1 #指定负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置验证类型和密码。双机必须一样
auth_type PASS #设置vrrp验证类型,主要有PASS和AH两种
auth_pass 1111 #设置vrrp验证密码,双机必须一样
}
track_script { #执行监控的服务。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!
chk_nginx #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
}
virtual_ipaddress { #VRRP HA 虚拟地址
10.0.0.200
}
}
echo ""
cat>/etc/keepalived/check_port.sh<<\EOF
#!/bin/bash
CHK_PORT=$1
if [ -n "$CHK_PORT" ];then
PORT_PROCESS=`ss -lntp|grep $CHK_PORT|wc -l`
if [ $PORT_PROCESS -eq 0 ];then
echo "Port $CHK_PORT Is Not Used,End."
systemctl stop keepalived.service
fi
else
echo "Check Port Cant Be Empty!"
fi
EOF
echo ""
chmod +x /etc/keepalived/check_port.sh
sed -i 's/KillMode/#&/' /usr/lib/systemd/system/keepalived.service #修改keepalived启动脚本
systemctl daemon-reload
systemctl enable keepalived.service
systemctl start keepalived.service
2,在主机A上编写执行脚本
[root@ c7-41 ~] vim keep_scp.sh
#!/bin/bash
chmod +x /root/keep_master.sh #给keepalived脚本权限
./source /root/keep_master.sh #执行keepalived脚本
yum -y install sshpass &>/dev/null #安装免密登陆工具
cp -a keep_master.sh keep_backup.sh #复制keepalived脚本
sed -i 's/41/42/' keep_backup.sh #修改脚本参数
sed -i 's/100/90/' keep_backup.sh #修改脚本参数
sshpass -p 123456 scp keep_backup.sh root@10.0.0.42:/root &> /dev/null #传输脚本至主机B上