linux VIP 自动切换虚拟IP

原理

基于ip addr自动设置虚拟IP

/usr/bin/sudo /sbin/ip addr add 192.168.0.110/24 dev enp0s3 
/usr/bin/sudo /sbin/ip addr del 192.168.0.110/24 dev enp0s3 

配置免密登录(依次配置所有节点)

su - postgres
ssh-keygen -t rsa
一路回车直到完成
--配置所有节点
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 postgres@192.168.0.92

注意添加权限

chmod u+x /usr/sbin/ip
chmod u+x /usr/sbin/arping
chmod u+s /sbin/ip

切换脚本如下

#!/bin/bash
  
set -o xtrace
PGCANDIDATES=(192.168.0.92 192.168.0.93 192.168.0.94 192.168.0.95)
# HOSTNAME=`hostname -i`
VIP=192.168.0.110
GW=192.168.1.1
DEVICE=enp0s3
STEP1="Remove the VIP on all nodes"
STEP2="Check if vip still online"
STEP3="Promte primary DB"
STEP4="Add vip on new primary DB"
STEP5="Clear ARP Cache"


###step1. Remove the VIP on all nodes
for candidate in "${PGCANDIDATES[@]}"; do
echo $candidate
ssh -p '22' postgres@$candidate -tt  "
ip addr del $VIP/24 dev $DEVICE
exit
"
done

####clear arp cache
/usr/bin/sudo /sbin/arping -I $DEVICE  -b -c 5 $GW
#/usr/bin/sudo /sbin/arping -I $DEVICE -s $VIP -b -c 5 $GW

#/usr/bin/sudo /sbin/arping -I enp0s3 -s 192.168.0.92 -b -c 5 192.168.1.1
#/usr/bin/sudo /sbin/arping -I enp0s3 -b -c 5 192.168.1.1



###step2.Check if vip still online
/usr/bin/sudo  /usr/bin/ping -c1 -w1 -t5 ${VIP}
if [ $? -eq 0 ]; then
    echo repmgr_promote_command.sh: ${STEP2} : ${VIP} failed !!!  
    exit 1
fi


###step4.Add vip on new primary DB
/usr/bin/sudo /sbin/ip addr add $VIP/24 dev $DEVICE
if [ $? -ne 0 ]; then
    echo repmgr_promote_command.sh: ${STEP4} on ${HOSTNAME} failed !!!  
    exit 1
fi


####step5.Clear arp cache
/usr/bin/sudo /sbin/arping -I $DEVICE -s $VIP -b -c 3 $GW
if [ $? -ne 0 ]; then
    echo repmgr_promote_command.sh: ${STEP5} on ${HOSTNAME} failed !!!  
    exit 1
fi

posted @ 2024-05-10 10:31  Hey,Coder!  阅读(46)  评论(0编辑  收藏  举报