【发布时间】:2017-12-06 02:06:26
【问题描述】:
我有 2 个问题。
1- 我需要 2 个节点集群。如果 1 个节点消失,我必须读写。
我想我需要= 复制因子:2 一致性:1
但这当然不应该是任何数据的丢失。
2- 我需要 3 个节点的集群,并且节点可能会随着时间的推移而增加。我应该能够使用此设置添加更多节点。
我想我需要= 复制因子:3 一致性:2
问题是:我的配置正确吗?
感谢您的回答。
【问题讨论】:
标签: cassandra
我有 2 个问题。
1- 我需要 2 个节点集群。如果 1 个节点消失,我必须读写。
我想我需要= 复制因子:2 一致性:1
但这当然不应该是任何数据的丢失。
2- 我需要 3 个节点的集群,并且节点可能会随着时间的推移而增加。我应该能够使用此设置添加更多节点。
我想我需要= 复制因子:3 一致性:2
问题是:我的配置正确吗?
感谢您的回答。
【问题讨论】:
标签: cassandra
tldr;使用 3 节点集群进行写入/读取仲裁。
请记住:Write Consistency + Read Consistency > Replication factor 以确保您的数据是一致的。
您也可以同时使用 3 节点集群。或者,在您的第一个设置中(2 个节点)与 1 个节点“集群”相同。因为您要么写入 ALL,要么读取不一致。
对于 RF 2 中的设置 1,您需要:
Write(2) + Read(1) 如果某个节点出现故障,您将无法再写入集群。Read(2) + write(1) 如果某个节点出现故障,您将无法再从集群中读取数据并且您丢失了数据。Write(2) + Read(2) 与 3 节点集群相同的努力。为什么是 2?这些都不是理想的,2 节点集群相对于 1 节点“集群”的唯一优势是,如果您正在向所有节点写入数据,则至少在节点死亡时不会丢失数据。
理想情况下,您使用法定人数,否则您更有可能遭受中断。
Write(2) + Read(2) > RF Quorum(选项 1)使 1 个节点死亡,您的集群正常运行。Write(3) + Read(1) > RF Write 3 允许您仅从 1 个节点读取数据,如果节点断开连接,则会以写入失败为代价来加快读取速度。Write(1) + Read(3) > RF Read 3 如果节点出现故障,以丢失数据为代价加快写入速度。【讨论】:
您应该记住,您的每台服务器都将保存 100% 的数据。因此,就速度而言,您可能不会获得太多收益。否则,读取和写入的 CL 均为 1 不会导致数据丢失。另外,不要忘记提示,如果有 1 个节点已关闭并启动它。
对于这个,您也可以使用 QUORUM。这意味着一半的副本加 1 应该响应该操作。
另外,我建议阅读Configuring data consistency 和Replication, High Availability and Consistency in Cassandra
【讨论】: