【发布时间】:2017-01-24 16:25:04
【问题描述】:
我有一个 3 节点集群,复制因子为 2,但数据正在所有 3 个节点上复制。这就是我创建密钥空间的方式:
如果不存在 DEMO 则使用复制创建密钥空间 = {'class':'SimpleStrategy', 'replication_factor':2};
这里缺少什么?
【问题讨论】:
-
你怎么知道它是“在所有 3 个节点上复制”?
我有一个 3 节点集群,复制因子为 2,但数据正在所有 3 个节点上复制。这就是我创建密钥空间的方式:
如果不存在 DEMO 则使用复制创建密钥空间 = {'class':'SimpleStrategy', 'replication_factor':2};
这里缺少什么?
【问题讨论】:
Cassandra 根据行的主键分配数据。任何表一般分布在所有机器上,插入一行时,只插入“两台机器”(这两台机器不是随机的,可以用nodetool计算)
如果您想了解更多有关数据如何按主键分布的信息,请查看分区器。 Cassandra Partitioners
【讨论】:
数据被分布在 3 个节点上,每个节点都持有 2 条数据:它自己的一条属于其分配的数据分区,以及属于其邻居节点的数据。
【讨论】:
尝试在具有该键空间的表中的任何分区键上执行getendpoints。您将获得包含该分区的节点列表。在这种情况下,您应该只获得 2 个节点的输出。
$ nodetool getendpoints <keyspace> <table> key
【讨论】: