我有 3 个节点的 Cassandra 集群。我正在执行一些 colud 迁移活动,为此,我在现有集群中添加了两个节点,结果如下。
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 192.168.1.5 24.07 GB 256 59.4% 804b855f-78f3-42d6-8abf-b9aec73699df rack1
UN 192.168.1.6 24.77 GB 256 59.8% 21f2066f-1794-485c-9c4f-d6d1b286a551 rack1
UN 172.16.2.20 15.96 GB 256 60.3% 2c2f512d-5743-4632-a4b5-cd2cac967897 rack1
UN 172.16.2.21 12.76 GB 256 60.0% 657ff1b6-773a-4782-a506-c4899cdf2a4f rack1
UN 192.168.1.7 17.69 GB 256 60.5% c8c4bc41-4b5c-41e6-bb71-ab90c2ed5eb0 rack1
OWNS 字段以前对于所有节点都是 100%,现在它显示不同的数字,所以是否像整个 100% 数据不在每个节点上一样,假设我通过关闭 Cassandra 来关闭任何节点,那么是否存在数据丢失的风险?
这是正常情况。
很可能您的复制因子为 3,并且对于 3 个节点,这导致每个节点都有所有其他节点的副本。当您再添加 2 个节点时,每个节点将保留 3/5 的数据 - 它自己的范围(数据的 1/5)+ 副本(数据的 2/5)。这不是精确的 60%,因为数据可能不会在节点之间完全拆分 - 某些分区可能比其他分区更大,等等。
我建议您阅读DataStax 架构指南- 它会让您更好地了解 Cassandra 的工作原理以及数据的复制方式。