发布于: Oct 30, 2022

Amazon RDS 数据库迁移有必要吗?众所周知 Amazon Relational Database Service (Amazon RDS) 与 Amazon Aurora 支持多种实例类型,可根据您的实际需求扩展数据库工作网域(请分别参见 Amazon RDS 数据库实例类与 Aurora 数据库实例类)。2020 年,亚马逊云科技公布面向 Amazon RDS 的全新 M6g 及 R6g 实例类型,又于日前宣布正式推出搭载 Amazon Graviton2 处理器的 Aurora R6g 实例类型。值得一提的是,这种全新实例类型拥有远超 x86 同类产品的性价比。

Graviton2 处理器由 Amazon Web Services 使用 64 位 ARM Neoverse 核心定制构建而成,相较于第一代 Amazon Gravtion 处理器做出了多项优化。您可以通过 Amazon RDS 控制台或 Amazon Web Services 命令行界面(Amazon CLI)启动新的 Graviton2 M6g 与 R6g 数据库实例,并以最小停机时间将多可用区数据库迁移至 Gravtion2 实例,尽可能避免因迁移造成的 I/O 冻结影响到正常服务。

在本文中,我们将共同了解将现有 RDS 与 Aurora 数据库实例转为 Graviton2 实例类时的重要注意事项,包括应配合哪些先决条件及具体策略以尽量缩短停机时间。 

以下是将 Amazon RDS 与 Amazon Aurora 迁移至 Graviton2 的几大核心理由:

  • Graviton2 实例可根据具体数据库引擎、版本及工作负载,为 RDS 开源数据库提供最高达 52% 的性能价格比提升。
  • 与第一代 Amazon Graviton 处理器相比,Graviton2 实例的性能提高达 7 倍、计算核心数量增加至 4 倍、单核心独立缓存增加 2 倍、内存容量增加了 5 倍、浮点性能则提升 2 倍。
  • Graviton2 处理器提供始终启用的全加密 DDR4 内存,且单核心加密性能提升达 50%。
  • 在将 Amazon RDS 与 Aurora 数据库由英特尔架构迁移至 Graviton2 实例时,大家无需进行任何移植或代码变更。

无论是对 Amazon RDS (Amazon RDS for MySQL, Amazon RDS for PostgreSQL, Amazon RDS for MariaDB) 还是 Aurora (Aurora MySQL 与 Aurora PostgreSQL),整个实例迁移流程的基本步骤都大致相同。

在本文中,我们假定这样一个用例,即一套运行有 PostgreSQL 9.6.16 版本的多可用区 Aurora 数据库集群,其中包含三个实例:一个写入实例与两个读取实例。

结合常规最佳实践,我们建议先在非生产环境中测试整个流程。您可以首先使用生产数据库的快照,而后将其还原至这套非生产环境的实例当中,确保测试实例的配置(包括实例类、参数组设置、加密机制等)与现有生产实例基本相同。接下来,将您的非生产实例修改为 Graviton2,而后通过验证测试确保一切均按预期完成配置及运行。

下面来看整个流程中的各主要步骤:

  • 更新数据库(如果需要):
    • 确定当前数据库版本是否符合迁移至 Graviton2 所需要的最低版本。
    • 将数据库引擎升级至所需的最低版本。
  • 修改实例类:
    • 确定您的修改策略以及对实例的修改顺序。
    • 将您的实例类修改为适当的Graviton2实例。
  • 验证并确认应用程序是否正常运行。
  • 回滚(如果需要)。

这是一个可选步骤,只适用于当前数据库版本达不到 Graviton2 迁移所需要的最低版本时才需使用。因此,请首先确定您是否有必要升级数据库版本。

下表所示,为截至本文撰稿时 Graviton2 所支持的各数据库版本;表中列出的均为经过编译或开发,且在测试中能够确切兼容 Graviton2 的数据库版本。

  MySQL PostgreSQL MariaDB
Amazon RDS

8.0.17或更高版本

13, 12.3或更高版本 10.5与10.4.13或更高版本
Amazon Aurora

2.09.2或更高版本

12.4或更高版本及11.9或更高版本 —-

对于本文中的用例,我们使用 Aurora PostgreSQL 8.6.16 版本,此版本低于迁移至 Graviton2 的最低必要版本。

关于最新更新信息,请参阅数据库实例类所支持的数据库引擎(Amazon RDS)与数据库实例类所支持的数据库引擎(Aurora)。

如果您的数据库并非 Graviton2 所支持的版本,则需要升级至受支持版本。要获取当前源版本所能使用的全部升级版本清单,请使用 describe-db-engine-versions CLI 命令。

在 Linux、MacOS 与 Unix 系统中,请使用以下代码:

aws rds describe-db-engine-versions  --engine 
aurora-postgresql  --engine-version 9.6.16 --query 'DBEngineVersions[].ValidUpgradeTarget[?IsMajorVersionUpgrade == `true`]'

在 Windows 系统中,请使用以下代码:

aws rds describe-db-engine-versions  --engine 
aurora-postgresql  --engine-version 9.6.16 --query "DBEngineVersions[].ValidUpgradeTarget[?IsMajorVersionUpgrade == `true`]"

以下截屏所示,为基于 Linux 的操作系统中的命令输出结果。其中包含目标版本的 ValidUpgradeTarget 数组的值。

如果 IsMajorVersionUpgrade 的值为 true,则可以将主版本升级至相关的 EngineVersion。如果数组为空,则无法进行主要版本升级。您必须首先升级至主要版本,而后才能进一步升级至路径内的次要版本。

在某些情况下,我们可能无法由当前数据库版本直接升级至 Graviton2 所支持的最低数据库版本。对于本文中的用例,我们使用的是 Aurora PostgreSQL 9.6.16 版本,而 Graviton2 支持的最低版本为 11.9。由于不存在由 9.6 直接升级至 11.9 的路径,因此我们需要首先由 9.6.16 升级至 10.14,再进一步升级至 11.9。因此,这里需要完成两步走升级流程。

对于 Amazon RDS,我们可以遵循以下步骤实现数据库引擎版本升级:

对于 Aurora,大家可以遵循以下步骤实现数据库引擎版本升级:

  • 对 Amazon Aurora 的 MySQL 数据库引擎进行升级
  • 对 Amazon Aurora 的 PostgreSQL 数据库引擎进行升级

如果您希望尽可能缩短停机时间,则可以配合 Amazon Database Migration Service (Amazon DMS)使用另一种升级方法。关于更多细节信息,请参阅使用 Amazon DMS 在 Amazon Aurora for PostgreSQL 中以最短停机时间进行主版本升级。

相关文章