#!/bin/bash
whichday=`date "+%w"`
v_param=$#
#判断参数个数
if [ $v_param -ge 3 ];then
echo "Invalid argument!! E.g sh pg-cluster-switchover.sh 'paas|bi' vlnx191001.xxx.cn (pg-slave-node)"
exit 1
fi
v_wthich_type=$1
v_slave_hostname=$2
v_valid=''
v_short_hostname=''
v_short_hostname=`echo $v_slave_hostname | awk -F '.' '{print $1}'`
v_p_s=''
v_p_s=`echo $v_slave_hostname | awk -F '0' '{print $2}'`
echo Server: $v_slave_hostname
v_primary_hostname=''
v_version=''
log_path=''
#获取Postgres服务版本
v_version_str=`psql -h$v_slave_hostname -Uzhaowz -d postgres -c "select version()" |grep "PostgreSQL 9"`
if [ -n "$v_version_str" ];then
v_version=9.6
log_path=pg_log
fi
if [ -z "$v_version" ];then
v_version_str=`psql -h$v_slave_hostname -Uzhaowz -d postgres -c "select version()" |grep "PostgreSQL 10"`
if [ -n "$v_version_str" ];then
v_version=10
log_path=log
fi
fi
#校验服务器域名地址和业务机器类别是否正确
if [ "${v_wthich_type}" == 'paas' ];then
if [ "${v_version}" == '9.6' ];then
v_valid=`ssh $v_slave_hostname /usr/pgsql-$v_version/bin/repmgr -f /etc/repmgr/$v_version/repmgr.conf cluster show | grep master | grep $v_short_hostname`
elif [ "${v_version}" == '10' ];then
v_valid=`ssh $v_slave_hostname /usr/pgsql-$v_version/bin/repmgr -f /etc/repmgr/$v_version/repmgr.conf cluster show | grep primary | grep $v_short_hostname`
fi
if [ -n "$v_valid" ];then
echo "Invalid server $v_slave_hostname"
exit 1
else
if [ "${v_p_s}" == '191' ];then
v_primary_hostname=`echo $v_slave_hostname | sed 's/vlnx191/vlnx192/g'`
elif [ "${v_p_s}" == '192' ];then
v_primary_hostname=`echo $v_slave_hostname | sed 's/vlnx192/vlnx191/g'`
else
echo "Business machine category error!"
exit 1
fi
fi
elif [ "${v_wthich_type}" == 'bi' ];then
if [ "${v_version}" == '9.6' ];then
v_valid=`ssh $v_slave_hostname /usr/pgsql-$v_version/bin/repmgr -f /etc/repmgr/$v_version/repmgr.conf cluster show | grep master | grep $v_short_hostname`
elif [ "${v_version}" == '10' ];then
v_valid=`ssh $v_slave_hostname /usr/pgsql-$v_version/bin/repmgr -f /etc/repmgr/$v_version/repmgr.conf cluster show | grep primary | grep $v_short_hostname`
fi
if [ -n "$v_valid" ];then
echo "Invalid server $v_slave_hostname"
exit 1
else
if [ "${v_p_s}" == '193' ];then
v_primary_hostname=`echo $v_slave_hostname | sed 's/vlnx193/vlnx194/g'`
elif [ "${v_p_s}" == '194' ];then
v_primary_hostname=`echo $v_slave_hostname | sed 's/vlnx194/vlnx193/g'`
else
echo "Business machine category error!"
exit 1
fi
fi
else
echo "Business machine category error!"
exit 1
fi
#获取当前周几
if [ "${whichday}" == '1' ];then
filename=postgresql-Mon.log
elif [ "${whichday}" == '2' ];then
filename=postgresql-Tue.log
elif [ "${whichday}" == '3' ];then
filename=postgresql-Wed.log
elif [ "${whichday}" == '4' ];then
filename=postgresql-Thu.log
elif [ "${whichday}" == '5' ];then
filename=postgresql-Fri.log
elif [ "${whichday}" == '6' ];then
filename=postgresql-Sat.log
elif [ "${whichday}" == '0' ];then
filename=postgresql-Sun.log
fi
#Switchover
v_switchover_succ=''
pv_vip=''
if [ "${v_version}" == '10' ];then
ssh $v_slave_hostname " sudo su - postgres -c 'cat /dev/null > /var/log/repmgr/repmgr.log'"
ssh $v_primary_hostname " sudo su - postgres -c 'cat /dev/null > /var/log/repmgr/repmgr.log'"
pv_vip=`ssh $v_primary_hostname sudo ifconfig eth3 | grep inet | awk '{print $2}' | cut -d':' -f2`
ssh $v_slave_hostname "sudo su - postgres -c '/usr/pgsql-10/bin/repmgr -t --log-to-file -f /etc/repmgr/10/repmgr.conf standby switchover'"
v_switchover_succ=`ssh $v_slave_hostname sudo cat /var/log/repmgr/repmgr.log | grep 'STANDBY SWITCHOVER has completed successfully'`
ssh $v_slave_hostname /usr/pgsql-10/bin/repmgr -f /etc/repmgr/10/repmgr.conf cluster show
elif [ "${v_version}" == '9.6' ];then
ssh $v_slave_hostname " sudo su - postgres -c 'cat /dev/null > /var/log/repmgr/repmgr-9.6.log'"
ssh $v_primary_hostname " sudo su - postgres -c 'cat /dev/null > /var/log/repmgr/repmgr-9.6.log'"
pv_vip=`ssh $v_primary_hostname sudo ifconfig eth3 | grep inet | awk '{print $2}' | cut -d':' -f2`
ssh $v_slave_hostname "sudo su - postgres -c '/usr/pgsql-9.6/bin/repmgr -t --log-to-file -f /etc/repmgr/9.6/repmgr.conf standby switchover'"
v_switchover_succ=`ssh $v_slave_hostname sudo cat /var/log/repmgr/repmgr-9.6.log | grep 'switchover was successful'`
ssh $v_slave_hostname /usr/pgsql-9.6/bin/repmgr -f /etc/repmgr/9.6/repmgr.conf cluster show
fi
if [ -z "$v_switchover_succ" ];then
if [ "${v_version}" == '10' ];then
echo `ssh $v_slave_hostname sudo cat /var/log/repmgr/repmgr.log `
elif [ "${v_version}" == '9.6' ];then
echo `ssh $v_slave_hostname sudo cat /var/log/repmgr/repmgr-9.6.log`
fi
exit
fi
if [ -n "$v_switchover_succ" ];then
v_true_false=''
sv_vip=''
s_vip=''
v_networkmanager=''
v_ethx=''
pv_device=''
sv_device=''
pv_device=`ssh $v_primary_hostname sudo nmcli connection show 'Wired\ connection\ 3' | grep 'connection.interface-name:' | awk '{print $2}'`
sv_device=`ssh $v_slave_hostname sudo nmcli connection show 'Wired\ connection\ 3' | grep 'connection.interface-name:' | awk '{print $2}'`
if [ "${pv_device}" != 'eth3' ];then
pv_device=`ssh $v_primary_hostname sudo nmcli connection show 'Wired\ connection\ 3' | grep 'DEVICES:' | awk '{print $2}'`
if [ "${pv_device}" != 'eth3' ];then
pv_device='eth3'
fi
fi
if [ "${sv_device}" != 'eth3' ];then
sv_device=`ssh $v_slave_hostname sudo nmcli connection show 'Wired\ connection\ 3' | grep 'DEVICES:' | awk '{print $2}'`
if [ "${sv_device}" != 'eth3' ];then
sv_device='eth3'
fi
fi
pv_device_name='Wired\ connection\ 3'
sv_device_name='Wired\ connection\ 3'
p_dev_name='Wired connection 3'
s_dev_name='Wired connection 3'
#主库禁止eth3自动激活,关闭VIP
if [ -n "$pv_device" ];then
ssh $v_primary_hostname "sudo nmcli connection modify '$p_dev_name' connection.autoconnect no"
v_true_false=`ssh $v_primary_hostname sudo nmcli con show 'Wired\ connection\ 3' |grep 'connection.autoconnect:' | grep no`
echo 1234
if [ -n "$v_true_false" ];then
echo 9999
ssh $v_primary_hostname "sudo nmcli connection down '$p_dev_name'"
fi
fi
#从库激活VIP(临时)
if [ -n "$sv_device" ];then
ssh $v_slave_hostname "sudo nmcli connection modify '$s_dev_name' connection.autoconnect yes"
sv_vip=`ssh $v_slave_hostname sudo nmcli con show 'Wired\ connection\ 3' | grep 'ipv4.addresses:' | awk '{print $2}'`
s_vip=`ssh $v_slave_hostname sudo nmcli con show 'Wired\ connection\ 3' | grep 'ipv4.addresses:' | awk '{print $2}' | awk -F '/' '{print $1}'`
ssh $v_slave_hostname "sudo nmcli connection up '$s_dev_name'"
echo 2345
v_ethx=`ssh $v_slave_hostname sudo ifconfig | grep $sv_device | awk -F ':' '{print $1}'`
if [ -n "$v_ethx" ];then
echo 3456
ssh $v_slave_hostname "sudo nmcli connection modify '$s_dev_name' ipv4.addresses $sv_vip ipv4.method manual"
else
if [ -n "$s_vip" ];then
echo 4567
ssh $v_slave_hostname sudo ifconfig $sv_device up
ssh $v_slave_hostname sudo ifconfig $sv_device $s_vip netmask 255.255.0.0 up
else
echo 5678
ssh $v_slave_hostname sudo ifconfig $sv_device up
ssh $v_slave_hostname sudo ifconfig $sv_device $pv_vip netmask 255.255.0.0 up
fi
fi
v_networkmanager=`ssh $v_slave_hostname sudo systemctl status NetworkManager |grep 'Active: active (running)'`
if [ -z "$v_networkmanager" ];then
ssh $v_slave_hostname sudo systemctl start NetworkManager
fi
fi
fi