升级集群的主要服务器版本

本页面详细介绍了用于更新数据库服务器版本的 AlloyDB for PostgreSQL 流程,并说明了如何将数据迁移到与较高的 PostgreSQL 版本兼容的集群。

如需详细了解如何创建集群,请参阅创建集群及其主实例

集群与 PostgreSQL 版本的兼容性

创建 AlloyDB 集群时,您可以选择与集群中实例兼容的 PostgreSQL 主要版本。这在默认情况下为 15。

AlloyDB 会在定期维护期间自动执行次要数据库版本升级。例如,如果您创建的集群与版本 15 兼容,那么 AlloyDB 会将数据库服务器升级到版本 15 的最新次要版本。

不过,如果要进行 PostgreSQL 版本的主要版本升级,您需要自行规划、测试和执行升级。

您可以通过以下几种方法对集群执行主要版本升级:

  1. 就地主要版本升级(我们建议使用此方法)。
  2. 使用基于文件的数据导出迁移数据
  3. 使用 Database Migration Service

每种升级解决方案都有不同的优缺点。请参阅下表了解简要的比较,以便您根据自己的情况选择合适的方法。

就地主要版本升级 基于文件的数据导出 使用 Database Migration Service 进行迁移
您的集群(包括读取实例)会升级到所选的较高主要版本。 基于文件的导出会移动数据库的一次性快照。 Database Migration Service 在迁移过程中提供持续复制功能,从而可降低新集群中缺少数据的可能性。
在升级前阶段,您可以继续在集群上工作。 您的应用会经历较长的停机时间(从导出数据时开始)。在新集群完全正常运行之前,您无法在原始集群中接受数据库写入操作。 您的应用会经历较短的停机时间(从您想要切换应用以使用新集群时开始)。
升级过程中,您预计会经历大约 20 分钟或更长的停机时间,具体取决于您的架构。升级后,您可以使用相同的 IP 地址访问集群。 您可以更精细地控制要将哪些数据包含在导出内容中,并且可以选择不迁移特定表或其他实体。 Database Migration Service 会自动迁移您实例中存在的所有数据库以及集群中的所有实例。您无法选择从迁移数据中排除特定表或视图。
您的集群可以启用 SSL 实施模式。 为进行迁移,Database Migration Service 要求您在源集群上停用 SSL 实施模式。


下一部分详细介绍了执行主要版本升级(包括迁移数据)的流程。

就地主要版本升级

此方法可以提供顺畅的升级体验,而无需您设置任何其他集群。如需了解详情,请参阅就地升级数据库主要版本

使用基于文件的数据导出进行迁移

如需使用与较高 PostgreSQL 主要版本兼容的数据库服务器,您需要在同一区域中创建功能相同的集群,然后将数据迁移到该集群中。

请按照以下步骤操作:

  1. 创建一个配置了您要使用的 PostgreSQL 主要版本兼容性的集群。请在与当前集群相同的区域中创建该集群。

  2. 使用新的主要版本设置新集群,以便与当前集群的配置匹配:

    1. 根据需要创建其他读取池实例。

    2. 根据需要创建次要集群。

      创建次要集群时,您无需指定 PostgreSQL 主要版本号。AlloyDB 会将主集群的 PostgreSQL 版本应用于其所有次要集群。

    3. 更新新集群的数据库标志,以便与当前集群的标志设置匹配。

    4. 启用应用所需的所有扩展程序。

  3. 使用 psqlpg_dump 将您的数据从旧集群导出到文件中。

  4. 将您的数据从文件导入新集群。

您的应用现在可以通过新 IP 地址连接到新集群的实例

使用 Database Migration Service 进行迁移

您可以使用 Database Migration Service 将数据从 PostgreSQL 数据库迁移到 AlloyDB 集群。Database Migration Service 不提供专门用于 AlloyDB 数据源的配置,但 AlloyDB 与 PostgreSQL 兼容,因此您可以使用旨在用于通用 PostgreSQL 来源的配置。

此迁移路径不是就地升级,结果会创建一个具有不同 IP 地址的新集群。我们建议您先克隆集群并执行测试迁移,以验证您的应用是否与此方法兼容。

重要注意事项

在准备使用 Database Migration Service 进行迁移之前,请仔细考虑以下限制,以确保此迁移路径适合您的升级场景。

限制
  • 必须在源集群上停用 SSL 连接。
  • 不支持使用 Private Service Connect 配置的 AlloyDB 实例。
  • 您无法在迁移期间对源集群执行实例更新或故障切换请求。这些操作可能会导致迁移作业失败。
  • 针对 PostgreSQL 到 AlloyDB 迁移的所有标准限制都适用于这种场景。如需查看其他限制的完整列表,请参阅 Database Migration Service 文档中的已知限制
迁移准确度
某些数据类型(例如大型对象)不会迁移。如需查看支持的数据的完整列表,请参阅 Database Migration Service 文档中的迁移准确度
源数据库锁定和停机时间

Database Migration Service 使用持续迁移将数据移至 AlloyDB 集群。这种类型的迁移会在创建初始数据转储时对源数据库表进行短暂(10 秒以下)锁定(一次一个)。

迁移完成后,您需要停止对源数据库进行的所有写入操作,然后才能将应用切换到新集群。此过程需要一些停机时间。如需更详细的概览,请参阅 Database Migration Service 文档中的持续迁移

复制限制

迁移作业进入变更数据捕获 (CDC) 阶段后,Database Migration Service 会持续复制写入源数据库的新数据。

对于没有主键的表,在 CDC 阶段仅复制 INSERT 语句。在 CDC 阶段对没有主键的表执行的任何 CREATEUPDATEDELETE 操作都需要在目标数据库中手动重新创建,以免数据丢失。

准备工作

  1. Enable the Database Migration Service API.

    Enable the API

  2. Make sure that you have the following role or roles on the project:

    • One of the following:
      • Cloud AlloyDB > Cloud AlloyDB admin
      • Basic > Owner
      • Basic > Editor
    • You must also have the compute.networks.list permission in the Google Cloud project you are using. To gain this permission while following the principle of least privilege, ask your administrator to grant you the Compute Engine > Compute Network User role (roles/compute.networkUser).
    • Database Migration admin

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      进入 IAM
    2. 选择项目。
    3. 点击 授予访问权限
    4. 新的主账号字段中,输入您的用户标识符。 这通常是 Google 账号的电子邮件地址。

    5. 选择角色列表中,选择一个角色。
    6. 如需授予其他角色,请点击 添加其他角色,然后添加其他各个角色。
    7. 点击 Save(保存)。
  3. 确保您使用的 Google Cloud 项目中的 VPC 网络针对 AlloyDB 专用服务访问通道进行了配置
  4. 确定要在哪个区域创建目标集群。所有 Database Migration Service 实体(连接配置文件、迁移作业)必须在与目标集群相同的区域中创建。
  5. 准备您希望连接到集群并对源数据库执行迁移语句的数据库用户。此数据库用户需要一组特定的权限和角色。我们建议您创建新的数据库用户,并将其指定为专门用于执行迁移。

配置源实例

Database Migration Service 需要进行特定配置,才能连接到新的目标集群并将数据从源集群复制到其中。

如需配置 AlloyDB 源实例,请执行以下步骤:

  1. 在源集群中的每个实例上配置数据库标志。请使用以下值:
    标志
    alloydb.logical_decoding 设置为 on
    alloydb.enable_pglogical 设置为 on
    max_replication_slots 此标志定义源实例可以支持的复制槽数量上限。此标志的最小值50

    可使用以下公式计算最小值:

    (the number of databases in your instance) * (the number of simultaneous migration jobs you want to perform) + (slots reserved for table synchronization) + (the number of replication slots you currently use for your read replicas)

    请考虑满足以下条件的示例:

    • 您的来源中没有读取副本。
    • 您在主源实例中有 30 个数据库。
    • 您希望为源集群创建 2 个迁移作业。
    • 您希望使用 10 个槽来进行表复制。
    在此情况下,max_replication_slots 的数量必须至少为 70,计算方式为 30 * 2 + 10 + 0
    max_wal_senders 将此标志设置为比 max_replication_slots 值加上实例中已使用的发送方数量之和至少多 10。

    例如,如果您将 max_replication_slots flag 设置为 70,并且您已使用 2 个发送方,则 max_wal_senders 应至少为 82(计算方式为 70 + 10 + 2 = 82)。

    max_worker_processes 将此标志设置为至少是实例中的数据库数量加上您已使用的 max_worker_processes 数量。

    例如,如果您的源实例中有 30 个数据库,并且您不使用任何工作器进程,请将此标志设置为 30

  2. 在源集群中的每个实例上停用 SSL 实施模式

配置源数据库

您必须安装 pglogical 扩展程序,并向您对实例的每个数据库指定为迁移用户的数据库用户授予所需权限。

如需配置数据库,请执行以下步骤:

  1. 使用 psql 客户端连接到默认的 postgres 数据库
  2. 通过运行以下命令安装 pglogical 扩展程序:

    CREATE EXTENSION IF NOT EXISTS pglogical;
    
  3. 针对所有架构(information 架构以及名称以 pg_ 前缀开头的架构除外),向迁移数据库用户授予权限。执行以下语句:

    GRANT USAGE on SCHEMA SCHEMA_NAME to USER_NAME;
    GRANT SELECT on ALL TABLES in SCHEMA SCHEMA_NAME to USER_NAME;
    GRANT SELECT on ALL SEQUENCES in SCHEMA SCHEMA_NAME to USER_NAME;
    

    替换以下内容:

    • SCHEMA_NAME:数据库中存在的架构的名称
    • USER_NAME:您在准备工作部分中准备的数据库用户的名称

    对数据库中的每个架构(information 架构以及名称以 pg_ 前缀开头的架构除外)重复此步骤。您可以使用 \dn 元命令列出所有数据库架构。

  4. 授予其余所需权限。执行以下语句:

    GRANT USAGE on SCHEMA pglogical to PUBLIC;
    GRANT SELECT on ALL TABLES in SCHEMA pglogical to USER_NAME;
    ALTER USER USER_NAME with REPLICATION;
    

    USER_NAME 替换为您在准备工作部分中准备的数据库用户的名称。

  5. 连接到实例中的所有其他数据库,然后重复第 2、3 和 4 步。

    • 您可以使用 \list 元命令列出实例中的所有数据库。

    • 您可以使用 \connect {database_name_here} 命令切换到其他数据库,而无需重置 psql 客户端连接。

  6. 对源 AlloyDB 集群中的每个实例重复此过程。

在 Database Migration Service 中运行迁移

请按照以下步骤操作:

  1. 为 AlloyDB 集群创建来源连接配置文件。请使用以下值:

    • 数据库引擎:选择 PostgreSQL
    • 主机名/IP:使用集群中主实例的 IP 地址。
    • 用户名/密码:输入您在准备工作部分中准备的数据库用户的凭据。
    • 端口:输入 5432
    • 区域:选择目标集群所在的区域。
    • 加密类型:选择
  2. 创建并运行迁移作业。

    您可以提前创建新的 AlloyDB 集群,也可以让 Database Migration Service 在迁移作业配置期间为您创建集群。如需了解详情,请参阅 Database Migration Service 文档中的迁移作业概览

    如果您希望 Database Migration Service 在迁移作业配置期间为您创建目标集群,请按照创建到新的目标实例的迁移作业过程中的步骤操作。

    如果您希望在 Database Migration Service 之外创建目标集群,请按照创建到现有目标实例的迁移作业过程中的步骤操作。

  3. 当迁移作业的状态更改为 CDC 时,提升迁移作业。您可以在迁移概览页面上查看迁移作业状态。请参阅 Database Migration Service 文档中的查看迁移作业

    此操作会导致目标集群退出引导模式(即,目标 AlloyDB 集群不再处于只读状态)。

  4. (可选)检查没有主键的表中是否缺少语句。

    如果您的源 AlloyDB 数据库包含没有主键的表,您可能需要手动迁移所有缺少的 UPDATEDELETE 语句。请参阅 Database Migration Service 文档中的迁移针对非主键表的 UPDATE 和 DELETE 操作

  5. 将应用切换到新集群。您的应用现在可以通过新 IP 地址连接到新集群的实例