使用 Amazon RDS 代理与 Amazon RDS Multi-AZ 部署,停机 1 秒内维护和升级!

a4af3c1d34eea5fa5b73bf0c1952df36.gif

结合使用 Amazon Relational Database Service(RDS) 代理时,具有两个可读备用数据库的 Amazon RDS Multi-AZ 部署现在支持次要版本升级和系统维护更新,而停机时间通常为 1 秒或更短时间。在这篇博文中,我们将讨论这项新功能及其优点和设置步骤。

Amazon RDS 代理

https://aws.amazon.com/rds/proxy/

具有两个可读备用数据库的 

Amazon RDS Multi-AZ 部署

2022 年 3 月,亚马逊云科技在 Amazon RDS for PostgreSQL 和 Amazon RDS for MySQL 中推出了具有两个可读备用数据库的 Amazon  RDS Multi-AZ 部署。

Amazon Relational Database Service(RDS)Multi-AZ 部署

https://aws.amazon.com/about-aws/whats-new/2022/03/amazon-rds-multi-az-transaction-commit-latency/

这种新的部署选项由一个主数据库实例和两个可读备用数据库实例(即多可用区数据库集群)组成。在此配置中,集群的每个节点都使用高速直连的 NVMe 卷和 Amazon Elastic Block Store(Amazon EBS)卷。

Amazon Elastic Block Store

http://aws.amazon.com/ebs

写入操作最初会写入 NVMe 卷,而不是提交路径中的 Amazon EBS,从而降低延迟。然后,这些写入操作会异步写入 Amazon EBS 卷,以保证持久性。除这种性能提升外,此部署选项还使两个备用节点都能为读取流量提供服务。

Amazon RDS 代理

2020 年 6 月,亚马逊云科技推出了 Amazon RDS 代理。Amazon RDS 代理有很多优点。第一个优点是连接入池。对于某些应用程序来说,连接入池是一项挑战。

Amazon RDS 代理

https://aws.amazon.com/rds/proxy/

连接入池

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-proxy.howitworks.html#rds-proxy-connection-pooling

通过使用这项 Amazon RDS 代理功能,现在可以分配原本用于协商 TCP 和 TLS 握手以及身份验证的数据库资源,来运行更多查询。应用程序现在可以连接到 Amazon RDS 代理,Amazon RDS 代理将维护一个与数据库的连接池,从而减轻原本会加在数据库服务器上的负担。

Amazon RDS 代理的另一个优点与连接相关,就是连接多路复用。有了这项功能,无论应用程序与代理建立了多少个连接,Amazon RDS 代理都只会与数据库实例建立所需数量的数据库连接。通过保持较低的数据库实例连接数,可以在相同的应用程序连接数下使用较少的资源。

连接多路复用

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-proxy.howitworks.html#rds-proxy-overview

Amazon RDS 代理的第三个功能是能够实现快速失效转移。根据我们的测试,Amazon RDS 代理可以缩短失效转移后的客户端恢复时间。造成这种情况的因素有很多。

失效转移

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-proxy.howitworks.html#rds-proxy-failover

测试

https://aws.amazon.com/blogs/database/improving-application-availability-with-amazon-rds-proxy/

首先,当 Amazon RDS 上发生失效转移时,底层主机及其 IP 地址会发生变化。这意味着,不使用 Amazon RDS 代理的应用程序将需要与数据库服务器建立新的 TCP 连接。使用 Amazon RDS 代理时,应用程序会自行维护与代理的 TCP 连接。

某些应用程序(通常是用 Java 编写的应用程序)缓存集群端点的 CNAME 的时间超过了公告的 TTL。在这种情况下,即使集群已完全失效转移,应用程序也无法连接到新的写入器,因为它仍在使用缓存的端点。有了 Amazon RDS 代理,就不需要更改 CNAME,因此这个问题也就迎刃而解了。

除了连接入池、连接多路复用和更快的失效转移外,还需要注意的是,Amazon RDS 代理是完全托管的、无服务器的,该代理在应用程序和数据库实例之间增加了一层抽象层,从而提供了额外的安全性。

解决方案概览

目前,Amazon RDS for PostgreSQL 或 Amazon RDS for MySQL 数据库的次要版本升级或系统维护更新可能需要几分钟时间,而且需要计划内停机。

定制的升级解决方案不是完全自动化的,在数据库实例集中使用也很复杂,因为它们需要在不同的应用程序用户之间进行协调,需要额外的基础设施,需要大量的资源,而且构建成本高昂。

Amazon RDS Multi-AZ 数据库(DB)集群现在可以执行次要版本升级,停机时间通常不超过 35 秒。对停机时间有更严格要求的客户可以通过添加 Amazon RDS 代理,将停机时间进一步缩短到 1 秒或更短时间。

在 Amazon RDS Multi-AZ DB 集群上打补丁或进行次要版本升级时,首先要将补丁依次应用到每个读取器。读取器升级后,其中一个读取器成为新的写入器,原写入器成为读取器。当读取器和写入器切换角色时,就会出现停机时间。

有了 Amazon RDS Multi-AZ DB 集群,停机时间现在通常不到 35 秒。其中大部分时间是由于集群端点的域名系统(DNS)传播延迟造成的。

集群端点

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts-connection-management.html#:~:text=AZ%20DB%20cluster%3A-,Cluster%20endpoint,DB%20cluster%20has%20one%20cluster%20endpoint%20and%20one%20writer%20DB%20instance.,-You%20use%20the

域名系统(DNS)

https://aws.amazon.com/route53/what-is-dns/

Amazon RDS 代理可直接感知读取器和写入器角色的变化,而不依赖于导致 35 秒延迟的 DNS 传播。因此,Amazon RDS 代理与 Amazon RDS Multi-AZ DB 集群一起使用时,停机时间通常为 1 秒或更短时间。

现在,我们已经研究了如何在 1 秒或更短的时间内完成次要版本升级,让我们来看看如何使用 Amazon RDS Multi-AZ DB 集群设置 AmazonRDS 代理。

使用新的 Amazon RDS Multi-AZ DB 

集群设置 Amazon RDS 代理

要设置 Amazon RDS Multi-AZ DB 集群和 Amazon RDS 代理,请完成以下步骤:

1.在 Amazon RDS 控制台上,选择创建数据库

b1842bd410572933b8152bc2babd0015.png

2.对于引擎类型,选择 MySQL 或 PostgreSQL

3.在隐藏筛选器下,选择显示支持多可用区数据库集群的版本

4.对于引擎版本,选择您的首选版本。

975ab482424293ef258d8df7d8382216.png

5.在可用性和持久性下,选择多可用区数据库集群。

b5fcf251bb28b3057b25d43915bbe09b.png

6.在连接下,对于 AmazonRDS 代理,选择创建 Amazon RDS 代理。

d7e6cc305b70d650d7085a885665b97c.png

7.选择创建数据库。

此过程还会在 Amazon Secrets Manager 中创建一个密钥,并创建一个 Amazon Identity and Access Management(IAM)策略来访问该密钥,以便与新创建的代理一起使用。创建这些资源后,可以在代理详细信息页面的代理端点部分找到读/写和只读端点。

Amazon Secrets Manager

https://aws.amazon.com/secrets-manager/

Amazon Identity and Access Management

https://aws.amazon.com/iam/

使用现有的 Amazon RDS Multi-AZ 

DB 集群设置 Amazon RDS 代理

要使用现有的 Amazon RDS Multi-AZ DB 集群设置 Amazon RDS 代理,请完成以下步骤:

1.在 Amazon RDS 控制台上,选择代理

819b69b75991027c12a20110ab9af36e.png

2.选择创建代理。

25bc195825271f344f831ce3b1c86f37.png

3.在代理配置下,选择 MariaDBMySQL 或 PostgreSQL,然后在“代理标识符”字段中输入新 Amazon RDS 代理的名称。

1d883eee095fdfb8d242d69e4fdc5550.png

4.在目标组配置下,选择要为其创建此 Amazon RDS 代理的 Amazon RDS Multi-AZ DB 集群。

4478e6aab2cd0e1ed908da95a5aceabe.png

5.在身份验证下,指定包含此代理将用于连接到 Amazon RDS Multi-AZ DB 集群的凭证的 Secrets Manager 密钥,以及此代理将用于读取此密钥的 Amazon IAM 角色。

0b7283ad4f03f0b5bd984143775530f9.png

6.选择创建代理

b11c0297b201d3d2e13183e927ce650d.png

按照这篇博文中的步骤操作后,请务必清理所有不再使用的资源。您可以在亚马逊云科技文档中找到有关 Amazon RDS 代理、Amazon RDS Multi-AZ DB 集群、Amazon IAM 策略和 Amazon Secrets Manager 密钥的说明。

Amazon RDS 代理

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-proxy-managing.html#rds-proxy-deleting

Amazon RDS Multi-AZ DB 集群

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_DeleteMultiAZDBCluster.Deleting.html

Amazon IAM 策略

https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-delete.html

Amazon Secrets Manager 密钥

https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_delete-secret.html

总结

在这篇博文中,我们研究了如何将 Amazon RDS 代理与 Amazon RDS Multi-AZ DB 集群配合使用,从而在读取器实例没有副本滞后的情况下实现通常为 1 秒或更短的停机时间。

此解决方案可以提供额外的优点,如连接入池和连接多路复用,从而优化数据库资源。

有关更多信息,请参阅 Amazon RDS Multi-AZ 部署中的可读备用实例:新的高可用性选项,立即开始使用 Amazon RDS 代理!

Amazon RDS Multi-AZ 部署中的可读备用实例:新的高可用性选项

https://aws.amazon.com/blogs/database/readable-standby-instances-in-amazon-rds-multi-az-deployments-a-new-high-availability-option/

本篇作者

04ab84e6afa126b97719f2def4cb1c4a.jpeg

Steve Abraham

亚马逊云科技首席解决方案架构师。他与客户一起工作,提供有关数据库项目的指导和技术协助,协助客户在使用亚马逊云科技的服务时提高其解决方案的价值。

c2050576e8ae2b9f3cdcd5e4c0ecc531.png

34ba38b5b5d742e9a5ee8e963f43d60a.gif

星标不迷路,开发更极速!

关注后记得星标「亚马逊云开发者」

听说,点完下面4个按钮

就不会碰到bug了!

ae31044c2a0216e96e220b0408ee76bc.gif

点击阅读原文查看博客!获得更详细内容!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值