【问题标题】:Replication in cassandracassandra 中的复制
【发布时间】:2014-06-11 05:42:08
【问题描述】:

复制在 Cassandra 中是如何工作的?如果我有 3 个机架和 3 个带有NetworkTopologyStratagy 的 RF,那么数据会复制到所有 3 个机架吗?

数据将如何准确地在集群中复制?我之所以这么问,是因为我们正在设计我们的集群,以应对最坏的情况,即 3 个机架中有 2 个出现故障,并且我们不想丢失数据。

我们只有一个带有 3 个机架的数据中心。

如果我使用:

CREATE KEYSPACE "myKeyspaceName"
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : 3  }

这会复制到所有三个机架吗?

【问题讨论】:

    标签: cassandra cassandra-2.0


    【解决方案1】:

    在 Cassandra 1.0 文档中,他们有一篇文章很好地解释了这一点:About Replication in Cassandra

    我假设您有两个(逻辑?)数据中心。假设您在一个 DC 中有两个机架,而在另一个 DC 中有最后一个机架,并且在每个 RACK 上您有 2 个节点。您将在拓扑文件中定义这些,如下所示:

    server1IP=DC1:RACK1
    server2IP=DC1:RACK1
    server3IP=DC2:RACK1
    server4IP=DC2:RACK1
    server5IP=DC2:RACK2
    server6IP=DC2:RACK2
    

    如果您想要有 3 个数据副本(每个逻辑机架一个),那么您将定义您的密钥空间以使用 NetworkTopologyStrategy,并为每个 DC 设置复制设置,如下所示:

    CREATE KEYSPACE "myKeyspaceName"
    WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 2};
    

    PropertyFile 告密者也是“机架感知”的,因此当发生写入时,它将确保数据的一个副本位于 DC1 中的 RACK1 的节点上,并且每个 RACK 上都有一个副本在DC2。根据您所说的,拥有三个逻辑数据中心可能是有意义的,每个数据中心都有一个机架。

    您还应该查看this doc in the "Choosing Keyspace Replication Options" section,它进一步解释了如何配置复制。

    编辑:

    如果我使用 CREATE KEYSPACE "myKeyspaceName" WITH REPLICATION = {'class':'NetworkTopologyStrategy',replicationfactor:3}。将要 这复制到所有三个机架?

    我不确定。但是我发现的每个例子都是关于使用 NetworkTopologyStrategy 只有一个 DC 来定义键空间的复制策略,具体命名 DC 而不是说明“复制因子”。甚至我链接的文档也指出:

    NetworkTopologyStrategy 将您的副本数量作为选项 想要每个数据中心。即使对于单个数据中心(或单个节点) 集群,您可以使用此副本放置策略,只需定义 一个数据中心的副本数。

    因此,假设您将 DC 命名为 DC1,它将如下所示:

    CREATE KEYSPACE "myKeyspaceName"
    WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : 3}
    

    如果您这样做了,并且在该 DC 下定义了您的三个机架,这会将一个副本复制到所有三个机架。

    【讨论】:

    • 我们只有一台带三个机架的 DC。如果我使用 CREATE KEYSPACE "myKeyspaceName" WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'replication_factor' : 3 }。这会复制到所有三个机架吗?
    【解决方案2】:

    复制完全取决于您的键空间的复制策略和集群的布局。此布局由两件事定义,数据中心和机架。数据中心是一组机架,应将其视为与其他机器分开。

    例如,如果您有 3 个数据中心,您可以指定(使用网络拓扑策略)每个数据中心应具有严格数量的数据副本。一种典型的策略是指定每个数据中心的 RF 为 3。在这种情况下,您最终会得到 9 个副本。

    机架仅帮助集群确定在数据中心内放置副本的位置。如果可能,C* 会尝试将数据中心内的副本放在单独的机架上。

    您的服务是否可用(可以进行读取和写入)取决于您为客户端操作选择的一致性级别。 One 的一致性级别只需要一个副本在线,Quorum 需要总副本数的 1/2 + 1。大多数使用 NetworkTopologyStrategy 的人使用 Local_One 或 Local_Quorum(联系 DC 中的节点的 1/2 + 1),这可以最大限度地减少跨 DC 流量.

    Calculator to figure out how many nodes go down before you have unavailable exceptions

    Replication

    Consistency

    【讨论】:

    • 我们只有一个数据中心和 3 个机架。如果我使用 CREATE KEYSPACE "myKeyspaceName" WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'replication_factor' : 3 }。这会复制到所有三个机架吗?
    • +1 用于提及客户端一致性,因为配置集群复制只是其中的一半。
    【解决方案3】:

    如果您已经正确配置了您的 rack-dc,这意味着每个节点都配置在一个单独的机架上,那么是的,您将在每个节点上都有一个数据副本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 2017-11-16
      • 2016-08-14
      • 2016-12-15
      • 2018-07-09
      • 2013-11-11
      • 2014-02-04
      相关资源
      最近更新 更多