gpt4 book ai didi

cassandra - token 感知 Astyanax 连接池在节点上连接而不在节点上分配连接

转载 作者:行者123 更新时间:2023-12-04 21:17:01 27 4
gpt4 key购买 nike

我使用 astyanax 连接池定义如下:

ipSeeds = "LOAD_BALANCER_HOST:9160";
conPool.setSeeds(ipSeeds)
.setDiscoveryType(NodeDiscoveryType.TOKEN_AWARE)
.setConnectionPoolType(ConnectionPoolType.TOKEN_AWARE);

但是,我的集群有 4 个节点,并且有 8 台客户端计算机连接到它。 LOAD_BALANCER_HOST将请求转发到我的四个节点之一。

在客户端节点上,我有:
$netstat -an | grep 9160 | awk '{print $5}' | sort |uniq -c
235 node1:9160
680 node2:9160
4 node3:9160
4 node4:9160

所以虽然 ConnectionPoolType 是 TOKEN_AWARE ,我的客户端似乎主要连接到 node2,有时连接到 node1,但几乎从不连接到节点 3 和 4。
问题是:
为什么会这样? token 感知连接池不应该查询节点列表的环并使用循环算法连接到所有事件节点吗?

最佳答案

William Price完全正确:事实上您使用的是 TokenAwarePolicy并且可能是默认值 Partitioner意思是
- 首先,您的数据将在您的节点之间有偏差地存储,并且
- 然后查询 LoadbalancingPolicy使您的驱动程序记住要请求的正确节点

您可以通过使用一些偏差或自定义分区器来平均分配数据来提高集群的性能。要随机查询节点,请使用

  • RoundRobinPolicy ( http://www.datastax.com/doc-source/developer/java-apidocs/com/datastax/driver/core/policies/RoundRobinPolicy.html ) 或
  • DatacenterAwareRoundRobinPolicy ( http://www.datastax.com/doc-source/developer/java-apidocs/com/datastax/driver/core/policies/DCAwareRoundRobinPolicy.html )。

  • 当然,后者需要在您的 key 空间中定义数据中心。

    在没有任何进一步信息的情况下,我建议只更改分区器,因为 TokenAware 负载平衡策略通常是一个好主意。主要负载最终会出现在这些节点上——TokenAware 策略会让你更快地找到合适的协调器。

    关于cassandra - token 感知 Astyanax 连接池在节点上连接而不在节点上分配连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20646598/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com