在AWS Multi-AZ RDS中实现读写查询可用性

时间:2016-04-15 09:49:07

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

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

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

您的观察结果是正确的。故障转移期间,TCP连接丢失,故障转移到辅助数据库以及切换DNS中的IP地址。

取决于

的应用程序

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

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

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

写入事务处理起来比较复杂,并且没有针对所有应用程序的单一答案。正确的答案取决于您的应用程序和业务要求。

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

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

请随意评论实际场景中使用的其他策略。