前言:
在部署postgresql + keepalived 高可用的時候,我們一般會在keepalived配置檔案中設定監測腳本來關聯postgresql服務,本來這也是個小問題,算是粗心造成的,不過也記錄一下吧
叢集配置
- 2台伺服器,做的postgresql 主從,同時在兩台伺服器上做了keepalived主備切換
- keepalived配置檔案如下(另一台為BACKUP,配置正常):
! Configuration File for keepalived
global_defs {
router_id LVS_3
script_user root
enable_script_security
}
vrrp_script chk_http_port {
script "/usr/local/bin/check_postgres.sh"
interval 2
weight -20
}
vrrp_instance VI_PG {
state MASTER
interface ens160
virtual_router_id 50
priority 101
advert_int 1
unicast_src_ip 192.168.230.128
unicast_peer {
192.168.230.122
}
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.230.100
}
track_script {
chk_http_port
}
}
- check_postgres.sh檢測腳本如下:
#!/bin/bash
count=`netstat -an|grep ":5432" | grep LISTEN| wc -l`
if [ "$count" == "0" ]; then
systemctl stop keepalived
fi
- 同時設定了crontab周期性執行check_postgres.sh
- 問題現象:
- keepalived 啟動一小會之後,會被check_postgres.sh監測腳本幹掉(但是主伺服器上PG服務是正常的)
- 解決:
- 很粗心的一個錯誤,keepalived中已設定了周期性執行腳本,而又設定了crontab周期性任務來執行檢測。因為重複觸發導緻的異常現象,隻要删除crontab的資訊即可。。。
小結
- emmm…要多熟悉配置檔案的各個配置項的功能和作用。。多細心觀察