天天看点

故障集---Postgresql + keepalived 主备切换故障

前言:

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