【问题标题】:How to distribute data across different nodes in cassandra cluster如何在 cassandra 集群中的不同节点之间分布数据
【发布时间】:2018-10-26 22:30:03
【问题描述】:

我已经设置了一个多节点 cassandra 集群,其中包含两个具有所有必需配置的不同节点,即 cluster_name 、 endpoint_snitch 、 seed 、 auto_bootstrap 等。 我将数据中心用作两个节点的 dc1。我使用 -

创建了键空间
CREATE KEYSPACE dcTest WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'dc1' : 2 };

现在,当我启动两个节点并尝试在数据库中输入数据时,它会在两个节点上创建副本。即,如果我在 table 中创建 4 行,它也会将所有 4 行复制到另一个节点上。我希望这些数据能够跨节点分布。即两个在一个节点上,两个在另一个节点上。

是通过配置keyspace实现的吗?我错过了什么吗?

Nodetoll 状态 -

 nodetool -p 7199 status cassandrareplication1
    Datacenter: dc1
    ===============
    Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address         Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.45.123.123  35.01 MB   256          50.3%             8c529955-c42a-4629-dfgh-0666a444acbb  rack1
UN  10.45.123.124  225.4 KB   256          49.7%             eddf1039-d803-4d61-dfse-1ce0ec3782a9  rack1

【问题讨论】:

  • 能否提供命令nodetool status的输出?
  • @ValerieParham-Thompson 已更新 nodetool 状态

标签: database cassandra distributed-computing distributed


【解决方案1】:

您应该复制因子 1,而不是 2。这意味着您在此键空间中的所有数据将在此数据中心内复制一次。以 2 作为复制因子,它将被复制两次,三次,以此类推。

【讨论】:

  • 更改了复制因子 1 的键空间,仍然为两个节点上的所有行创建副本。更新了上面的 nodetool 状态。
  • 更改复制因子后,在所有节点上运行nodetool repair -full...
  • @user7866584 你使用不同的分区键吗?您可以使用nodetool getendpoints <key> 找出哪些节点为该分区键复制数据。
  • @SimonFontanaOscarsson 我只有一个主键。 nodetool getendpoints 将 10.45.123.123 作为节点
  • @user7866584 如果您只使用一个主键,这将解释为什么所有数据都在同一个节点上,因为它是决定哪个节点应该复制数据的主键。要获得数据分布,您需要使用不同的键。
【解决方案2】:

拥有 2 个复制意味着您希望将 2 个数据副本放入数据中心,此后 Cassnadra 将在每个节点上放置 1 个完整的数据副本以满足 2 个 RF。 为了实现您的目标,您可能需要 1 个 RF 和 2 个节点,以便 Cassandra 可以在节点之间分配数据。 您可以使用更改键空间

Alter KEYSPACE dcTest WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'dc1' : 1 };

之后不要忘记使用 -full 选项运行 nodetool repair。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    相关资源
    最近更新 更多