暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PGD Essential 6 初探(四)

新智锦绣 2025-09-18
117

点击蓝字关注我们


前面文章已经成功创建 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 list
     Node Name | Group Name | Node Kind | Join State | Node Status 
    -----------+------------+-----------+------------+-------------
     node-1    | group-1    | data      | ACTIVE     | Up          
     node-2    | group-1    | data      | ACTIVE     | Up          
     node-3    | group-1    | data      | ACTIVE     | Up    

    假设host-2节点出于某种原因遇到了一些问题。我们想重新配置它。 首先告诉集群的其余部分删除此节点。

      $ pgd --dsn 'host=host-1 dbname=pgddb user=postgres' node node-2 part
      Starting a part node operation for node: node-2
      This 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 stop
        waiting for server to shut down.... done
        server stopped
        $ rm -rf $HOME/postgres.logfile var/lib/edb-pge/17/data

        查询集群,确信node-2这个节点是不是已经不在集群里了。

          postgres@host-2:~$ pgd nodes list
           Node Name | Group Name | Node Kind | Join State | Node Status 
          -----------+------------+-----------+------------+-------------
           node-1    | group-1    | data      | ACTIVE     | Up          
           node-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 stop
            waiting for server to shut down.... done
            server 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 join
              Creating database pgddb
              Database pgddb already exists
              Creating the bdr extension
              Extension bdr already exists
              Granting bdr_superuser to postgres
              NOTICE:  role "postgres" has already been granted membership in role "bdr_superuser" by role "postgres"
              Role bdr_superuser granted to postgres
              Creating node node-2
              Node node-2 created successfully
              The --group-name not specified. Fetching group name from remote node
              Group group-1 already exists
              Joining node node-2 to group group-1
              Node node-2 joined to group group-1 successfully
              Verifying postgres settings for node node-2
              Node node-2 added to the cluster successfully
              Warning: 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 list
                 Node Name | Group Name | Node Kind | Join State | Node Status 
                -----------+------------+-----------+------------+-------------
                 node-1    | group-1    | data      | ACTIVE     | Up          
                 node-2    | group-1    | data      | ACTIVE     | Up          
                 node-3    | group-1    | data      | ACTIVE     | Up         


                1.3


                检查PGD表的一致性

                在节点 1 上,监控性能:

                  select * from bdr.node_replication_rates;

                  在节点 1 上,获取值列的总和(用于检查):

                    pgddb=select COUNT(*),SUM(valuefrom quicktest;


                     count |   sum    
                    -------+----------
                    10000 | 50236186
                    (1 row)

                    在节点 2 上,获取值列的总和(用于检查):

                      select COUNT(*),SUM(valuefrom 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 微信群


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






                      文章转载自新智锦绣,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                      评论