【问题标题】:How is Cassandra designed to avoid the need for load balancers?Cassandra 是如何设计的以避免对负载平衡器的需求?
【发布时间】:2018-10-28 06:48:29
【问题描述】:

我从official DSE doc 中读到了这篇文章,但没有深入了解如何。有人可以解释或提供任何链接吗?

【问题讨论】:

    标签: cassandra datastax-enterprise


    【解决方案1】:

    负载平衡器内置于驱动程序/连接中。例如,此处的文档中解释了 Java 驱动程序“循环”行为:

    https://docs.datastax.com/en/developer/java-driver-dse/1.6/manual/load_balancing/

    这里也有解释:

    https://docs.datastax.com/en/developer/java-driver/3.1/manual/load_balancing/

    【讨论】:

    • 如何处理跨多个数据中心的故障转移?这需要外部负载均衡器吗?
    • 如果需要,您可以将应用程序配置为转到另一个 DC - 请参阅链接文档中的示例(在两种情况下都是相同的文档)。但它是否有效,取决于一致性级别等。
    【解决方案2】:

    此类信息最好查看architecture guide

    有多个地方可以被视为某种负载平衡器。首先 - 您可以向集群中的任何节点发送请求,该节点将充当“协调器”,将请求重新发送到实际拥有数据的节点。因为这不是最优化的,驱动程序提供了所谓的令牌感知负载平衡策略,其中驱动程序能够从数据中推断出哪些节点负责处理它们,并向其中一个节点发送请求,根据其他信息选择(由其他负载平衡策略提供)。

    在多个数据中心的情况下,驱动程序和 Cassandra 本身能够在“本地”不可用的情况下向“远程”DC 发送请求(远程和本地的概念是特定于消费者的)。但在这种情况下,其他一些因素将发挥作用——例如,如果您具有LOCAL_ 一致性级别,那么您的请求将不会被发送到“远程”数据中心。

    谈到应用程序设计 - 您可以在应用程序层之前使用负载均衡器,该应用程序层将连接到其“本地”数据中心中的 Cassandra 集群,并使用LOCAL_ 一致性级别来执行它们的操作。如果其中一个 DC 发生停机,负载均衡器应停止向该 DC 中的应用层发送流量。

    【讨论】:

    • 感谢您的深刻指导!最后一部分关于应用层之前的负载均衡,有哪些常见的健康检查策略可以触发故障转移? (例如,ping Cassandra 以检查其健康状况的方法等)
    • 我真的需要考虑一下,但我可能会走从驱动程序获取错误指标的路径:docs.datastax.com/en/drivers/java/3.5/com/datastax/driver/core/…,或者如果你在应用程序中使用“断路器”模式,然后拉这个来自它的信息...但这确实是个好问题,我会将其放入我的TODO列表中进行调查... PS您也可以在 DataStax Academy Slack 频道上提问
    • 谢谢。您能否在此处回复您在调查中发现的任何内容,以便通知我?
    猜你喜欢
    • 2018-12-07
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 2017-09-21
    相关资源
    最近更新 更多