前言:
在部署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…要多熟悉配置文件的各个配置项的功能和作用。。多细心观察