我是否应该担心Cassandra c++驱动程序的负载平衡选择?

Should I be worried about the load balancing choices of the Cassandra C++ driver?

本文关键字:负载 平衡 选择 驱动程序 c++ 是否 担心 Cassandra      更新时间:2023-10-16

我有一个4个节点的小型Cassandra集群,运行Cassandra 3.9。

我将4个IP地址传递给connect()函数,当我检查与netstat -a4n | grep 9042的连接时,我可以看到它们都连接了。请注意,我是否通过1个IP或4到connect(),结果是相同的,一旦完全连接,包括双连接到10.0.1.1节点…(10.0.1.1和10.0.1.3是种子,但不知何故只有10.0.1.1有双重连接,所以我不太确定为什么会发生这种情况,我试图洗牌用于连接的ip列表,再一次,它最终没有区别。)

tcp        0      0 10.0.0.1:45012      10.0.1.3:9042      ESTABLISHED
tcp        0      0 10.0.0.1:48400      10.0.1.4:9042      ESTABLISHED
tcp        0      0 10.0.0.1:51514      10.0.1.2:9042      ESTABLISHED
tcp        0      0 10.0.0.1:56460      10.0.1.1:9042      ESTABLISHED
tcp        0      0 10.0.0.1:56452      10.0.1.1:9042      ESTABLISHED

当我查看nodetool status的输出时,它看起来很好:

Datacenter: dc1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address   Load       Tokens       Owns (effective)  Host ID  Rack
UN  10.0.1.1  7.92 MiB   256          76.1%             (id)     rack1
UN  10.0.1.4  12.26 MiB  256          77.7%             (id)     rack1
UN  10.0.1.3  10.08 MiB  256          72.2%             (id)     rack1
UN  10.0.1.2  8.77 MiB   256          74.0%             (id)     rack1

(注意:我删除了ID,它们在这里没有用)。

然而,在网络方面,当我看到传输到这些机器的数据量时,我看到了巨大的差异。我使用iptables -L -nvx命令,令我惊讶的是,我向第一个Cassandra节点发送了大约3倍的数据包和近20倍的数据:

6856 13581751 RETURN     all  --  eth1   *  10.0.1.1    0.0.0.0/0
2736   816810 RETURN     all  --  eth1   *  10.0.1.2    0.0.0.0/0
2831   807426 RETURN     all  --  eth1   *  10.0.1.3    0.0.0.0/0
2745   806023 RETURN     all  --  eth1   *  10.0.1.4    0.0.0.0/0

(6856/2736 = 2.51 and 13581751/806023 = 16.85)

我想在某种程度上,只要节点不忙,这并不重要,但我仍然想知道为什么我会看到如此巨大的差异?为什么不是所有4个连接都以相同的级别参与?

驱动程序将使用接触点作为初始连接点来设置连接池。在此之后,将根据您的模式拓扑、本地平衡策略和池选项创建池。这里有一些有用的文档作为参考(如果你已经看过了,很抱歉):

http://datastax.github.io/cpp-driver/topics/

http://datastax.github.io/cpp-driver/topics/configuration/

额外的流量很可能是驱动程序使用的控制连接,它使自己与模式拓扑保持最新,以帮助驱动程序的工作方式:

http://datastax.github.io/cpp-driver/topics/basics/schema_metadata/