2016-03-08 64 views
0

我有一个Cassandra集群,每个集群有3个数据中心,每个节点有6个节点 - DC1,DC2和DC3 like this。假设我有一个NetworkTopologyStrategy,同时创建了一个密钥空间,Cassandra:整个数据中心发生故障时会发生什么?

CREATE KEYSPACE test WITH REPLICATION = {'class':'NetworkTopologyStrategy','DC1':3,'DC2':3,'DC3':3 }

它确保任何写入都在每个数据中心的3个节点上复制,只有写入成功后才会写入。

如果整个数据中心出现故障,会发生什么情况?

假设Dc3中的所有节点都关闭了!在这种情况下,即使使用写一致性级别为1的写请求来更新表(一致性级别:必须将写入写入至少一个副本节点的提交日志和memtable。我认为它需要是写入每个数据中心的至少一个节点)。会失败吗?此请求将尝试更新DC3中的至少3个节点,因为所有节点都处于关闭状态,所以无法进行更新。

https://docs.datastax.com/en/cassandra/2.0/cassandra/architecture/architectureDataDistributeReplication_c.html

回答

1

如果您正在使用的其中一个写入数据的一致性程度就不会失败写作。

说明:

你的密钥空间指定保证会有你的每一行数据的9份每个数据中心3个副本。 当您在CONSISTENCY LEVEL of ONE编写时,一旦数据写入单个节点的memtable和commitlog(只有一个节点,而不是每个数据中心一个节点),协调器将会成功。

那么复制品会发生什么?数据存储为hinted hintoff(默认3小时),一旦节点启动就会复制数据(在您的情况下,数据中心3启动)。如果节点在3小时前没有启动,那么它将尝试使用builtin repair mechanism来修复数据。

这是确保所有写入在每个 数据中心3个节点仅复制之后,写入成功

,如果你是一致性LEVEL ONE写你的这个说法根本经不起如此。

有关 Multiple Datacenter Write的更多详情。在每个数据中心

三个副本:此配置在LOCAL_QUORUM或每使用一致性一级数据 中心的多个节点故障的强 一致性水平容忍 或者每复制组的一个节点的故障。