Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra 卡桑德拉:数据复制不起作用?_Cassandra - Fatal编程技术网

Cassandra 卡桑德拉:数据复制不起作用?

Cassandra 卡桑德拉:数据复制不起作用?,cassandra,Cassandra,我们有一个6节点的cassandra集群,每秒有大量的读取和很少的写入。整个应用程序包括: 使用一个cassandra节点的web应用服务器 5台web服务计算机,每台使用自己的cassandra节点(pycassa的池服务器列表始终为一个节点) 与cassandra交谈的Web应用程序正在执行读写操作(但很少,只有在有人实际使用应用程序UI时,这种情况并不经常发生)。然而,Web服务承载着来自第三方服务的大量流量。负载平衡器将流量定向到所有5台服务器,每台服务器都会用大量get()和mul

我们有一个6节点的cassandra集群,每秒有大量的读取和很少的写入。整个应用程序包括:

  • 使用一个cassandra节点的web应用服务器
  • 5台web服务计算机,每台使用自己的cassandra节点(pycassa的池服务器列表始终为一个节点)
与cassandra交谈的Web应用程序正在执行读写操作(但很少,只有在有人实际使用应用程序UI时,这种情况并不经常发生)。然而,Web服务承载着来自第三方服务的大量流量。负载平衡器将流量定向到所有5台服务器,每台服务器都会用大量get()和multiget()请求轰炸其自己的cassandra节点(该节点实际上位于另一台服务器中)。偶尔会使用set(),但这就像是每一万次读取一次

有了这种用法,我们决定使用复制因子6。如果每个cassandra都有100%的数据,那么读取速度应该更快,负载应该更均衡。我们已经更新了keyspace strategy_选项,并在每个节点上运行nodetool修复以传输数据。一切顺利

现在有一件非常奇怪的事情:所有六个cassandra节点的CPU使用率都非常高。对于web服务使用的五个节点,这是可以理解的,但我们无法解释为什么webapp cassandra节点也会消耗那么多CPU,就好像它在执行大量读取一样。这就好像复制根本不起作用一样——看起来每个cassandra节点在get()发生时都会与所有其他节点对话,整个环承受着极大的压力

我做了另一个实验来证明这一点,我关闭了一个web服务器,我正在查看相应的cassandra节点。服务器宕机后,我希望这个cassandra节点上的CPU使用率接近于零,因为没有其他机器指向它。但它不是零,它略有下降,但仍然处于非常高的水平(60%的CPU使用率)

我们使用的是pycassa,我们没有操纵一致性级别,因此它处于默认的一致性级别


我希望你明白我的意思。。。如果复制因子等于环中的节点数,并且读取一致性级别为默认值(1),则每个节点在读取方面应该是独立的:如果没有人从给定节点执行任何读取,则此节点上的CPU使用应该是最小的,对吗?然而,即使我们断开唯一一个看到该节点的客户机的连接,我们仍然观察到高CPU使用率,就好像有人仍在不断地从它读取数据一样。这个负载是从哪里来的,如何能够调查发生了什么?

如果我错了,请纠正我,但我猜您在集群中的节点上看到的负载是在后台发生的读取修复。当您在群集中的某个节点上读取ConsistenceLevel.ONE时,数据将立即返回,读取操作将在后台触发读取修复,这将向所有其他副本发送请求数据的摘要查询,以确保一致性。
由于复制系数为6(所有节点上的所有数据),因此对于每次读取,将向所有6个节点发送读取修复请求


是的,负载肯定是由读取修复引起的。解决方案是将读修复机会降低到非常接近于零的水平(如0.00001),并对写操作使用高并发级别(如5)。非常感谢,我完全忽略了读修复,没有意识到它会导致这么多负载。