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
2节点Cassandra群集中的故障切换和复制_Cassandra_Cassandra 2.0_Kairosdb - Fatal编程技术网

2节点Cassandra群集中的故障切换和复制

2节点Cassandra群集中的故障切换和复制,cassandra,cassandra-2.0,kairosdb,Cassandra,Cassandra 2.0,Kairosdb,我在一个2节点Cassandra集群上运行KairosDB,RF=2,Write CL=1,Read CL=1。如果2个节点处于活动状态,客户端将一半数据发送到节点1(例如,度量值从度量值_1到度量值_5000),另一半数据发送到节点2(例如,度量值从度量值_5001到度量值_10000)。理想情况下,每个节点始终具有所有数据的副本。但如果一个节点死了,客户机会将所有数据发送到活动节点 客户端开始向群集发送数据。30分钟后,我关闭节点2 10分钟。在这10分钟内,客户端将所有数据正确地发送到节点

我在一个2节点Cassandra集群上运行KairosDB,RF=2,Write CL=1,Read CL=1。如果2个节点处于活动状态,客户端将一半数据发送到节点1(例如,度量值从度量值_1到度量值_5000),另一半数据发送到节点2(例如,度量值从度量值_5001到度量值_10000)。理想情况下,每个节点始终具有所有数据的副本。但如果一个节点死了,客户机会将所有数据发送到活动节点

客户端开始向群集发送数据。30分钟后,我关闭节点2 10分钟。在这10分钟内,客户端将所有数据正确地发送到节点1。之后,我重新启动节点2,客户端继续正确地向2个节点发送数据。一小时后,我停止了客户

我想检查节点2死后发送到节点1的数据是否已自动复制到节点2。为此,我关闭了节点1,并在节点2与节点2断开的时间内查询数据,但它没有返回任何结果。这让我觉得数据没有从节点1复制到节点2。我贴了一个问题。数据似乎是自动复制的,但速度太慢了

我希望两台服务器中的数据是相同的(出于冗余目的)。这意味着节点2失效时发送到系统的数据必须在节点2可用后自动从节点1复制到节点2(因为RF=2)

我这里有几个问题:

1) 复制真的很慢吗?还是我配置了错误的东西

2) 如果客户端向每个节点发送一半的数据,如本问题所述,我认为可能会丢失数据(例如,节点1从客户端接收数据,而节点1正在向节点2复制数据时,数据突然下降)。我说得对吗

3) 如果在2)中我是对的,我将这样做:客户端将所有数据发送到两个节点。这可以解决2)个问题,并且在一个节点已死亡且稍后可用时,还可以利用复制的优势。但我想知道,这会导致数据重复,因为两个节点都接收相同的数据。这里有什么问题吗


谢谢大家!

能否检查cassandra.yaml配置文件中启用的提示切换值

对于您的问题:是的,在某些情况下您可能会丢失数据,直到完全实现复制为止,Cassandra并不是在进行后期复制—有三种机制

  • 暗示移交
  • 修理-
  • 阅读维修-这些可能对您的用例没有多大帮助-
好的,如果您运行的是大于0.8的版本,则提示的切换应该在节点重新启动后复制数据,而无需修复,除非数据太旧(10分钟内不应如此)。我不知道为什么这些切换在重启时没有发送到您的副本节点,它值得一些调查

否则,当您重新启动节点时,可以通过运行修复(例如,通过运行nodetool修复)强制Cassandra确保数据一致

根据您的描述,我感觉您正在混淆协调器节点和获取数据的节点(即使这两个节点持有数据,区别也很重要)


顺便说一句,您所描述的节点1和节点2之间的度量分片的客户端行为是什么?KairosDB和Cassandra都不是这样工作的,是您自己的客户机向不同的KairosDB实例发送度量吗

Cassandra分区不是在度量名称上创建的,而是在行键上创建的(分区键完全相同,但与kairosDB相同)。因此,每3周,每个唯一系列的数据都将基于哈希代码关联一个令牌,该令牌将用于集群上的分片/复制。 KairosDB能够与多个节点通信,并作为协调节点在这些节点之间进行循环


我希望这会有所帮助。

“您所描述的节点1和节点2之间的度量值分片的客户端行为是什么?”->我只想做一些类似于负载平衡的事情。“是您自己的客户端向不同的KairosDB实例发送度量数据吗?”->在node1上的KairosDB.properties中,我刚刚配置了“KairosDB.datastore.cassandra.host_list=node1.hdsrcluster:9160”,在node2上的KairosDB.properties中,我刚刚配置了“KairosDB.datastore.cassandra.host_list=node2.hdsrcluster:9160”。然后我在两个节点上通过“KairosDB.sh start”运行KairosDB。我这样做对吗?好的,我明白。是的,这很好,推送数据的客户机正在进行负载平衡。这让我问了一个问题:当节点2关闭时,您是否检查数据是否正确填充到Cassandra中?是的,确实如此。但是,正如我提到的,它非常缓慢。也许我需要更快的速度,或者我需要手动运行“nodetool修复”。顺便说一句,让我们忘记我的系统模型,你能建议我KairosDB+Cassandra的任何系统模型,它可以根据需要处理故障转移(即,无论一台服务器是否停机)和“延迟”复制吗?(也就是说,如果服务器(例如节点2)宕机后又重新启动,“丢失”的数据将很快从节点1同步到节点2。我需要这一点,因为如果在节点1宕机后,我不会丢失任何数据)并且,只有2个节点。正如我所说,我很惊讶,在使用暗示的切换重新启动节点2后,您没有快速复制数据。是否在cassandra.yaml中启用了该功能?你用的是什么版本的卡桑德拉?如果启用了它,这听起来像是Cassandra开发人员的一个问题。