蓝绿部署的最佳实践 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

蓝绿部署的最佳实践

以下是蓝绿部署的最佳实践。

一般最佳实践

  • 切换之前,在绿色环境中全面测试数据库实例

  • 使绿色环境中的数据库保持只读。我们建议您在绿色环境中谨慎启用写入操作,因为它们可能导致复制冲突。它们还可能导致切换后生产数据库中出现意外数据。

  • 使用蓝绿部署实现模式更改时,仅进行与复制兼容的更改。

    例如,您可以在表末尾添加新列,而无需中断从蓝色部署到绿色部署的复制。但是,模式更改(例如重命名列或重命名表)会中断向绿色部署的复制。

    有关与复制兼容的更改的更多信息,请参阅 MySQL 文档中的在源和副本上使用不同的表定义进行复制以及 PostgreSQL 逻辑复制文档中的限制

  • 创建蓝绿部署后,必要时处理延迟加载。切换之前,请确保数据加载已完成。有关更多信息,请参阅 创建蓝绿部署时处理延迟加载

  • 切换蓝绿部署时,请遵循切换最佳实践。有关更多信息,请参阅 切换最佳实践

RDS for MySQL 最佳实践

  • 避免使用未针对复制进行优化的非事务性存储引擎,例如 MyISAM。

  • 为二进制日志复制优化只读副本。

    例如,如果您的数据库引擎版本支持它,请在部署蓝绿部署之前,考虑在生产环境中使用 GTID 复制、并行复制和崩溃安全复制。在切换蓝绿部署之前,这些选项可提升数据的一致性和耐久性。有关只读副本的 GTID 复制的更多信息,请参阅使用基于 GTID 的复制

RDS for PostgreSQL 最佳实践

  • 如果您的数据库有足够的可用内存,请在蓝色环境中增加 logical_decoding_work_mem 数据库参数的值。这样做可以减少磁盘上的解码次数,改为使用内存。您可以使用 FreeableMemory CloudWatch 指标监控可用内存。有关更多信息,请参阅 Amazon RDS 的 Amazon CloudWatch 实例级指标

  • 创建蓝绿部署之前,请将所有 PostgreSQL 扩展更新到最新版本。有关更多信息,请参阅 在 RDS for PostgreSQL 数据库中升级 PostgreSQL 扩展

  • 如果您使用的是 aws_s3 扩展,请确保在创建绿色环境后,通过 IAM 角色向绿色数据库实例授予对 Amazon S3 的访问权限。这允许导入和导出命令在切换后继续运行。有关说明,请参阅 设置 Amazon S3 存储桶的访问权限

  • 如果您为绿色环境指定更高的引擎版本,请对所有数据库运行 ANALYZE 操作来刷新 pg_statistic 表。在主要版本升级期间不会传输优化程序统计数据,因此您必须重新生成所有统计数据,来避免出现性能问题。有关主要版本升级期间的其他最佳实践,请参阅如何执行 RDS for PostgreSQL 的主要版本升级

  • 如果在源中使用触发器来操作数据,请避免将触发器配置为 ENABLE REPLICAENABLE ALWAYS。否则,复制系统会传播更改并执行触发器,从而导致重复。

  • 长时间运行的事务可能会导致严重的副本延迟。要减少副本延迟,可考虑执行下列操作:

    • 减少长期运行的事务,这些事务可能会延迟到绿色环境赶上蓝色环境之后再运行。

    • 在创建蓝绿部署之前,对事务繁忙的表启动手动真空冻结操作。

    • 对于 PostgreSQL 12 及更高版本,请对大型表或繁忙表禁用 index_cleanup 参数,以提高蓝色数据库的正常维护速率。有关更多信息,请参阅尽快对表执行 vacuum 操作

  • 复制缓慢会导致发送方和接收方经常重启,从而延迟同步。要确保它们保持活动状态,请在蓝色环境中将 wal_sender_timeout 参数设置为 0,在绿色环境中将 wal_receiver_timeout 参数设置为 0,从而禁用超时。

  • 为防止从蓝色环境中删除预写日志(WAL)段,请将 PostgreSQL 13 及更低版本的 wal_keep_segments 参数设置为 15625。对于版本 14 及更高版本,如果有足够的可用存储空间,还可将 wal_keep_size 参数设置为 1 TiB。