如何启动新节点

How to bring up the new node

这是

的后续问题

1) 假设我们有三个节点 N1、N2 和 N3,我有 RF =3 和 WC = 3 和 RC = 1,那么这意味着我无法处理写入时的任何节点故障。

2) 假设如果 N3(假设它保存数据)出现故障,那么到现在为止我们将无法写入一致性为“3”的数据。

问题 1:现在如果我启动一个新的节点 N4 并附加到集群,我仍然无法以一致性 3 写入集群,那么如何让节点 N4 充当第三个节点?

问题 2:我的意思是假设我们有一个 RF = 3 的 7 节点集群,那么如果持有副本的任何节点出现故障,是否有办法让集群中现有的其他节点充当节点持有分区?

查看文档:

https://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsReplaceNode.html

您想替换场景中的死节点。 N3 应从环中移除并由 N4 代替。

按照说明一步步操作应该很容易。至关重要的是,如果您通过包管理安装节点,在配置新节点之前停止它,并从中清除所有现有数据、缓存和提交日志(通常在 /var/lib/cassandra/* 下找到)。

也可以使用 nodetool removenode 从环中删除一个死节点,如此处所述 http://docs.datastax.com/en/cassandra/2.1/cassandra/tools/toolsRemoveNode.html and here https://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsRemoveNode.html - 这会从您的集群中删除该节点(并且您应该确保它不会在之后恢复在清除其数据之前)。

请记住,它只会从环中删除一个死节点并将令牌范围分配给其余节点,但不会自动进行流式传输。删除死节点后,您将需要朗姆酒 nodetool repair

如果要删除活动节点,可以使用 nodetool decommission - 但如上所述,请确保节点不会通过清除其数据重新进入集群。

更新:

Cassandra 中的节点在内部不是 "named" 那样的 N1、N2 等。节点有一个 uuid,它们拥有它们负责的所谓令牌范围。

如果一个节点出现故障 - 如果可能,只需修复它,使其再次联机以将其加入您的集群 - 如果这花费的时间少于默认的 3 小时,您就可以了。否则 运行 nodetool repair.

但是如果节点完全 'lost' 并且永远不会回来,运行 nodetool removenode 在那个死节点上。这要求 cassandra 将死节点负责的令牌范围分配给其余节点。在那之后 运行 nodetool repair 因此节点将流式传输丢失的数据。之后,您的集群现在将少一个节点,因此它将是六个节点。

假设您有一个 7 节点集群。 N1,N2,N3,...,N7。假设你有一个数据。 RF = 3,写入一致性 = 2,读取一致性 = 2。假设节点 N1、N2、N3 正在保存数据。如果这些节点中的任何一个发生故障,只要满足读写操作的一致性级别,集群将完全正常并且数据 read/write 操作不会受到影响。

假设你有一个数据。 RF = 3,写入一致性 = 3,读取一致性 = 3。假设节点 N1、N2、N3 正在保存数据。如果这些节点中的任何一个出现故障,操作将失败,因为不满足一致性级别。

现在,如果 N1、N2、N3 中的任何一个出现故障,您可以做两件事:
1)可以更换节点。在这种情况下,新替换的节点将像旧的死节点一样。
2)可以手动添加新节点N8,移除旧的死节点N3。在这种情况下,Cassandra 将在环中分配它的分区器并调整分区大小。