在Cassandra集群中的数据中心之间添加50 ms延迟甚至会导致NoNodeSystemableException,即使是对于NodeSystemableException_SERIAL也是如此

sy5wg1nm  于 4个月前  发布在  Cassandra
关注(0)|答案(1)|浏览(45)

我试着做这个测试来了解C* 如何处理网络问题,并在每个数据包上修复延迟。Java应用程序与Datastax Java驱动程序非常简单的多个C* 集群和tc工具。
有DCA和DCB。它们中的每一个都只有C* 节点。我开始测试时只有200个请求(插入.如果不存在)到C* 在第二,但他们中的每一个在第一次尝试执行串行一致性,如果失败,第二次尝试是去与SERIAL_SERIAL。SERIAL和SERIAL_SERIAL的超时分别为400毫秒和200毫秒相应。
我使用tc工具来建模网络问题。正如已经说过的,我为从DCA节点到DCB节点的所有请求添加了50 ms的固定延迟。
但是如果我在DCA上使用200 rps的负载测试,我会在我的日志中得到很多NoNodeDataableException,即使是在Node_SERIAL尝试中。
我读了Datastax Java驱动程序的默认值。看起来它们可以用于此测试。我检查了DCA中应用程序中的接触点仅由DCA的一个节点组成。
为什么我会在这些很简单的条件下得到这种行为呢?有什么想法吗?
我的同事也得到了一些这样的例外,即使在80 rps没有网络问题。但我不知道他们的设置。

zbdgwd5y

zbdgwd5y1#

不确定写负载有多大,但这绝对会影响到它。否则,Cassandra中轻量级事务的棘手部分是,每个事务在协调器和目标节点之间做(我认为)大约4次往返。因此,这将极大地限制吞吐量本身。
另外,多数据中心的通信从来都不容易,我建议写入单个数据中心(使用QUORUM),并依靠复制来同步副本。
节点是否被标记为“down”?如果是,您可以尝试的一件事是查看每个节点上的phi_convict_threshold。Phi Convict本质上是节点通信在报告故障之前可以等待多长时间的非线性表示。我认为它默认为8,但对于我所做的大多数多DC云部署,我们不得不将其提升到12。

相关问题