【问题标题】:Cassandra best practices : it is a good idea to add Ha Proxy in front of Cassandra?Cassandra 最佳实践:在 Cassandra 前面添加 Ha Proxy 是个好主意吗?
【发布时间】:2021-11-17 14:27:55
【问题描述】:

据我了解,Datastax 驱动程序是TokenAware

令牌感知策略用于通过直接向拥有数据的节点发送请求来尽可能减少网络跳数。

驱动程序还有一些DCAwareRoundRobinPolicy,以便在需要时查询其他数据中心,并重新分配负载:

此策略提供对本地数据中心节点的循环查询。它还包括在查询计划中返回的远程数据中心中可配置数量的主机

问题:

看来通过客户端驱动配置,已经可以做HighAvailability、LoadBalancing和TokenAware了。

  • 关于这些元素,您认为在 Cassandra 之上添加 HaProxy 仍然是一个好习惯吗?

  • 如果第一个问题是,我可以放弃TokenAware 属性吗?

  • 如果第一个问题是,联络点是否会继续向 java 驱动程序发送正确的拓扑(节点的 IP/主机列表)?

谢谢

【问题讨论】:

    标签: cassandra datastax datastax-enterprise datastax-java-driver


    【解决方案1】:

    通常不建议在 Cassandra 之前使用代理 - TokenAware 负载平衡策略将开箱即用(如果您使用准备好的语句)。除了选择正确的副本外,还会考虑节点的状态等。

    代理的问题是,在第一次联系之后,驱动程序会收到集群中所有节点的列表,所以驱动程序无论如何都会尝试使用这些节点,而不是代理节点(直到你使用白名单代码负载平衡策略,或者您实现了地址转换功能)。

    【讨论】:

      【解决方案2】:

      在 Cassandra 前面放置硬件或软件负载平衡器不是一个好主意。虚拟 IP 也是如此。

      正如您已经指出的,Cassandra 驱动程序使用内置的负载平衡策略,并且了解集群拓扑,包括节点的运行状况。当您在驱动程序和集群之间放置负载均衡器或 VIP 时,驱动程序将失去智能路由请求的能力。

      例如,如果您使用 Java 驱动程序,默认情况下,驱动程序使用负载平衡策略,将查询路由到本地数据中心,并使用令牌感知策略将请求路由到拥有正在查询的数据。

      驱动程序知道集群中的节点,因为它连接到接触点(节点 IP 地址列表)以在启动时建立控制连接。驱动程序使用控制连接来执行包括查询系统表以了解集群拓扑的任务。使用控制连接,驱动程序还可以自动监听集群的变化,以便实时了解节点添加、节点中断、新数据中心和停用等情况。

      由于这些原因,不建议使用外部负载平衡器或 DNS 虚拟 IP,因为它会影响驱动程序以最佳方式运行的能力。干杯!

      【讨论】:

        猜你喜欢
        • 2021-11-18
        • 2015-03-25
        • 2016-05-19
        • 2015-07-13
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        • 2018-11-24
        • 1970-01-01
        相关资源
        最近更新 更多