Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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_Cassandra 2.0 - Fatal编程技术网

Cassandra 卡桑德拉的复制

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

在Cassandra中复制是如何工作的?如果我有3个机架和3个RF,带有
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用于提及客户端一致性,因为配置集群复制只是其中的一半。