在Amazon RDS中如何在读写分离实例和写实例之间切换服务器?

5
我正在使用亚马逊Aurora,有两个默认的数据库服务器: 读取实例和写入实例。
我的应用程序连接到主连接端点
sample.cluster-sample.us-west-2.rds.amazonaws.com
然而,我的应用程序突然无法将数据写入数据库,我发现副本(sample-instance-r1)已成为写入实例。
我的应用程序使用Node.js编写,并使用mysql插件和连接池。如何避免Amazon RDS切换写入实例,从而无法写入数据?

我也遇到过这种情况。你找到解决方法了吗?AWS支持团队能帮忙解决吗? - LNI
在我的经验中,我观察到在RDS上高频的连接和读取操作可能会导致数据库故障并切换到另一个副本。如果您遇到类似的问题,可以检查一下您的RDS的流量是否是根本原因。@LNI - Ken Yip
1个回答

2

由于故障转移,集群终端地址不会改变

为了使用一个连接字符串,即使故障转移提升了一个新的主实例,它仍然保持不变,您需要连接到集群终端。 集群终端始终代表集群中当前的主实例

因此,当您使用集群终端时,通常不会发生您所描述的情况(不包括完成故障转移所需的时间)。因此,请确保您的应用程序实际上正在使用该终端,因为Aurora有多个终端点


我正在连接主要的端点。我发现数据库已经故障转移至另一个端点,因此原始端点已成为读实例,但似乎node.js mysql插件没有注意到这一点。我选择对应用程序执行健康检查,如果无法将数据写入数据库,则重新启动它。我不认为这是一个好的解决方案,但我不知道该怎么处理。 - Ken Yip
@KenYip 你必须使用集群端点。只有这个端点才能防止你所描述的情况发生。 - Marcin
2
我会确认这个答案在技术上是正确的,但对于回答“通常发生”的问题是无效的。问题在于这种情况刚刚发生在我和我的整个团队身上,打破了我们所有的设置,所以不应该发生,但却因为某种奇怪的原因发生了。 - Barkermn01
@Barkermn01,你们的团队是如何解决这个问题的? - Christian
@Christian 我使用SDK从RDS AWS API读取值,在我的情况下,我使用了预加载部分,因此在导出给Lambda的方法之上。 - Barkermn01
不是最好的方法,但我们通过手动故障转移写入实例从aws门户的操作中切换回了原始角色。 - Charalamm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接