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

EDB PGD 6 Essential 初探

新智锦绣 2025-08-29
178

点击蓝字关注我们



前言


2025/06/09 EnterpriseDB 正式发布PGD 6,对比PGD5,PGD6推出两个不同的edition:Essential和Expanded。为此我们来了解一下其内容及不同,本文主要对Essential进行初步测试和学习。


PGD Essential 和 

PGD Expanded 有什么区别?


PGD Expanded 是 PGD 的全功能版本。它包括 PGD Essential 的所有功能,以及高级冲突管理、数据分发和对大规模部署的支持等附加功能。PGD Expanded 专为需要 PGD 最高级特性和功能的用户而设计。

PGD Essential 是 PGD Expanded 的简化版本。它专为想要快速轻松地开始使用 PGD 的用户而设计,无需高级功能或复杂的配置。PGD Essential 包括 PGD 的核心功能,但以简化复制和可用性的方式启用它们。因此,它不包括 PGD Expanded 中可用的一些更高级的功能。

PGD Essential 将集群中的数据节点数限制为 4 个,组数限制为 2 个。它还将组中的节点数限制为 4。PGD Expanded 没有这些限制。


PGD Essential 简介


EDB Postgres Distributed (PGD) Essential 是 PGD Expanded 的简化版本,PGD 的核心是数据节点,即作为 PGD 集群一部分的 Postgres 数据库。PGD 使这些数据库能够在节点之间有效地复制数据,确保数据始终可用且是最新的。PGD Essential 通过提供易于设置和管理的标准架构来简化此过程。

标准架构(standard architecture)是围绕单个数据组(group)构建的,这是 EDB Postgres 分布式系统的基本架构元素。在组内,节点合作选择哪些节点处理传入的写入或读取流量,并确定节点何时可用或与组的其余部分不同步。组最常用于节点位于同一数据中心且集群中只有一个组的单个位置,我们也称之为单位置架构(one-location architecture)。


Essential 基本功能


  1. 标准架构(Standard Architecture):该架构由同一数据中心或区域中具有三个节点的单个数据组组成。

  2. 近/远架构(Near/Far Architecture):它由不同位置的两个数据组组成,一组处理写入,另一组处理读取。

  3. 连接管理(Connection Management) :使用连接管理器端口连接到 PGD 集群,该端口会自动将读写事务路由到适当的节点。

  4. PGD CLI :使用 PGD CLI 管理 PGD 集群,包括创建和管理数据组、节点和连接。

  5. 持久性:PGD Essential 的持久性功能,确保您的数据始终可用且最新。

  6. 自动分区 :可自动跨集群中的节点对数据进行分区,以提高性能和可伸缩性。


标准架构 - 高可用性单一位置的理想选择


单位置架构由具有三个节点的单个 PGD 集群组成。节点位于同一数据中心或区域中。理想情况下,它们位于不同的可用性区域,但这不是必需的。节点使用高速网络相互连接。

节点配置为数据组,这意味着它们在同一组内相互复制数据。虽然 PGD 可以处理网络中的多个写入器,但这需要更高级的冲突管理,并且 PGD Essential 不支持。

因此,在标准架构中,一个节点被指定为写入领导节点(write leader node ),处理所有写入事务。组中的其他节点是只读节点(read-only nodes),用于从写入领导者复制数据。

写主节点是组中的节点选择的一个节点来处理所有写入。它负责接受写入事务并将其复制到组中的其他节点。如果写入领导节点发生故障,组中的其他节点将选择一个新的写入领导节点(new write leader node)。

应用程序可以使用在每个数据节点上运行的 PGD 的连接管理器(Connection Manager )端口连接到集群中的任何节点。它会自动将读写事务路由到写入领导者。它还可以将只读事务路由到组中的其他节点。



  • 在此图中,可以看到通过连接管理器端口连接到 PGD 群集的应用程序。连接管理器负责将读写事务路由到组中的相应节点。写入领导者负责处理所有写入事务,并在 AZ1 的顶部以绿色显示。

  • 组中的其他节点是只读节点,用于从写入领导者复制数据。连接到只读节点连接管理器读/写端口的应用程序将把其查询和更改路由到写入领导者。始终,节点相互通信复制数据以确保它们同步。


Near/Far架构


在近/远架构中,主位置有两个数据节点,辅助位置有一个数据节点。主位置是存储大部分数据的位置,也是建立大多数客户端连接的位置。辅助位置用于灾难恢复,默认情况下不用于客户端连接。

数据节点都配置在多主复制配置中,就像标准架构一样。不同之处在于,辅助位置的节点与群集中的其他节点隔离开来,默认情况下不接收客户端连接。在此配置中,辅助位置节点在主位置具有数据的完整副本。

使用 PGD 提交范围,主位置中的数据节点配置为将数据同步复制到主位置中的另一个节点和辅助位置中的节点。这可确保数据在提交到主位置之前复制到所有节点。在节点宕机的情况下,提交范围规则会检测情况并将复制降级为异步复制。此行为允许系统继续运行。

如果主位置发生部分故障,系统将切换到另一个数据节点,该节点也具有数据的完整副本,并继续运行。它还会继续复制到辅助位置。当主位置的故障节点返回时,它会重新加入并开始从当前主节点复制数据。

如果主位置发生完全故障,则辅助位置的数据库具有数据的完整副本。根据故障情况,恢复选项包括从辅助位置还原主位置或从辅助位置的备份还原主位置。辅助位置可以配置为接受客户端连接,但这不是默认配置,需要进行一些额外的重新配置。



PGD6 的部署方式


PGD6现在支持传统基于物理/虚拟机方式部署,同时也支持docker容器环境下部署。下面示例使用 Docker Compose 创建本地PGD6集群。


创建一个PGD6集群 (Essential)


先决条件

Docker 和 Docker Compose 安装在本地计算机上,本人在macos上通过docker desktop来进行测试。


安装 PGD Docker 快速入门工具包

要创建PGD 集群,可以使用 EDB 提供的 Docker Compose 文件。将建立一个具有三个节点的本地集群,非常适合测试和开发目的。

1.确保本地计算机上安装了 Docker 和 Docker Compose。如果尚未安装,则可以按照 Docker 安装指南进行操作。

2.打开一个终端,在安装了 docker 的机器上,为 PGD 集群创建一个新目录,例如:

    mkdir pgd-cluster
    cd pgd-cluster

    3.运行以下命令下载 PGD Docker Compose 文件:

       curl -L https://enterprisedb.com/docs/pgd/latest/get-started/assets/pgd_quickstart.sh | bash

      这将下载 PGD Docker 快速入门工具包,其中包括 Docker Compose 文件和其他开始使用 PGD Essential 所需的文件。

      4.下载完成后,需要为 PGD 集群准备环境。运行以下命令:

         ./qs.sh prepare

        此命令将为 PGD 集群创建必要的目录和文件。

          ls -l                                                                                                                                                                     
          total 40
          -rw-r--r--   1 Cxxy  staff  1047  82501:59 Dockerfile.pge
          -rw-r--r--   1 Cxxy  staff  1169  82500:11 docker-compose.yml
          -rwxr-xr-x   1 Cxxy  staff  2307  82500:11 docker-entrypoint.sh
          drwx------@ 26 Cxxy  staff   832  82502:08 host-1-volume
          drwx------@ 28 Cxxy  staff   896  82502:08 host-2-volume
          drwx------@ 28 Cxxy  staff   896  82502:08 host-3-volume
          -rwxr-xr-x   1 Cxxy  staff  7633  82500:11 qs.s

          5.为 PGD 集群构建 Docker 镜像。运行以下命令:

          实测时Dockerfile.pge中映像来源debian拉取安装packages会有报错,修改为ubuntu。

            export EDB_SUBSCRIPTION_TOKEN=...
            ./qs.sh build



            构建映像后,使用 Docker Compose 启动 PGD 集群。运行以下命令:

               ./qs.sh start
              -----------------------------------------------------------------
               Running 'start' command: Starting Docker Compose services...
               Performing system checks for start...
                 Docker found.
                 Docker Compose found.
               [+Running 7/7
                ✔ Network pgd-cluster_default         Created          
                ✔ Volume "pgd-cluster_pgdata-host-1"  Created   
                ✔ Volume "pgd-cluster_pgdata-host-2"  Created   
                ✔ Volume "pgd-cluster_pgdata-host-3"  Created  
                ✔ Container pgd-cluster-host-3-1      Started   
                ✔ Container pgd-cluster-host-1-1      Started  
                ✔ Container pgd-cluster-host-2-1      Started  
               Docker Compose services started successfully in detached mode.

              此命令将启动 Docker 容器并创建一个具有默认配置的本地集群,并在后台运行。

                 ./qs.sh start
                -----------------------------------------------------------------
                 Running 'start' command: Starting Docker Compose services...
                 Performing system checks for start...
                   Docker found.
                   Docker Compose found.
                 [+Running 7/7
                  ✔ Network pgd-cluster_default         Created          
                  ✔ Volume "pgd-cluster_pgdata-host-1"  Created   
                  ✔ Volume "pgd-cluster_pgdata-host-2"  Created   
                  ✔ Volume "pgd-cluster_pgdata-host-3"  Created  
                  ✔ Container pgd-cluster-host-3-1      Started   
                  ✔ Container pgd-cluster-host-1-1      Started  
                  ✔ Container pgd-cluster-host-2-1      Started  
                 Docker Compose services started successfully in detached mode.

                此命令将启动 Docker 容器并创建一个具有默认配置的本地集群,并在后台运行。

                  docker ps
                  -----------------------------------------------------------------
                  CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS          PORTS                                                             NAMES
                  11dd824554a8   pgd       "/var/lib/postgresql…"   24 seconds ago   Up 7 seconds                                                                      pgd-cluster-host-2-1
                  fbf0cdbe22b8   pgd       "/var/lib/postgresql…"   24 seconds ago   Up 24 seconds                                                                     pgd-cluster-host-1-1
                  fe7b83fcc4ae   pgd       "/var/lib/postgresql…"   24 seconds ago   Up 6 seconds    0.0.0.0:6432-6434->6432-6434/tcp, [::]:6432-6434->6432-6434/tcp   pgd-cluster-host-3-


                  访问 PGD 集群


                  1.容器启动并运行后,就可以使用以下命令访问 PGD 集群:

                     docker compose exec host-1 psql pgddb

                    此命令将使用 psql 命令行界面直接连接到集群的第一个节点。这是连接到数据库以执行维护和管理任务的方式。

                    对于应用程序和用户访问,通常会使用连接管理器进行连接,默认情况下,该管理器在集群中所有主机的 TCP 端口 6432 上运行。

                    2.可以使用以下命令连接到集群中的写入领导者节点:

                      docker compose exec host-1 psql -h host-1 -p 6432 pgddb

                      可以将 -h host-1 替换为集群中任何主机的名称,因为它们都运行连接管理器。如果在本地计算机上安装了 psql 客户端,则还可以使用以下命令连接到集群:

                        export PGPASSWORD=secret
                        psql -h localhost -p 6432 -U postgres pgddb


                        pgddb=# select node_name from bdr.local_node_summary;
                         node_name 
                        -----------
                         node-1
                        (1 行记录)

                        3.使用 PGD CLI查看PGD状态,运行以下命令列出集群中的节点及其状态。:

                           docker compose exec host-1 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          

                          4.可以在 host-1 容器上获取一个 shell 并直接运行 pgd 命令:

                            docker compose exec host-1 bash;                                                                                                                                           ─╯
                            postgres@host-1:~$ 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      

                            5.可以通PGD CLI来管理和查看PGD的详细信息,如

                              postgres@host-1:~$ pgd cluster show
                              # Summary
                               Group Name | Parent Group | Group Type | Node Name | Node Kind 
                              ------------+--------------+------------+-----------+-----------
                               group-1    | pgd          | data       | node-1    | data      
                               group-1    | pgd          | data       | node-2    | data      
                               group-1    | pgd          | data       | node-3    | data      
                               pgd        |              | global     |           |           


                              # Health
                               Check             | Status | Details                                         
                              -------------------+--------+-------------------------------------------------
                               Connections       | Ok     | All BDR nodes are accessible                    
                               Raft              | Ok     | Raft Consensus is working correctly             
                               Replication Slots | Ok     | All PGD replication slots are working correctly 
                               Clock Drift       | Ok     | Clock drift is within permissible limit         
                               Versions          | Ok     | All nodes are running the same PGD version      


                              # Clock Drift
                               Reference Node | Node Name | Clock Drift 
                              ----------------+-----------+-------------
                               node-1         | node-3    | *           
                               node-1         | node-2    | *        

                              PGD CLI的各种管理和查询PGD的命令,本文不过多罗列详解。


                              总结


                              PGD6相比PGD5带来很多新特征及功能提升,而且PGD 6还分出两个版本,应对不同的业务需求和场景。下表简单归纳一下这些对比。

                              PGD6(Essential和expanded)及PGD5对比表


                              PGD6 主要特征优势对比表






                              关于公司

                              感谢您关注新智锦绣科技(北京)有限公司!作为 Elastic 的 Elite 合作伙伴及 EnterpriseDB 在国内的唯一代理和服务合作伙伴,我们始终致力于技术创新和优质服务,帮助企业客户实现数据平台的高效构建与智能化管理。无论您是关注 Elastic 生态系统,还是需要 EnterpriseDB 的支持,我们都将为您提供专业的技术支持和量身定制的解决方案。


                              欢迎关注我们,获取更多技术资讯和数字化转型方案,共创美好未来!

                              Elastic 微信群

                              EDB 微信群


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




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

                              评论