
点击蓝字关注我们
本文提供了配置 EFM 与 PgPool 集成以实现应用程序高可用性的信息和示例。PgPool 将以 Watchdog 模式管理 VIP,EDB 支持的架构至少需要三个 PgPool 节点,而 EFM 处理流式复制并执行 PCP 命令以在每个 PgPool 节点上附加或分离 Postgres 后端节点。
配置要求
在配置 EFM 和 PgPool 之间的集成之前,请确保您已设置 PgPool 节点、在每个 EFM 节点上安装了 PCP 命令,并在所有 PgPool 节点上配置了Watchdog模式。
EDB 支持的架构至少需要三个 EFM 节点和三个 PgPool 节点,每个 EFM 和 PgPool 节点位于不同的主机上。
PgPool设置
PgPool 节点必须在 EFM 节点之前配置。如果先配置 EFM,则在您重新启动服务以应用新的 PgPool 集成设置后,它将无法启动,因为 EFM 将无法正确执行 PCP 命令,从而导致在journalctl里出现以下错误。
例子:
efm : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/edb/efm-4.9/bin/efm_pgpool_functions watchdog etc/edb/efm-4.9/testcluster.properties
为了使该架构正常工作,必须禁用 Postgres 后端上的 PgPool 健康检查和故障转移操作,因为这些可能与 EFM 健康检查相冲突,并可能导致后端被错误分离。
health_check_period = 0failover_command = ''failback_command = ''failover_on_backend_error = offfailover_on_backend_shutdown = off
即使禁用健康检查,仍然可以通过正确配置以下设置来启用流复制检查:
sr_check_period、sr_check_user、sr_check_password和sr_check_database。
建议将以下参数设置为较低的值,例如10秒(默认为5分钟),以便允许PgPool快速检测新的主服务器并重置连接:
search_primary_node_timeout = 10
EFM 设置
EFM 必须能够在没有密码的情况下运行 PCP 命令。确保.pcppass文件存在且具有0600权限(最好位于 OS 用户的主目录中)并且由运行实例的用户拥有(通常postgres用于 PostgreSQL或enterprisedb用于EPAS)。
然后,配置以下设置:
pgpool.enable:启用PCP命令和PgPool集成;
pcp.user:在pip.conf文件中配置的PCP用户;
pcp.host:PgPool设置中配置的VIP delegate_ip;
pcp.port:PgPool设置中配置的端口号pcp_port;
pcp.pass.file:文件在 EFM 主机上的完整路径.pcppass。此文件应该可由 OS 用户postgres或enterprisedb访问;
pgpool.bin:PCP 命令所在的目录,通常在/usr/bin/(用于 PCP 包安装)或/usr/edb/pgpool4.5/bin/(如果与 EFM 共享同一主机,则用于 EDB PgPool 安装)。
例:
pgpool.enable=truepcp.user=pcpuserpcp.host=192.168.1.249pcp.port=9898pcp.pass.file=/var/lib/edb/.pcppasspgpool.bin=/usr/bin/
以下列表显示了 EFM 使用的所有 PCP 命令:
pcp_node_count
pcp_node_info
pcp_attach_node
pcp_detach_node
pcp_watchdog_info
一旦发生故障转移或切换,主节点应在efm cluster-status和SHOW POOL_NODES的输出中正确反映。
切换示例
1.在 EFM 中检查集群状态,并验证该节点192.168.1.100当前是否为主节点。
/usr/edb/efm-4.9/bin/efm cluster-status efmCluster Status: efmAgent Type Address DB VIP----------------------------------------------------------------Primary 192.168.1.100 UPStandby 192.168.1.101 UPStandby 192.168.1.102 UPAllowed node host list:192.168.1.101 192.168.1.100 192.168.1.102Membership coordinator: 192.168.1.101Standby priority host list:192.168.1.101 192.168.1.102Promote Status:DB Type Address WAL Received LSN WAL Replayed LSN Info---------------------------------------------------------------------------Primary 192.168.1.100 0/60379A0Standby 192.168.1.101 0/60379A0 0/60379A0Standby 192.168.1.102 0/60379A0 0/60379A0Standby database(s) in sync with primary. It is safe to promote.
2.检查使用 VIP 作为主机的 PgPool 节点,并确认192.168.1.100是主节点,如 EFM 中所示。
psql -p 9999 -h 192.168.1.249 -U enterprisedb -d postgres -c 'SHOW POOL_NODES;'node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change---------+---------------+------+--------+-----------+-----------+---------+---------+------------+-------------------+-------------------+-------------------+------------------------+---------------------0 | 192.168.1.100 | 5444 | up | unknown | 0.333333 | primary | unknown | 0 | false | 0 | | | 2024-11-13 09:39:131 | 192.168.1.101 | 5444 | up | unknown | 0.333333 | standby | unknown | 0 | true | 0 | | | 2024-11-13 09:39:132 | 192.168.1.102 | 5444 | up | unknown | 0.333333 | standby | unknown | 0 | false | 0 | | | 2024-11-13 09:39:13(3 rows)
3.执行 EFM 切换。
/usr/edb/efm-4.9/bin/efm promote efm -switchoverPromote/switchover command accepted by local agent. Proceeding with promotion and will recon
4.切换完成后,再次检查 EFM 集群以确认192.168.1.101现在是主节点。
/usr/edb/efm-4.9/bin/efm cluster-status efmCluster Status: efmAgent Type Address DB VIP----------------------------------------------------------------Standby 192.168.1.100 UPPrimary 192.168.1.101 UPStandby 192.168.1.102 UPAllowed node host list:192.168.1.101 192.168.1.100 192.168.1.102Membership coordinator: 192.168.1.101Standby priority host list:192.168.1.100 192.168.1.102Promote Status:DB Type Address WAL Received LSN WAL Replayed LSN Info---------------------------------------------------------------------------Primary 192.168.1.101 0/6037B68Standby 192.168.1.100 0/6037B68 0/6037B68Standby 192.168.1.102 0/6037B68 0/6037B68Standby database(s) in sync with primary. It is safe to promote.
5.再次检查 PgPool 以确认主节点现在反映了 EFM 集群中更新后的主节点,即192.168.1.101。
psql -p 9999 -h 192.168.1.249 -U enterprisedb -d postgres -c 'SHOW POOL_NODES;'node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change---------+---------------+------+--------+-----------+-----------+---------+---------+------------+-------------------+-------------------+-------------------+------------------------+---------------------0 | 192.168.1.100 | 5444 | up | unknown | 0.333333 | standby | unknown | 0 | false | 0 | | | 2024-11-13 10:30:161 | 192.168.1.101 | 5444 | up | unknown | 0.333333 | primary | unknown | 0 | false | 0 | | | 2024-11-13 10:30:162 | 192.168.1.102 | 5444 | up | unknown | 0.333333 | standby | unknown | 0 | true | 0 | | | 2024-11-13 09:39:13(3 rows)
如果所有配置正确,Watchdog 集群中的所有 PgPool 节点都将反映与 EFM 集群相同的主节点。
关于公司
感谢您关注新智锦绣科技(北京)有限公司!作为 Elastic 的 Elite 合作伙伴及 EnterpriseDB 在国内的唯一代理和服务合作伙伴,我们始终致力于技术创新和优质服务,帮助企业客户实现数据平台的高效构建与智能化管理。无论您是关注 Elastic 生态系统,还是需要 EnterpriseDB 的支持,我们都将为您提供专业的技术支持和量身定制的解决方案。
欢迎关注我们,获取更多技术资讯和数字化转型方案,共创美好未来!
![]() | ![]() |
Elastic 微信群 | EDB 微信群 |

发现“分享”和“赞”了吗,戳我看看吧






