本页详细介绍了 AlloyDB for PostgreSQL 更新数据库服务器版本的流程,并说明了如何将数据迁移到与更高版本的 PostgreSQL 兼容的集群。
如需详细了解如何创建集群,请参阅创建集群及其主实例。
集群和 PostgreSQL 版本兼容性
创建 AlloyDB 集群时,您可以选择与集群中实例兼容的 PostgreSQL 主要版本。默认值为 15。
AlloyDB 会在定期维护期间自动升级数据库次要版本。例如,如果您创建了一个兼容性为 15 的集群,AlloyDB 会将数据库服务器升级到 15 的最新次要版本。
不过,如果要升级 PostgreSQL 版本的主要版本,您需要自行规划、测试和执行升级。
您可以通过多种方法升级集群的主要版本:
每种升级解决方案都有不同的优点和缺点。请参阅下表,简要了解这两种方法的区别,以便根据您的具体情况选择合适的方法。
就地主要版本升级 | 基于文件的数据导出 | 使用 Database Migration Service 进行迁移 |
---|---|---|
您的集群(包括读取实例)会升级到所选的更高主要版本。 | 基于文件的导出会移动数据库的一次性快照。 | Database Migration Service 在迁移过程中提供持续复制功能,降低新集群中缺失数据的几率。 |
在升级前阶段,您可以继续在集群上工作。 | 您的应用会在导出数据时出现较长的停机时间。在新集群完全投入使用之前,您无法在原始集群中接受数据库写入。 | 应用的停机时间会缩短,从您希望将应用切换为使用新集群时开始计算。 |
升级过程预计会导致大约 20 分钟或更长时间的停机,具体取决于您的架构。升级后,您可以使用相同的 IP 地址访问集群。 | 您可以更精细地控制要导出的数据,并可以选择不迁移某些表或其他实体。 | Database Migration Service 会自动迁移实例中的所有数据库以及集群中的所有实例。您无法选择从迁移数据中排除特定表或视图。 |
您的集群可以启用 SSL 强制执行模式。 | 出于迁移目的,Database Migration Service 要求您在源集群上停用 SSL 强制执行模式。 |
下一部分详细介绍了执行主要版本升级(包括迁移数据)的过程。
就地主要版本升级
这样一来,您无需设置任何其他集群,即可获得流畅的升级体验。如需了解详情,请参阅就地升级数据库主要版本。
使用基于文件的数据导出进行迁移
如需使用与较高主要版本的 PostgreSQL 兼容的数据库服务器,您需要在同一区域创建功能相同的集群,然后将数据迁移到该集群中。
请按照以下步骤操作:
创建一个配置为您要使用的 PostgreSQL 兼容性主版本的集群。在当前集群所在的区域中创建集群。
使用新的主要版本设置新集群,使其与当前集群的配置保持一致:
-
创建次要集群时,无需指定 PostgreSQL 主要版本号。AlloyDB 会将主集群的 PostgreSQL 版本应用到其所有次要集群。
更新新集群的数据库标志,使其与当前集群的标志设置保持一致。
您的应用现在可以通过新 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 阶段对没有主键的表执行的任何CREATE
、UPDATE
或DELETE
操作都需要在目标数据库中手动重新创建,以免数据丢失。
准备工作
-
Enable the Database Migration Service API.
-
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
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
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.
- 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
-
In the Google Cloud console, go to the IAM page.
进入 IAM - 选择项目。
- 点击 授予访问权限。
-
在新的主账号字段中,输入您的用户标识符。 这通常是 Google 账号的电子邮件地址。
- 在选择角色列表中,选择一个角色。
- 如需授予其他角色,请点击 添加其他角色,然后添加其他各个角色。
- 点击 Save(保存)。
- 确保您使用的 Google Cloud 项目中的 VPC 网络已配置为对 AlloyDB 使用专用服务访问通道。
- 确定要在哪个区域创建目标集群。所有 Database Migration Service 实体(连接配置文件、迁移作业)都必须在目标集群所在的区域中创建。
- 准备要连接到集群并在源数据库上执行迁移语句的数据库用户。 此数据库用户需要具备一组特定的权限和角色。 我们建议您 创建一个新的数据库用户,并将其专门指定用于执行迁移。
配置源实例
Database Migration Service 需要进行特定配置,才能连接到源集群并将数据复制到新的目标集群。
如需配置 AlloyDB 源实例,请执行以下步骤:
-
在源集群中的每个实例上
配置数据库标志。
请使用以下值:
标志 值 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
。 - 在源集群中的每个实例上停用 SSL 强制执行模式。
配置源数据库
您必须安装
pglogical
扩展程序,并向您指定为迁移用户的数据库用户授予实例中每个数据库的必要权限。如需配置数据库,请执行以下步骤:
- 使用
psql
客户端连接到默认的postgres
数据库。 通过运行以下命令安装
pglogical
扩展程序:CREATE EXTENSION IF NOT EXISTS pglogical;
向迁移数据库用户授予对所有架构的权限(
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 元命令列出所有数据库架构。授予其余所需权限。执行以下语句:
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 替换为您在开始前准备工作部分中准备的数据库用户的名称。
连接到实例中的所有其他数据库,然后重复第 2、3 和 4 步。
您可以使用
\list
元命令列出实例中的所有数据库。您可以使用
\connect {database_name_here}
命令切换到其他数据库,而无需重置psql
客户端连接。
对源 AlloyDB 集群中的每个实例重复此过程。
在 Database Migration Service 中运行迁移
请按照以下步骤操作:
为 AlloyDB 集群 创建来源连接配置文件。请使用以下值:
- 数据库引擎:选择 PostgreSQL。
- 主机名/IP:使用集群中主实例的 IP 地址。
- 用户名/密码:输入您在开始前准备工作部分中准备的数据库用户的凭据。
- 端口:输入
5432
。 - 区域:选择目标集群所在的区域。
- 加密类型:选择无。
创建并运行迁移作业。
您可以提前创建新的 AlloyDB 集群,也可以在迁移作业配置期间让 Database Migration Service 为您创建集群。如需了解详情,请参阅 Database Migration Service 文档中的迁移作业概览。
如果您希望 Database Migration Service 在迁移作业配置期间为您创建目标集群,请按照创建到新的目标实例的迁移作业过程中的步骤操作。
如果您想在 Database Migration Service 之外创建目标集群,请按照创建到现有目标实例的迁移作业过程中的步骤操作。
当迁移作业的状态更改为 CDC 时,请提升迁移作业。您可以在迁移概览页面上查看迁移作业的状态。请参阅 Database Migration Service 文档中的查看迁移作业。
此操作会导致目标集群退出引导模式(即目标 AlloyDB 集群不再处于只读状态)。
(可选)检查没有主键的表中是否缺少语句。
如果您的源 AlloyDB 数据库包含没有主键的表,您可能需要手动迁移所有缺少的
UPDATE
或DELETE
语句。请参阅 Database Migration Service 文档中的迁移非主键表的 UPDATE 和 DELETE 操作。将应用切换到新集群。您的应用现在可以通过新 IP 地址连接到新集群的实例。
- One of the following: