Cassandra 最佳实践:在 Cassandra 前面添加 Ha Proxy 是个好主意吗?

Cassandra best practices : it is a good idea to add Ha Proxy in front of Cassandra?

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

Token-aware policy is used to reduce network hops whenever possible by sending requests directly to the node that owns the data.

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

This policy provides round-robin queries over the node of the local data center. It also includes in the query plans returned a configurable number of hosts in the remote data centers

问题:

似乎通过客户端驱动程序配置,已经可以实现 HighAvailability、LoadBalancing 和 TokenAware。

谢谢

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

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

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

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

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

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

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