【问题标题】:Does AWS load-balance connections between master and read-replica DBAWS 是否对主数据库和只读数据库之间的连接进行负载平衡
【发布时间】:2019-07-25 14:09:34
【问题描述】:

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

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

【问题讨论】:

  • 这里没有魔法。当您触发仅读取的查询时,您需要在连接字符串中使用只读副本的端点。否则,您在连接字符串中使用主节点端点来更新数据。
  • 请注意,您可能要问的实际上称为读/写拆分,而不是负载平衡

标签: amazon-web-services amazon-rds database-replication


【解决方案1】:

不幸的是,Aurora 集群的负载平衡非常有限。首先,它在连接建立的那一刻平衡连接,并且在任何情况下都不会重新平衡它们,除非连接被断开并重新打开(但这也有限制,见下文)。

其次,当 Aurora 确实分发连接时,它不会考虑已建立到每个只读副本的连接数。

第三,它使用 TTL 为 1 秒的 DNS 切换过程来实现。综上所述,不幸的是,很常见的情况是,一些副本接收到的连接比其他副本多得多。更不用说没有干燥实例以关闭等机制。

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我不是在询问扩展机制或故障转移,我编辑了问题以获得更多说明
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 2016-12-09
      • 2014-03-24
      相关资源
      最近更新 更多