
点击蓝字关注我们
前面文章已经成功创建 PGD 集群,并通过 psql 和 pgd_cli 进行状态和一致性校验和 write leader 切换,有一种情况我们可能需要删除其中一个节点并清除配置,再重新创建加入集群,来验证 PGD 集群的可扩展性和一致性。如果成功,除了可以实现故障修复的功能,通过这种方式也可以实现集群的升级和节点扩展,对于理解 PGD 的架构和运维管理都会带来很大帮助。


测试删除和添加节点

1.1
删除node-2

我们这里主机名:host-1,host-2,host-3,对应pgd节点名node-1,node-2,node-3
操作前检查pgd节点状态
$ pgd nodes listNode Name | Group Name | Node Kind | Join State | Node Status-----------+------------+-----------+------------+-------------node-1 | group-1 | data | ACTIVE | Upnode-2 | group-1 | data | ACTIVE | Upnode-3 | group-1 | data | ACTIVE | Up
假设host-2节点出于某种原因遇到了一些问题。我们想重新配置它。 首先告诉集群的其余部分删除此节点。
$ pgd --dsn 'host=host-1 dbname=pgddb user=postgres' node node-2 partStarting a part node operation for node: node-2This may take some time, please wait...NOTICE: node node-2 has been removed from the BDR group
现在在host-2上,我们可以停止 Postgres,删除整个 Postgres 数据目录,然后重新运行 pgd node setup 命令。
$ pg_ctl -D var/lib/edb-pge/17/data -l $HOME/postgres.logfile stopwaiting for server to shut down.... doneserver stopped$ rm -rf $HOME/postgres.logfile var/lib/edb-pge/17/data
查询集群,确信node-2这个节点是不是已经不在集群里了。
postgres@host-2:~$ pgd nodes listNode Name | Group Name | Node Kind | Join State | Node Status-----------+------------+-----------+------------+-------------node-1 | group-1 | data | ACTIVE | Upnode-3 | group-1 | data | ACTIVE | Up
在host-2(node-2)上,停止 Postgres,删除整个 Postgres 数据目录,然后从上面重新运行 pgd node setup 命令。
$ pg_ctl -D var/lib/edb-pge/17/data -l $HOME/postgres.logfile stopwaiting for server to shut down.... doneserver stopped$ rm -rf $HOME/postgres.logfile var/lib/edb-pge/17/data

1.2
重新创建node-2

现在重建node-2
$ pgd node "node-2" setup \--dsn "host=host-2 dbname=pgddb user=postgres" \--listen-addr "host-2,localhost" \--pgdata var/lib/edb-pge/17/data1 \--cluster-dsn "host=host-1 dbname=pgddb user=postgres" \--cluster-name "pgd"--------The local node and remote node both are up and running. Attempting node group joinCreating database pgddbDatabase pgddb already existsCreating the bdr extensionExtension bdr already existsGranting bdr_superuser to postgresNOTICE: role "postgres" has already been granted membership in role "bdr_superuser" by role "postgres"Role bdr_superuser granted to postgresCreating node node-2Node node-2 created successfullyThe --group-name not specified. Fetching group name from remote nodeGroup group-1 already existsJoining node node-2 to group group-1Node node-2 joined to group group-1 successfullyVerifying postgres settings for node node-2Node node-2 added to the cluster successfullyWarning: pg_hba.conf has been configured with permissive access. Please check that the configuration is suitable for your use and compatible with your policies.Command executed successfully
再次查看集群节点列表:
postgres@host-2:~$ pgd --dsn "host=host-1 dbname=pgddb user=postgres" nodes listNode Name | Group Name | Node Kind | Join State | Node Status-----------+------------+-----------+------------+-------------node-1 | group-1 | data | ACTIVE | Upnode-2 | group-1 | data | ACTIVE | Upnode-3 | group-1 | data | ACTIVE | Up

1.3
检查PGD表的一致性

在节点 1 上,监控性能:
select * from bdr.node_replication_rates;
在节点 1 上,获取值列的总和(用于检查):
pgddb=# select COUNT(*),SUM(value) from quicktest;count | sum-------+----------10000 | 50236186(1 row)
在节点 2 上,获取值列的总和(用于检查):
select COUNT(*),SUM(value) from quicktest;count | sum-------+----------10000 | 50236186(1 row)
校对结果一致,确认host-2成功重新加入PGD节点。

1.4
延伸

通过上面的步骤,我们还可以使用此重建过程对集群进行滚动升级。从集群中删除节点,使用较新版本的 Postgres 和 PGD 预置新节点,并将其加入集群。对集群中的每个节点重复此作,直到所有节点都运行相同的较新版本的 Postgres 和 PGD。


PGD生产环境建议
在生产环境中部署 Postgres Distributed (PGD) 时,需要遵循许多最佳实践。这些做法有助于确保 PGD 集群的可靠性、性能和安全性。本节概述了在生产环境中部署 PGD 时要考虑的一些关键最佳实践。

2.1
CPU/内核大小

对于生产部署,EDB 建议每个 Postgres 数据节点至少有 4 个内核。见证节点不参与数据复制作,不必满足此要求。没有子组 Raft 一个核就足够了。使用子组 Raft 时,两个核心就足够了。
始终将逻辑备用数据库的大小与数据节点完全相同,以避免在节点升级时性能下降。
建议对特定性能要求进行详细基准测试,以根据实际的工作负载确定适当的大小。如有需要,EDB专业服务团队可提供帮助。
对于开发为目的,请勿为 Postgres 数据节点分配少于两个内核。Barman 节点的大小取决于数据库大小和数据更改率。
可以在虚拟机上或裸机部署模式下部署 Postgres 数据节点和 Barman 节点。但是,不要在同一物理硬件上的 VM 上部署多个数据节点,因为这会降低恢复能力。

2.2
时间和时区

EDB Postgres Distributed 旨在与多个时区的节点一起运行,从而实现真正的全球数据库集群。单个服务器不需要配置匹配的时区,但我们建议使用 log_timezone = UTC 来确保服务器日志更易于访问和对比。
通过使用 NTP 或其他解决方案同步服务器时钟。
时钟同步对于性能并不重要,就像其他一些解决方案一样。时钟偏差可能会影响源冲突检测,尽管 EDB Postgres Distributed 提供了用于报告和管理存在的任何偏差的控件。EDB Postgres Distributed 还提供行版本冲突检测,详见官方文档冲突检测有关内容。
关于公司
感谢您关注新智锦绣科技(北京)有限公司!作为 Elastic 的 Elite 合作伙伴及 EnterpriseDB 在国内的唯一代理和服务合作伙伴,我们始终致力于技术创新和优质服务,帮助企业客户实现数据平台的高效构建与智能化管理。无论您是关注 Elastic 生态系统,还是需要 EnterpriseDB 的支持,我们都将为您提供专业的技术支持和量身定制的解决方案。
欢迎关注我们,获取更多技术资讯和数字化转型方案,共创美好未来!
![]() | ![]() |
Elastic 微信群 | EDB 微信群 |

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






