Cassandra 卡桑德拉的复制
在Cassandra中复制是如何工作的?如果我有3个机架和3个RF,带有Cassandra 卡桑德拉的复制,cassandra,cassandra-2.0,Cassandra,Cassandra 2.0,在Cassandra中复制是如何工作的?如果我有3个机架和3个RF,带有NetworkTopologyStratagy,那么数据是否会复制到所有3个机架 如何准确地跨集群复制数据?我这样问是因为我们正在设计集群,以满足最坏的情况,即3个机架中有2个发生故障,我们不想丢失数据 我们只有一个带有3个机架的数据中心 如果我使用: CREATE KEYSPACE "myKeyspaceName" WITH REPLICATION = {'class' : 'NetworkTopologyStrategy
NetworkTopologyStratagy
,那么数据是否会复制到所有3个机架
如何准确地跨集群复制数据?我这样问是因为我们正在设计集群,以满足最坏的情况,即3个机架中有2个发生故障,我们不想丢失数据
我们只有一个带有3个机架的数据中心 如果我使用:
CREATE KEYSPACE "myKeyspaceName"
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : 3 }
这会复制到所有三个机架吗?复制完全取决于密钥空间的复制策略和集群的布局。此布局由两部分定义:数据中心和机架。数据中心是一组机架,应将其视为独立于其他机器 例如,如果您有3个数据中心,您可以指定(使用网络拓扑策略)这些数据中心中的每一个都应有严格数量的数据副本。一个典型的策略是指定每个数据中心的RF为3。在这种情况下,您将得到总共9份副本 机架只能帮助群集确定在数据中心内将复制副本放置在何处。如果可能,C*会尝试将数据中心内的副本放在单独的机架上 您的服务是否可用(可以进行读写)取决于您为客户端操作选择的一致性级别。一致性级别为1只要求一个副本联机,仲裁要求副本总数的1/2+1。大多数使用NetworkTopologyStrategy的人使用Local_One或Local_Quorum(联系的DC+1中的1/2节点),以最小化交叉DC流量
在Cassandra 1.0文档中,他们有一篇文章很好地解释了这一点: 我假设您有两个(逻辑的?)数据中心。假设一个DC中有两个机架,另一个DC中有最后一个机架,每个机架上有2个节点。您将在拓扑文件中定义以下内容:
server1IP=DC1:RACK1
server2IP=DC1:RACK1
server3IP=DC2:RACK1
server4IP=DC2:RACK1
server5IP=DC2:RACK2
server6IP=DC2:RACK2
CREATE KEYSPACE "myKeyspaceName"
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 2};
CREATE KEYSPACE "myKeyspaceName"
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : 3}
如果您希望有3个数据拷贝(每个逻辑机架一个),那么您将定义密钥空间以使用NetworkTopologyStrategy,每个DC都有复制设置,如下所示:
server1IP=DC1:RACK1
server2IP=DC1:RACK1
server3IP=DC2:RACK1
server4IP=DC2:RACK1
server5IP=DC2:RACK2
server6IP=DC2:RACK2
CREATE KEYSPACE "myKeyspaceName"
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 2};
CREATE KEYSPACE "myKeyspaceName"
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : 3}
PropertyFile snitch还具有“机架感知”功能,因此当发生写入时,它将确保数据的一个副本位于DC1
中RACK1
的一个节点上,而DC2
中的每个机架上都有一个副本。根据您所说的,拥有三个逻辑数据中心可能是有意义的,每个数据中心都有一个机架
您还应该看一看,它进一步解释了如何配置复制
编辑:
如果我在复制中使用创建键空间“myKeyspaceName”=
{'class':'NetworkTopologyStrategy',replicationfactor:3}。意志
这会复制到所有三个机架上吗
我不确定。但我发现的每一个示例都是关于使用NetworkTopologyStrategy(仅使用一个DC)定义密钥空间的复制策略,具体地命名DC而不是说明“replicationfactor”。即使是我链接的文档也指出:
NetworkTopologyStrategy将您需要的副本数量作为选项
每个数据中心都需要。即使对于单个数据中心(或单个节点)
集群,您可以使用此副本放置策略,只需定义
一个数据中心的副本数
因此,假设您将您的DC命名为DC1,它将如下所示:
server1IP=DC1:RACK1
server2IP=DC1:RACK1
server3IP=DC2:RACK1
server4IP=DC2:RACK1
server5IP=DC2:RACK2
server6IP=DC2:RACK2
CREATE KEYSPACE "myKeyspaceName"
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 2};
CREATE KEYSPACE "myKeyspaceName"
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : 3}
如果您这样做了,并且在该DC下定义了三个机架,这将向所有三个机架复制一个副本。如果您正确配置了机架DC,这意味着每个节点都配置在一个单独的机架上,那么是的,您将在每个节点上创建一个数据副本。我们只有一个DC和三个机架。如果我将创建键空间“myKeyspaceName”与复制={'class':'NetworkTopologyStrategy','REPLICATION_factor':3}一起使用。这会复制到所有三个机架吗?我们只有一个数据中心和三个机架。如果我将创建键空间“myKeyspaceName”与复制={'class':'NetworkTopologyStrategy','REPLICATION_factor':3}一起使用。这会复制到所有三个机架吗?+1用于提及客户端一致性,因为配置集群复制只是其中的一半。