切换蓝绿部署
切换将绿色环境中的数据库集群(包括其数据库实例)提升为生产数据库集群。在切换之前,生产流量将路由到蓝色环境中的集群。切换后,生产流量将路由到绿色环境中的数据库集群。
切换超时
您可以指定 30 秒与 3600 秒(一小时)之间的切换超时时间。如果切换所花的时间超过指定的持续时间,则所有更改都将回滚,并且不会对任一环境进行任何更改。原定设置的超时期间为 300 秒(5 分钟)。
切换防护机制
当您开始切换时,Amazon RDS 会运行一些基本检查,以测试蓝绿环境是否准备好进行切换。这些检查称为切换防护机制。如果环境还没有准备好进行切换,这些切换防护机制可以防止发生切换。因此,它们可以避免比预期更长的停机时间,并防止切换开始时可能导致的蓝色和绿色环境之间的数据丢失。
Amazon RDS 在绿色环境中运行以下防护机制检查:
-
复制运行状况 - 检查绿色数据库集群复制状态是否为正常运行。绿色数据库集群是蓝色数据库集群的副本。
-
复制滞后 - 检查绿色数据库集群的副本滞后是否在切换的允许范围内。允许的限制基于指定的超时期间。副本滞后表示绿色数据库集群滞后于其蓝色数据库集群的程度。副本滞后表示绿色副本可能需要多长时间才能赶上其蓝色源。有关更多信息,请参阅诊断并解决只读副本之间的滞后。
-
主动写入 - 确保绿色数据库集群上没有主动写入。
Amazon RDS 在蓝色环境中运行以下防护机制检查:
-
外部复制 - 确保蓝色的数据库集群不是外部复制的目标,以防止在切换期间写入蓝色的数据库集群。
-
长时间运行的活动写入 - 确保蓝色数据库集群上没有长时间运行的活动写入,因为它们会增加副本滞后。
-
长时间运行的 DDL 语句 - 确保蓝色数据库集群上没有长时间运行的 DDL 语句,因为它们会增加副本滞后。
切换操作
当您切换蓝绿部署时,RDS 会执行以下操作:
-
运行防护机制检查,以验证蓝色和绿色环境是否已准备好进行切换。
-
在两个环境中停止对数据库集群进行新的写入操作。
-
在这两个环境中删除与数据库实例的连接,并且不允许新的连接。
-
等待复制在绿色环境中赶上进度,以便绿色环境与蓝色环境同步。
-
重命名这两个环境中的数据库集群和数据库实例。
RDS 重命名绿色环境中的数据库集群和数据库实例,以匹配蓝色环境中相应的数据库集群和数据库实例。例如,假设蓝色环境中数据库实例的名称为
mydb
。还假设绿色环境中相应的数据库实例的名称为mydb-green-abc123
。在切换期间,绿色环境中数据库实例的名称更改为mydb
。RDS 通过在当前名称后面附加
-old
(其中n
是一个数字)来重命名蓝色环境中的数据库集群和数据库实例。例如,假设蓝色环境中数据库实例的名称为n
mydb
。切换后,数据库实例名称可能为mydb-old1
。RDS 还重命名绿色环境中的端点,以匹配蓝色环境中的相应端点,以便无需更改应用程序。
-
允许在这两种环境中连接到数据库。
-
允许在新的生产环境中对数据库集群进行写入操作。
切换后,先前的生产数据库集群仅允许读取操作,直到写入器实例重启为止。
您可以使用 Amazon EventBridge 监控切换的状态。有关更多信息,请参阅蓝绿部署事件。
如果您在蓝色环境中配置了标签,则这些标签将在切换期间移至新的生产环境。之前的生产环境也保留这些标签。有关标签的更多信息,请参阅 为 Amazon RDS 资源添加标签。
如果切换开始后由于任何原因在完成之前停止,则所有更改都将回滚,并且不会对任一环境进行任何更改。
切换最佳实践
在切换之前,我们强烈建议您通过完成以下任务来遵循最佳实践:
-
在绿色环境中彻底测试资源。确保它们正常高效地运行。
-
监控相关的 Amazon CloudWatch 指标。有关更多信息,请参阅在切换之前验证 CloudWatch 指标。
-
确定最佳切换时间。
在切换期间,两个环境中的数据库都会切断写入操作。确定生产环境中流量最低的时间。长时间运行的事务(例如活动的 DDL)会延长您的切换时间,从而延长生产工作负载的停机时间。
如果您的数据库集群和数据库实例上有大量连接,请考虑在切换蓝绿部署之前,手动将连接减少到应用程序所需的最低数量。实现此目标的一种方法是创建一个脚本,该脚本监控蓝绿部署的状态,并在检测到状态已更改为
SWITCHOVER_IN_PROGRESS
时开始清理连接。 -
确保两个环境中的数据库集群和数据库实例均处于
Available
状态。 -
确保绿色环境中的数据库集群运行状况良好且正在复制。
-
确保您的网络和客户端配置不会将 DNS 缓存存活时间(TTL)增加到五秒以上,这是 Aurora DNS 区域的原定设置值。 否则,应用程序将在切换后继续向蓝色环境发送写入流量。
注意
在切换期间,您无法修改切换中包含的任何数据库集群。
在切换之前验证 CloudWatch 指标
当您切换蓝绿部署时,我们建议您检查 Amazon CloudWatch 中以下指标的值。
-
AuroraBinlogReplicaLag
– 使用此指标来确定绿色环境中当前的复制滞后。要减少停机时间,请在切换之前确保此值接近零。 -
DatabaseConnections
– 使用此指标估算蓝绿部署上的活动水平,并在切换之前确保该值处于部署的可接受水平。如果开启了“性能详情”,则DBLoad
是更准确的指标。 -
ActiveTransactions
– 如果在任何数据库实例的数据库参数组中innodb_monitor_enable
设置为all
,请使用此指标来查看是否存在大量可能阻止切换的活跃事务。
有关这些指标的更多信息,请参阅 Amazon Aurora 的 Amazon CloudWatch 指标。
切换蓝绿部署
您可以使用 Amazon Web Services Management Console、Amazon CLI 或 RDS API 切换蓝绿部署。
切换蓝绿部署
登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择 Databases(数据库),然后选择要切换的蓝绿部署。
-
对于 Actions(操作),选择 Switch over(切换)。
将出现 Switch over(切换)页面。
-
在 Switch over(切换)页面上,查看切换摘要。确保两个环境中的资源都符合您的期望。如果不符合预期,请选择 Cancel(取消)。
-
对于 Timeout(超时),输入切换的时间限制。
-
选择 Switch over(切换)。
要使用 Amazon CLI 切换蓝绿部署,请使用带有以下选项的 switchover-blue-green-deployment 命令:
-
--blue-green-deployment-identifier
– 指定蓝绿部署的标识符。 -
--switchover-timeout
– 指定切换的时间限制,以秒为单位。原定设置值为 300。
例 切换蓝绿部署
对于 Linux、macOS 或 Unix:
aws rds switchover-blue-green-deployment \ --blue-green-deployment-identifier
bgd-1234567890abcdef
\ --switchover-timeout600
对于 Windows:
aws rds switchover-blue-green-deployment ^ --blue-green-deployment-identifier
bgd-1234567890abcdef
^ --switchover-timeout600
要使用 Amazon RDS API 切换蓝绿部署,请使用带有以下参数的 SwitchoverBlueGreenDeployment
操作:
-
BlueGreenDeploymentIdentifier
– 指定蓝绿部署的标识符。 -
SwitchoverTimeout
– 指定切换的时间限制,以秒为单位。原定设置值为 300。
切换后
切换后,将保留先前蓝色环境中的数据库集群和数据库实例。标准成本适用于这些资源。蓝色和绿色环境之间的复制和二进制日志记录会停止。
RDS 通过在当前资源名称后面附加 -old
(其中 n
是一个数字)来重命名蓝色环境中的数据库集群和数据库实例。数据库集群在其写入器实例重启之前是只读的。n