AWS 是否负载平衡主数据库和只读副本数据库之间的连接

Does AWS load-balance connections between master and read-replica DB

我为 RDS 实例创建了一个只读副本,AWS 是自动处理负载平衡还是需要在代码中进行其他配置或实现?如果是这样,是否有参考资料?

编辑以获得更多说明 当我创建只读副本时,它将如何工作和处理请求? 我问是因为它给了我一个端点,所以必须有一种实现才能正常工作,对吗? (与主 RDS 一起)

AWS 自动处理 RDS 故障转移,而不是复制时的负载平衡。您可以使用以下方法配置只读副本之间的负载平衡:

Amazon 通过特定的负载平衡端点提供连接 load balancing for RDS Aurora 数据库集群。对于任何其他 RDS 数据库配置,您必须自己处理连接。

Edit for more clarification When I create a read-replica how it's going to work and handle requests ? I'm asking because it gives me an endpoint, so there must be a sort of implementation for it work properly right? (alongside the master RDS)

此时您只有 2 个数据库服务器,每个服务器都有一个单独的端点 URL,您可以连接到该端点。亚马逊正在为您保持这些服务器之间的数据同步,仅此而已。这里没有发生负载平衡。您似乎在假设这里发生的事情比实际发生的要多。如果您使用的是 Aurora 以外的 RDS 数据库引擎,则必须自己实现负载平衡。

遗憾的是,Aurora 集群的负载均衡非常有限。首先,它会在建立连接时平衡连接,并且在任何情况下都不会重新平衡它们,除非连接断开并重新打开(但这也有局限性,见下文)。

其次,当 Aurora 确实分配连接时,它没有考虑到每个只读副本已经建立的连接数。

第三,它使用TTL为1秒的DNS切换过程。由于上述所有原因,不幸的是,当某些副本接收到比其他副本多得多的连接时,这是非常常见的情况。更不用说缺少关闭实例的干燥机制等

由于上述所有限制和高度不平衡的负载,我们为 MySQL 和 PostgreSQL 开发了 fairlink JDBC 驱动程序(或者更确切地说是 envelop-driver)。您可以在这里找到它:https://github.com/DiceTechnology/dice-fairlink