postgresql+keepalived HA VIPドリフトを実現


!/bin/bash################################

Author: xgmin

## Version: 1.0
## Date:    20191121
################################

yum clean all&&yum repolistyum install vim tree-y#インストールkeepalived############################################mkdir-p/keepalived/scriptmkdir-p/var/log/keepalived#追加keepalived主従切替スクリプト###########################tee>/etc/keepalived/scriptcheck.sh <
#!/bin/bashVIP=ip a | grep 10.10.10.247 | wc -l#ライブラリから待機している状態かどうかを判断Standby_Wait=ps -ef | grep postgres | grep 'startup process' | wc -l#スレーブリンクマスターライブラリが正常かどうかを判断Standby_Primary=ps -ef | grep postgres | grep 'receiver' | wc -l#メインライブラリ接続スレーブライブラリが正常かどうかを判断するPrimary_Standby=ps -ef | grep postgres | grep 'sender' | wc -l#pgstgresqlポート番号が存在しない場合、メッセージをログに書き込みkeepalivedif[$(netstat-lntup|grep 5432|wc-l)-eq 0]を閉じます.thenecho "[$(date +"%F %T")] postgresql stop so vip stop">>/var/log/keepalived/check_pg.logsystemctl stop keepalived
Else#は主掛を判断し、vipが浮上し、if[$VIP-eq 1]&&[$Standby_Wait-eq 1]&&[$Standby_Primary-eq 0]&[$Standby_Primary-eq 0]を読み書きできるようになった.thensu - postgres -c "pg_ctl promote -D/var/lib/pgsql/9.6/data/"    echo "[$(date +"%F %T")] standby promote">>/var/log/keepalived/check_pg.logfi#は自分が主であることを判断し、連絡を失ったif[$VIP-eq 1]&[$Standby_Wait-eq 0]&&[$Standby_Primary-eq 0]&[$Primary_Standby-eq 0]&[$thensleep 5 && echo "[$(date +"%F %T")] can not find standby">>/var/log/keepalived/check_pg.logfifiEOFsleep 3chmod +x/etc/keepalived/script/pgsql_check.shyum install keepalived-y#keepalivedプロファイルの変更########################################################tee>/etc/keepalived/keepalived.conf global_defs {router_id PRO_PGSQL}
vrrp_script chk_pgsql_proxy {script "/etc/keepalived/script/pgsql_check.sh"interval 2weight -20}
vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 90priority 200advert_int 1nopreemptauthentication {auth_type PASSauth_pass 363747}virtual_ipaddress {10.10.10..247/24 dev eth0 label eth0:vip}track_script{chk_pgsql_proxy}}EOF#修正keepalivedログ##############sed-i'14 s#KEEPALIVED_OPTIONS="-D"#KEEPALIVED_OPTIONS="-D -d -S 0"#g'/etc/sysconfig/keepalivedsed -i '1 i/var/log/keepalived/keepalived.log'/etc/logrotate.d/syslogsed -i '42 i# keepalived'/etc/rsyslog.confsed -i '43 ilocal0./var/log/keepalived/keepalived.log'/etc/rsyslog.confsed -i '44 i.err;kern.debug;daemon.notice;local0.none/var/log/messages'/etc/rsyslog.confsed -i '45 i\'/etc/rsyslog.confsystemctl restart rsyslog