首先,我使用此设置postgres-docker-cluster,在故障转移期间一切正常,我停止主设备和slave1取代它,但如果我重新打开主设备我不确定如何再次提升到掌握,我会欣赏正确方向的任何指针,我是否需要手动推广它?对不起,我对这个概念很新(ha)。 此泊坞窗使用 repmgr , pgpool2 和 postgre 9.5 。
码头工人的一些信息
答案 0 :(得分:1)
所以我想出如何解决问题,
手动创建容器
主
docker run \
-e INITIAL_NODE_TYPE='master' \
-e NODE_ID=1 \
-e NODE_NAME='node1' \
-e CLUSTER_NODE_NETWORK_NAME='pgmaster' \
-e POSTGRES_PASSWORD='monkey_pass' \
-e POSTGRES_USER='monkey_user' \
-e POSTGRES_DB='monkey_db' \
-e CLUSTER_NODE_REGISTER_DELAY=5 \
-e REPLICATION_DAEMON_START_DELAY=120 \
-e CLUSTER_NAME='pg_cluster' \
-e REPLICATION_DB='replication_db' \
-e REPLICATION_USER='replication_user' \
-e REPLICATION_PASSWORD='replication_pass' \
-v cluster-archives:/var/cluster_archive \
-p 5432:5432 \
--net mynet \
--net-alias pgmaster \
--name pgmastertest \
paunin/postgresql-cluster-pgsql
从
docker run \
-e INITIAL_NODE_TYPE='standby' \
-e NODE_ID=2 \
-e NODE_NAME='node2' \
-e REPLICATION_PRIMARY_HOST='pgmaster' \
-e CLUSTER_NODE_NETWORK_NAME='pgslave1' \
-e REPLICATION_UPSTREAM_NODE_ID=1 \
-v cluster-archives:/var/cluster_archive \
-p 5441:5432 \
--net mynet \
--net-alias pgslave1 \
--name pgslavetest \
paunin/postgresql-cluster-pgsql
Pgpool
docker run \
-e PCP_USER='pcp_user' \
-e PCP_PASSWORD='pcp_pass' \
-e PGPOOL_START_DELAY=120 \
-e REPLICATION_USER='replication_user' \
-e REPLICATION_PASSWORD='replication_pass' \
-e SEARCH_PRIMARY_NODE_TIMEOUT=5 \
-e DB_USERS='monkey_user:monkey_pass' \
-e BACKENDS='0:pgmaster:5432:1:/var/lib/postgresql/data:ALLOW_TO_FAILOVER,1:pgslave1::::' \
-p 5430:5432 \
-p 9898:9898 \
--net mynet \
--net-alias pgpool \
--name pgpooltest \
paunin/postgresql-cluster-pgpool
BACKENDS='0:pgmaster:5432:1:/var/lib/postgresql/data:ALLOW_TO_FAILOVER,1:pgslave1::::' \
上的你可以为pgppool添加更多的奴隶
docker run \
-e INITIAL_NODE_TYPE='standby' \
-e NODE_ID=3 \
-e NODE_NAME='node1' \
-e REPLICATION_PRIMARY_HOST='pgslave1' \
-e CLUSTER_NODE_NETWORK_NAME='pgmaster' \
-e REPLICATION_UPSTREAM_NODE_ID=2 \
-v cluster-archives:/var/cluster_archive \
-p 5432:5432 \
--net mynet \
--net-alias pgmaster \
--name pgmastertest3 \
paunin/postgresql-cluster-pgsql
在以下几行
-e REPLICATION_PRIMARY_HOST='pgslave1' \
确保您指向新主控的别名(pgslave1)。
-e REPLICATION_UPSTREAM_NODE_ID=2 \
确保您指向新的主节点id(2)。
-e NODE_ID=3 \
确保该表 repl_nodes 上不存在此ID。
--net-alias pgmaster \
你可以使用旧主人的那个,或者使用你已经在pgpool BACKENDS='0:pgmaster:5432:1:/var/lib/postgresql/data:ALLOW_TO_FAILOVER,1:pgslave1::::' \
上添加的那个,否则如果新主人失败,那么repmgr将无法恢复它。
它是一个小手册,但它可以满足我的需要,那就是为新主人添加新的奴隶。
答案 1 :(得分:0)
当 Master 失败时,PostgreSQL集群会从stanby节点中选择另一个master(基于集群中的节点权重)。因此,当前主人终于恢复生机时,群集仍然忠于它的当前主人,但是前主人员在群集中重新启动,但这次是作为待机。所有这些都完全由PostgreSQL管理,而不是Pgpool。
所以您期望的是,如果新主服务器(前备用服务器)失败(或扩展为0),则群集将故障转移到前主服务器并再次选举它作为领导者,当备用数据库再次按比例放大时,它将作为备用数据库加入并恢复正常。那就是完全 PostgreSQL集群会做什么。
但很可能Pgpool服务会在那一刻失败,因为每当一个节点失败时,Pgpool会将节点状态标记为 DOWN ,即使该节点恢复生效,也不会< / strong>通知pgpool,您的流量无法到达该节点。
所以如果你使用PCP命令检查恢复的节点状态 - 恢复后 - 在pgpool容器上:
pcp_node_info -U pcp_user -h localhost -n 1 # master node id
pgmaster 5432 down 1
所以你需要做的是re-attach使用以下方法手动将曾经倒下的节点回到Pgpool:
pcp_attach_node -U pcp_user -h localhost -n 1 # master node id
--- executed successfully ---
pcp_node_info -U pcp_user -h localhost -n 1 # master node id
pgmaster 5432 up 1
此时,pgpool再次识别前主节点,并可以将流量引导到它。
之后每当您删除(扩展为0) ex-standby (现在为主)服务时,整个解决方案(PostgreSQL - Pgpool)都会故障转移到实际的主服务器,现在您可以启动备用服务器再次将它重新附加到pgpool。
P.S。停机时间只是pgpool的故障转移停机时间,而pgpool服务将保持其原始配置,没有任何重新添加任何内容(除了希望失败的PostgresQL节点:D)。