【问题标题】:Achieving read and write query availability in AWS Multi-AZ RDS在 AWS 多可用区 RDS 中实现读写查询可用性
【发布时间】:2016-08-07 05:28:16
【问题描述】:

我在开发环境中配置了没有只读副本的多可用区 RDS mysql 实例,我正在通过重启数据库实例来测试多可用区 RDS 故障转移。

以下是我的观察: 在 RDS 故障转移期间,客户端应用程序不会丢失连接,但同时它也无法访问数据库,并且一旦故障转移完成后,客户端将能够访问数据库。

更新1:以上观察是错误的。我刚才观察到的是,在故障转移完成后,我遇到错误并导致连接终止。

    ERROR 2003 (HY000): Can't connect to MySQL server on 'rds-test.czswqpewzqas.---------.amazonaws.com' (110)

简而言之,在多可用区 mysql 实例重新启动期间,我的查询失败了。 有谁知道,我在这里缺少什么。

更新 - 实现读取可用性:现在我为多可用区 mysql 实例创建了一个只读副本,并在遇到上述错误时,将“选择查询”重定向到只读副本实例。 p>

所以,使用只读副本我能够实现读取可用性。这是正确的方法吗?想知道是否有其他方法可以做到这一点。

另外,如何在多可用区 RDS 中实现写入可用性

【问题讨论】:

标签: amazon-web-services amazon-rds failover


【解决方案1】:

您的观察是正确的。在故障转移期间,TCP 连接会丢失,这是故障转移到辅助数据库和在 DNS 中切换 IP 地址的时间。

这取决于应用程序

a/ 尝试使用指数回退重新连接。几分钟内就可以重新连接。

b/ 决定故障转移期间的行为。

读取事务 (SELECT) 可以移交给只读副本。现代 JDBC 和 ODBC 驱动程序能够自己处理只读副本,只需提供副本的 IP 地址/DNS 名称列表。驱动程序将自动应用负载平衡。无需更改代码。

写事务处理起来更复杂,并且没有适用于所有应用程序的单一答案。正确答案取决于您的应用和业务需求。

一些客户决定阻止所有写入操作,向最终用户返回一条错误消息,要求他们在几分钟后重试。

一些客户正在 SQS 队列中排队写入事务。他们开发了一个队列读取器应用程序,以在主数据库再次可用时刷新待处理的事务。 (根据工作负载,也可以使用 S3 或 DynamoDB)。当然,在故障转移期间和故障转移后的短时间内,您的数据将不一致,即刷新所有挂起的写入所需的时间。

请随时评论现实世界场景中使用的其他策略。

【讨论】:

    猜你喜欢
    • 2020-08-23
    • 1970-01-01
    • 2014-07-23
    • 2019-06-23
    • 2019-03-21
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多