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

EDB PGD 6 Expanded 初探

新智锦绣 2025-09-26
24

点击蓝字关注我们


前面几篇介绍了PGD 6 Essential 版本的一些功能和特征介绍,PGD 6 Expanded是可以真正实现Geo-Distributed架构的最高功能版本,通过跨地域的分布式部署架构实现99.999%极致高可用。


一、概述


PGD Expanded 为用户提供完整的 PGD 功能集;其中 PGD Essential 是 PGD 的最佳实践、受控和简化版本。expanded version适用于希望利用 PGD 全套特性和功能的用户,包括高级架构、自定义配置和更复杂的用例。

PGD Expanded 专为需要对其数据库环境进行最高级别的灵活性和控制的用户而设计。它提供了一套全面的工具和功能,允许用户自定义部署并优化性能。


二、Expanded 功能

PGD Expanded 中提供了以下功能:

  • 多主复制:PGD Expanded支持多主复制,允许用户创建一个高可用和容错的数据库环境。此功能使用户能够写入集群中的任何节点,从而提供最大的灵活性和可扩展性。

  • 冲突解决 :PGD Expanded 对多主复制的支持包括高级冲突解决功能,允许用户处理复制过程中可能出现的冲突。此功能可确保集群中所有节点之间的数据一致性。

  • 高级持久性:PGD Expanded 通过可自定义的提交范围(commit scopes)打开了 PGD 中的全套持久性选项,提供了超越 PGD Essentials 预定义提交范围的灵活性。此功能允许用户根据自己的特定需求优化数据库性能和持久性。

  • 自定义配置 :PGD Expanded 允许用户自定义其数据库配置以满足其特定需求。PGD Essential 支持两种节点和组数量有限的基本架构,而 PGD Expanded 在部署中使用的节点数量、节点类型或复制配置没有限制。


三、 PGD 6 Expandedd 架构


使用 PGD 6 Expanded,可以在各种架构中部署集群。与 PGD 6 Essential 不同,PGD 6 Essential 仅限于使用有限数量的组,限定两种架构,PGD 6 Expanded 支持具有技术上无限组的多种架构,包括:

  • Always-on architecture:在同一数据中心或可用区域中具有两个或多个组的单个 PGD 集群。此架构专为高可用性和灾难恢复而设计,确保即使一个组发生故障,数据库也能保持运行。

  • Essentials’s Standard/One-location architecture:在同一数据中心或可用区中具有三个节点的单个 PGD 集群;这是PGD 6 基本架构。

  • Multi-location architecture:单个 PGD 集群,在不同的数据中心或可用区中具有两个或多个组。

  • Geo-distributed architecture:在不同区域中具有两个或多个组的单个 PGD 集群,类似于多位置架构,但具有更高的延迟和潜在的网络分区问题。


3.1 Always-On 架构


PGD 的架构随着时间的推移而发展,以满足组织的需求。其核心是 Always-on 架构,旨在为 Postgres 数据库提供高可用性和灾难恢复。在 PGD 4 和 5 中定义的 Always-on 架构经过改进,以支持 PGD 6 的新特性和功能。

Always-On的架构反映了 EDB 的 Trusted Postgres 架构。它们封装了最佳实践,在多种配置中实现尽可能高的服务可用性。这些配置的范围从单一位置架构到复杂的分布式系统,以防止硬件故障和数据中心故障。这些架构利用 EDB Postgres Distributed 的多主节点功能及其实现 99.999% 可用性的能力,即使在维护操作期间也是如此。

可以将 EDB Postgres Distributed 用于我们描述的示例之外的架构。特定用例的变体已成功部署在多个生产系统中。但是,这些变体必须首先经过严格的架构审查。


3.1.1 标准 EDB Always-on 架构

EDB 确定了一组标准化架构,以支持具有不同冗余级别的单位置或多位置部署,具体取决于恢复点目标 (RPO) 和恢复时间目标 (RTO) 要求。

Always-on 架构使用三个数据库节点组作为基本构建块。也可以使用五节点组来获得额外的冗余。

EDB Postgres Distributed 由包含以下主要组件:

  • 双向复制 BDR(Bi-Directional Replication) — 创建多主网状网络的 Postgres 扩展

  • 连接管理器(Connection Manager) — 一种连接路由器,用于确保应用程序连接到正确的数据节点。

所有始终在线的架构可保护越来越多的故障情况。例如,具有两个数据节点的单个活动位置可防止本地硬件故障,但不提供针对位置(数据中心或可用性区域)故障的保护。在不同位置使用备份来扩展该体系结构,可确保在某个位置发生灾难性丢失时提供一些保护。但是,仍然必须先从备份还原数据库,这可能会违反 RTO 要求。添加在多主网状网络中连接的第二个活动位置可确保即使某个位置脱机,服务仍然可用。最后,添加第三个位置(这可以是仅供见证者witness-only使用的位置)允许全局 Raft 功能正常工作,即使一个位置离线也是如此。全局 Raft 主要用于运行管理命令。此外,如果没有它,某些功能(如 DDL 或序列分配)可能无法工作,而即使没有全局 Raft,DML 复制是可以继续工作。

每种架构都可以提供零 RPO,因为数据可以同步流式传输到至少一个本地主站,从而保证在本地硬件故障时零数据丢失。

增加可用性保证总是会增加硬件和许可证成本、网络要求和操作复杂性。在选择体系结构之前,请务必仔细考虑可用性和合规性要求。


3.1.2 体系结构详细信息

默认情况下,应用程序事务不需要集群范围的 DML 共识(选择、插入、更新和删除),从而降低延迟并提高性能。然而,对于某些操作,例如生成新的全局序列sequence或执行分布式 DDL,EDB Postgres Distributed 需要奇数个节点才能使用基于 Raft 的共识模型进行决策。因此,即使是更简单的架构也总是有三个节点,即使不是所有节点都存储数据。

应用程序通过多主机连接字符串连接到标准Always-on 体系结构,其中每个连接管理器都是多主机连接字符串中的不同条目。其他连接机制已在生产中成功部署。但是,它们不是标准 Always-on 体系结构的一部分。


3.1.3 Always-on Single Location

Always-on 1 Location, 3 Nodes Diagram


  • 数据节点 1 和 3 之间的其他复制未显示,但作为复制网格的一部分发生

  • 冗余硬件可从本地故障中快速恢复

    • 3 个 PGD 节点

    • 可以是 3 个数据节点(推荐)

    • 可以是 2 个数据节点和 1 个不保存数据(未画出)的见证节点

    • 数据节点的配置和基础架构对称性应确保在重新路由时有适当的资源可用于处理应用程序工作负载

  • 用于备份和恢复的barman(未画出)

    • 异地是可选的,但建议使用

    • 可由多个 PGD 集群共享

  • 用于监控的 Postgres Enterprise Manager (PEM)(未画出)

    • 可由多个 PGD 集群共享


3.1.4 Always-on Multi-location

Always-on 2 Locations, 3 Nodes Per Location, Active/Active Diagram


  • 应用程序可以在每个位置为主动/主动,也可以是主动/被动或主动 DR,但只有一个位置进行写入。

  • 数据节点 1 和 3 之间的其他复制未画出,但作为复制网格的一部分发生。

  • 冗余硬件可从本地故障中快速恢复。

    • 总共 6 个 PGD 节点,每个位置 3 个

      • 可以是 3 个数据节点(推荐)

      • 可以是 2 个数据节点和 1 个不保存数据(未描述)的见证节点

    • 数据节点和位置的配置和基础结构对称性应确保在重新路由时有适当的资源可用于处理应用程序工作负载

  • 用于备份和恢复的barman(未画出)。

    • 可由多个 PGD 集群共享

  • 用于监控的 Postgres Enterprise Manager (PEM)(未画出)。

    • 可由多个 PGD 集群共享

  • 必须将可选见证节点放置在第三个区域中,以提高对位置故障的容忍度。

    • 否则,当某个位置出现故障时,需要全局一致性共识的操作将被阻止,例如添加新节点和分布式 DDL。


3.1.5 选择合适的架构

所有体系结构都提供以下功能:

  • 硬件故障保护

  • 零停机升级

  • 支持公有云/私有云中的可用性区域

使用这些条件来帮助选择适当的始终在线(Always-on)体系结构。


3.1.6 为标准架构增加灵活性

为了提供所需的数据弹性,并靠近应用程序和用户维护数据,您可以在任意数量位置部署单一位置体系结构。虽然 EDB Postgres Distributed 有多种可用的冲突处理方法,但如果允许来自地理位置不同的位置进行写入活动,请注意尽量减少预期的冲突次数。

还可以使用两种其他类型的节点来扩展标准体系结构:

  • Subscriber-only nodes:可以使用它来实现额外的读取可扩展性,并在应用程序的大部分工作负载是读取密集型且写入频率不高时,使数据更靠近用户。还可以利用它们发布数据的子集,来满足报告、存档和分析需求。

  • Logical standbys:它们从 PGD 集群中的另一个节点接收复制的数据,但不参与复制网格或一致性共识。它们包含与其他 PGD 数据节点相同的所有数据,如果其中一个数据节点未能将集群恢复到全容量/一致性共识,则可以快速提升为主节点。可以在数据中心之间的网络流量受到关注的环境中使用。否则,始终首选每个位置三个 PGD 数据节点。


3.2 Essential Architectures


PGD 6 Expanded 支持多种架构,包括 Essential 版本标准架构和近远架构。使用 Expanded,可以部署 Essential 架构,然后向其添加更多组或随着需求的增长构建更复杂的架构。Essential 架构旨在易于部署和管理,同时仍提供 PGD 的核心功能。


3.3 Multi-Location Architectures


PGD 6 Expanded 本质上支持跨多个位置的架构,例如数据中心或可用性区域。这是expanded扩展版的一项关键功能,允许您构建健壮且有弹性的分布式数据库,这些数据库可以处理故障并跨不同地理位置保持高可用性。


3.4 Geo-Distributed Architectures


PGD 支持跨越多个地理位置和逻辑位置的集群。这些群集称为地理分布式体系结构。


四、 PGD 安装和配置 PGD6


4.1 Expanded installation安装的先决条件



4.1.1 主机的配置

部署 PGD Expanded 过程的首先是配置主机。可以部署到云中安装了 Linux 的虚拟机实例、安装了 Linux 的本地虚拟机或同样安装了 Linux 的本地物理硬件。无论选择哪种支持的 Linux操作系统和哪种部署平台,都必须是 Linux 系统,可以使用具有超级用户、管理员或 sudo 权限的用户使用 SSH 进行访问。

每台计算机都必须能够连接到为群集配置的任何其他计算机。在云上部署,可以通过公共网络或 VPC 完成。

云配置指南


4.1.2 创建管理员用户

为每个预配实例配置一个管理员用户。admin 用户必须具有超级用户或 sudo(到超级用户)权限。我们还建议将管理员用户配置为使用证书进行无密码 SSH 访问。


4.1.3 网络连接

确保每台计算机都可以与要预配的其他计算机通信。特别是,PostgreSQL TCP/IP 端口(EDB Postgres Advanced Server 为 5444,EDB Postgres Extended 和社区 PostgreSQL 为 5432)必须对集群中的所有计算机开放。群集中的所有节点还必须可以访问 PGD 连接管理器。默认情况下,连接管理器使用端口 6432(或 EDB Postgres Advanced Server的端口 6444)。


4.2 配置存储库


在PGD 数据节点的每台主机上,都需要安装数据库和 PGD 软件。


4.2.1 配置存储库

设置环境变量EDB_SUBSCRIPTION_TOKEN:

    export EDB_SUBSCRIPTION_TOKEN=<your-token>

    设置 EDB 的订阅类型EDB_SUBSCRIPTION_PLAN。它可以是 standard 、 enterprise 或 community。

      export EDB_SUBSCRIPTION_PLAN=<your-subscription-plan>

      设置包管理类型EDB_REPO_TYPE,对于 Ubuntu/Debian,这可以是 deb,对于 CentOS/RHEL,这可以是 rpm。

        export EDB_REPO_TYPE=<your-repo-type>


        4.2.2 安装存储库

        配置两个存储库:一个用于数据库软件,一个用于 PGD 软件。

          curl -1sSLf "https://downloads.enterprisedb.com/$EDB_SUBSCRIPTION_TOKEN/$EDB_SUBSCRIPTION_PLAN/setup.$EDB_REPO_TYPE.sh" | sudo -E bash


            curl -1sSLf "https://downloads.enterprisedb.com/$EDB_SUBSCRIPTION_TOKEN/postgres_distributed/setup.$EDB_REPO_TYPE.sh" | sudo -E bash


            4.3 安装数据库和 pgd


            用作 PGD 数据节点的每台主机上,都需要安装数据库和 PGD 软件。


            4.3.1 安装数据库和 PGD 软件

            设置一个环境变量以指定要安装的 Postgres 版本。例如对于 Postgres 17,就是 17。

              export PG_VERSION=17


              4.3.2 设置包名称

              设置环境变量以指定数据库和 PGD 软件的包名称。包名称将根据使用的数据库和所在的平台而有所不同。

              对于EPAS,ubuntu/debian如下

                export EDB_PACKAGES="edb-as$PG_VERSION-server edb-pgd6-expanded-epas$PG_VERSION"


                对于EPAS,Centos/RHEL 如下

                  export EDB_PACKAGES="edb-as$PG_VERSION-server edb-pgd6-expanded-epas$PG_VERSION"


                  对于PGE,ubuntu/deian 如下

                    export EDB_PACKAGES="edb-postgresextended-$PG_VERSION edb-pgd6-expanded-pgextended$PG_VERSION"


                    对于PGE,Centos/RHEL如下

                      export EDB_PACKAGES="edb-postgresextended$PG_VERSION-server edb-postgresextended$PG_VERSION-contrib edb-pgd6-expanded-pgextended$PG_VERSION"


                      对于EDB社区版PG,Ubuntu/Debian如下

                        export EDB_PACKAGES="postgresql-$PG_VERSION edb-pgd6-expanded-pg$PG_VERSION"


                        对于EDB社区版PG,Centos/RHEL如下

                          export EDB_PACKAGES="postgresql$PG_VERSION-server postgresql$PG_VERSION-contrib edb-pgd6-expanded-pg$PG_VERSION"


                          4.3.3 安装软件

                          运行适合自己的平台的安装命令。

                          Debian/Ubuntu环境

                            sudo apt install -y $EDB_PACKAGES


                            Centos/RHEL环境

                              sudo dnf install -y $EDB_PACKAGES


                              4.4 配置集群


                              登录到每个主机并运行 pgd 命令以数据库用户身份创建集群。根据使用的平台和使用的 Postgres 版本而有所不同。安装步骤和Essential的过程基本类似。


                              4.4.1 集群命名

                              为集群选择一个名称。这是用于在 PGD CLI 和数据库中标识集群的名称。称为 <cluster-name>。如果未指定,则默认名称为 pgd 。


                              4.4.2 组命名

                              为组选择一个名称。这将用于在 PGD CLI 和数据库中标识组的名称。称为 <group-name>。


                              4.4.3 节点命名

                              为每个节点选择一个名称。将用于在 PGD CLI 和数据库中标识节点的名称。称为 <node-name>。它与主机名是分开的,主机名是运行节点的计算机的名称。节点名称在组和集群中必须是唯一的。


                              4.4.4 设置路径和用户

                              路径和用户将根据使用的 Postgres 版本和使用的平台而有所不同。

                              以下以ubuntu 实装pge为例:

                                sudo -iu postgres
                                export PG_VERSION=<version>
                                export PATH=$PATH:/usr/lib/edb-pge/$PG_VERSION/bin/
                                export PGDATA=/var/lib/edb-pge/$PG_VERSION/main/
                                export PGPORT=5432


                                4.4.5 配置集群

                                集群中的第一个主机也是第一个节点,我们将是我们开始创建集群的地方。

                                在第一台主机上,运行以下命令创建集群:

                                  pgd node <first-node-name> setup --dsn "host=<first-host> user=<db-user> port=<db-port> dbname=<dbname>" --group-name <group-name>

                                  示例:

                                    sudo  -iu postgres
                                    export PG_VERSION=17
                                    export PATH=$PATH:/usr/edb/pge$PG_VERSION/bin/
                                    export PGDATA=/var/lib/edb-pge/$PG_VERSION/data/
                                    export PGPASSWORD=secret
                                    pgd node node-1 setup --dsn "host=host-1 user=postgres port=5432 dbname=pgddb" --group-name group-1

                                    此命令将创建数据目录并初始化数据库,然后在第一个节点上创建集群和组。


                                    在第二台主机上 :

                                      pgd node <second-node-name> setup --dsn "host=<second-host> user=<db-user> port=<db-port> dbname=<db-name>" --cluster-dsn "host=<first-host> user=<db-user> port=<db-port> dbname=<db-name>"

                                      示例:

                                        sudo -iu postgres
                                        export PG_VERSION=17
                                        export PATH=$PATH:/usr/edb/pge$PG_VERSION/bin/
                                        export PGDATA=/var/lib/edb-pge/$PG_VERSION/data/
                                        export PGPASSWORD=secret
                                        pgd node node-2 setup --dsn "host=host-2 user=postgres port=5432 dbname=pgddb" --cluster-dsn "host=host-1 user=postgres port=5432 dbname=pgddb"

                                        此命令将在第二台主机上创建节点,然后使用 cluster-dsn 设置加入群集以连接到第一台主机。


                                        在第三台主机上:

                                          pgd node <third-node-name> setup --dsn "host=<third-host> user=<db-user> port=<db-port> dbname=<db-name>" --cluster-dsn "host=<first-host> user=<db-user> port=<db-port> dbname=<db-name>"

                                          示例:

                                            sudo -iu postgres
                                            export PG_VERSION=17
                                            export PATH=$PATH:/usr/edb/pge$PG_VERSION/bin/
                                            export PGDATA=/var/lib/edb-pge/$PG_VERSION/data/
                                            export PGPASSWORD=secret
                                            pgd node node-3 setup --dsn "host=host-3 user=postgres port=5432 dbname=pgddb" --cluster-dsn "host=host-1 user=postgres port=5432 dbname=pgddb"

                                            此命令将在第三台主机上创建节点,然后使用 cluster-dsn 设置加入群集以连接到第一台主机。

                                            至此,PGD expand扩展版集群创建完成,关于PGD集群的检查、校验、操作可参见以前公众号文章essential版本操作和更早的PGD 5的相关文章。


                                            4.5 Docker环境和Kubernetes环境PGD 6 安装配置



                                            4.5.1 Docker环境下部署PGD

                                            https://www.enterprisedb.com/docs/pgd/latest/get-started/first-cluster/ 根据文档可以快速部署一个essential版本的PGD环境,按需自己修改就可部署expand版本的PGD,后续我们再做介绍。


                                            4.5.2 Kubernetes环境下PGD 6的部署

                                            在K8S环境下部署PGD 6需要额外的license key,目前正在申请中,如果获得可以专门写一篇k8s篇作分享。

                                            https://www.enterprisedb.com/docs/postgres_for_kubernetes/latest/quickstart/ 可以参考文档进行PGD4K的部署。


                                            关于公司

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


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

                                            Elastic 微信群

                                            EDB 微信群


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




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

                                            评论