为了便于理解,我使用 Cassandra 的最新/最大(已发布)版本设置了一个 4 节点集群。这四个节点是使用几乎完全默认的设置按顺序启动的,并且似乎可以正常通信。
然后我创建了一个模式,如下所示:
CREATE KEYSPACE first WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': '1'
};
创建一个包含 5 列的简单表并添加约 100K 行数据。一切都很好。每个客户都可以获得数据,所以我认为它是均匀分布的。
所以我正在研究一种备份策略并开始处理快照等问题。在每台机器上运行后nodetool snapshot
,我想知道它创建了什么。我转到第一台机器并查看/var/lib/cassandra/data/first,发现它是空的。嗯..第二台机器..同样的事情..第三台..最后在第四台机器上,我看到数据文件夹和快照目录中的文件。
运行nodetool ring
显示每个系统大约拥有25%,但负载严重偏向(似乎)最终拥有所有数据的一个系统。
所有数据真的都在这台机器上吗?我在配置中错过了哪一步?
Cassandra 将令牌范围分配给集群中的每个节点。
由于您的配置中有 4 个节点,因此将 25% 的令牌分配给每个节点。
每个插入查询都会为该行数据生成一个哈希。哈希将始终属于一个且仅属于一个令牌范围,因此该行数据存储在该特定物理节点中。
在您的情况下,大多数插入查询具有相同或相似的分区键,导致相同的物理节点,即节点 4。
有关更多详细信息,请观看解释分区的 datastax 网站。