Patroni有个很实用的功能,就是命令
patronictl.py -c patroni.yml pause
和
patronictl.py -c patroni.yml resume
前者暂停patroni,这样patroni就与postgresql/opengauss断开了联系,此时可以杀掉patroni进程,而postgresql/opengauss仍然在正常运行。
后者恢复patroni对postgresql/opengauss的管理。
这一功能在什么场景下实用呢?
例如,如果想利用patroni搭建postgresql/opengauss的主从关系,但是不想使用patroni管理集群,仍然保留主从关系,就可以先在各个节点上启动patroni,待建立起主从关系后,在任意节点执行patronictl.py -c patroni.yml pause,然后停掉(kill)patroni和etcd。
注意此时patroni的集群状态是“Maintenance mode:on”
这个状态存储在etcd的config键中:
[postgres@pg_154 patroni]$ ETCDCTL_API=2 etcdctl --endpoint http://127.0.0.1:12379 get /service/pg_cluster/config
{"loop_wait":10,"master_start_timeout":300,"maximum_lag_on_failover":1048576,"postgresql":{"parameters":{"max_connections":200,"max_prepared_transactions":200},"use_pg_rewind":false,"use_slots":true},"retry_timeout":10,"synchronous_mode":false,"ttl":30,"pause":true}
数据库进程仍然存在并正常运行。
此时postgresql/opengauss以patroni建立起的主从关系,正常运行。
如果稍后向让patroni管理postgresql/opengauss集群,则可以执行(现在各个节点启动patroni)
patronictl.py -c patroni.yml resume
这样patroni集群继续管理postgresql/opengauss集群,可以自动主备切换。