关于repmgr+vip的部分改进

Posted 李石岩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于repmgr+vip的部分改进相关的知识,希望对你有一定的参考价值。

以下链接是之前配置做的部署。

​https://blog.51cto.com/lishiyan/2595607​

repmgr这个在进行配置的时候,发现数据库负载较高(当然因为上边有很多组件),repmgr这个中间件,有时候也会导致断掉连接,因此我需要对该配置文件进行优化。


主要优化点就是防止意外提升到备库。

以下是修改repmgr_promote.sh文件

-bash-4.2$ more repmgr_promote.sh

#!/bin/bash


#发生故障后,数据库进行failover的脚本

function failover()

   echo "failover开始切换" >> /var/lib/pgsql/repmgr.log

   /usr/pgsql-11/bin/repmgr standby promote -f /var/lib/pgsql/repmgr.conf --log-to-file >> /var/lib/pgsql/repmgr.log

   echo "failover已经切换完毕" >> /var/lib/pgsql/repmgr.log


#删除对端VIP的脚本

function delete_vip()


   /bin/ssh -t postgres@10.10.10.232 "/bin/sudo /usr/sbin/ip addr del 10.10.10.111/24 dev ens37"  >> /var/lib/pgsql/repmgr.log


#在本机上添加vip的脚本

function add_vip()

   /bin/sudo /usr/sbin/ip addr add 10.10.10.111/24 dev ens37  >>/var/lib/pgsql/repmgr.log


#检查是否能够telnet通,如果不通,则进行后续failover操作。

result=`echo -e "\\n" | telnet 10.10.10.232 5432 2>/dev/null | grep Connected | wc -l`


# 如果仍然能够telnet通,则停止后续操作

# 如果不能telnet通,则进行后续failover操作。

if [ $result -eq 1 ]; then

      echo "数据库仍然能够提供服务,推出" >> /var/lib/pgsql/repmgr.log

      exit 0

else

      echo "["`date "+%Y-%m-%d %H:%M:%S"`"]: 删除 VIP in 232 开始操作中" >> /var/lib/pgsql/repmgr.log

      delete_vip

      echo "["`date "+%Y-%m-%d %H:%M:%S"`"]: 删除 VIP in 232 完成" >> /var/lib/pgsql/repmgr.log

      echo "现在端口已经不通,开始进行failover." >> /var/lib/pgsql/repmgr.log

      echo "["`date "+%Y-%m-%d %H:%M:%S"`"]: promote start" >> /var/lib/pgsql/repmgr.log

      failover    

      echo "["`date "+%Y-%m-%d %H:%M:%S"`"]: promote finish" >> /var/lib/pgsql/repmgr.log

fi


# 检查数据库状态 ,备库变成主库后进行操作。


standby_flg=`psql -p 5432 -U repmgr -h localhost -At -c "SELECT pg_is_in_recovery();"`

##if [ $? -eq 0 ]; then

if [ $standby_flg == f ]; then

    echo "数据库发生切换,并且提升为主库,开始对VIP进行源端删除"

    echo "["`date "+%Y-%m-%d %H:%M:%S"`"]: 删除 VIP in 232 开始操作中" >> /var/lib/pgsql/repmgr.log

      delete_vip

    echo "["`date "+%Y-%m-%d %H:%M:%S"`"]: 删除 VIP in 232 完成" >> /var/lib/pgsql/repmgr.log

    echo "["`date "+%Y-%m-%d %H:%M:%S"`"]: 添加 VIP 开始操作中" >> /var/lib/pgsql/repmgr.log

      add_vip

    echo "["`date "+%Y-%m-%d %H:%M:%S"`"]: 添加 VIP 完成" >> /var/lib/pgsql/repmgr.log

    exit 0


elif [ $standby_flg == t ];

    then

     echo e "`date +%F\\ %T`: 数据库提升失败,该数据库仍然为备库, 推出!\\n" >>/var/lib/pgsql/repmgr.log

     exit 0

fi

通过这个文件修改以后,部分解决了数据库vip验证的问题。

以上是关于关于repmgr+vip的部分改进的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL高可用套件repmgr+pgpool

PostgreSQL高可用套件repmgr+pgpool

记录一次PG数据库宕机的REPMGR切换

postgresql repmgr (MHA)

《持续集成:软件质量改进和风险降低之道》

repmgr自动故障转移的参数配置