集群准备
role | ip | PostgreSQL | Pgpool-II | port |
---|---|---|---|---|
master | 192.168.1.3 | 10.9 | 4.0.5 | 5432 |
slave | 192.168.1.2 | 10.9 | 4.0.5 | 5432 |
vip | 192.168.1.100 | – | – | – |
其中watchdog
端口9000
,pcp
端口9898
,psql
服务连接端口9999
查看集群节点状态 show pool_nodes;
1 | $ psql -p 9999 -h 192.168.1.100 -U postgres |
Pgpool服务挂了
vip
目前在master
端,先测试非vip端pgpool
服务不可用,再测试vip端pgpool
服务不可用。
非vip端pgpool不可用
停止pgpool
服务
1 | $ systemctl stop pgpool.service |
查看节点状态,服务未中断
1 | $ psql -p 9999 -h 192.168.1.100 -U postgres |
vip端pgpool不可用
停止pgpool
服务
1 | $ systemctl stop pgpool.service |
此时 非vip端的pgpool
会主动接管vip
继续对外提供服务
1 | ifconfig eth0:0 |
查看节点状态,服务被接管后,继续对外提供服务
1 | $ psql -p 9999 -h 192.168.1.100 -U postgres |
PostgreSQL挂了
standby不可用
停止postgresql
服务
1 | $ pg_ctl stop |
此时集群节点状态会发生变化,standby
节点变为down
,此时集群仍然可以继续对外提供服务。
1 | $ psql -p 9999 -h 192.168.1.100 -U postgres |
重新启动 standby
节点,模拟节点修复,重新将该节点加入集群
1 | $ pg_ctl start |
standby
重新加入集群后,状态变为up
,继续对外服务。
1 | $ psql -p 9999 -h 192.168.1.100 -U postgres |
primary不可用
当前 192.168.1.2
是 primary
1 | $ psql -p 9999 -h 192.168.1.100 -U postgres |
停止192.168.1.2
上面的 postgresql
服务
1 | $ pg_ctl stop |
此时查看节点状态,集群检查到 192.168.1.2
服务不可用后,自动切换 192.168.1.3
为 primary
,继续对外提供服务,此时集群可读写。
1 | $ psql -p 9999 -h 192.168.1.100 -U postgres |
修复节点 192.168.1.2
的服务,然后重新加入集群作为 standby
继续对外提供服务。如果主备时间线不同步,需要用 pg_rewind
命令修复时间线,然后再启动服务。
1 | $ mv recovery.done recovery.conf |
节点成功加入集群,其状态为 up
1 | $ psql -p 9999 -h 192.168.1.100 -U postgres |