如何调出新节点

问题描述 投票:2回答:2

这是来自High Availability in Cassandra的后续问题

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

2)让我们说如果N3(想象它保存数据)失败了,到现在为止我们将无法将一致性数据写为'3'。

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

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

apache cassandra high-availability cassandra-3.0
2个回答
3
投票

看看文档:

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

您希望替换方案中的死节点。 N3应从环中取出并用N4代替。

按照说明逐步操作应该很容易。值得注意的是,如果您通过软件包管理安装节点以在配置新节点之前将其停止,并从中删除所有现有数据,缓存和提交日志(通常位于/var/lib/cassandra/*下)。

此外,可以使用nodetool removenodehttp://docs.datastax.com/en/cassandra/2.1/cassandra/tools/toolsRemoveNode.html中的https://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsRemoveNode.html从环中删除死节点 - 这会从群集中删除节点(并且应该确保在擦除其数据之前它不能再返回)。

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

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

更新:

Cassandra中的节点没有在内部以N1,N2等方式“命名”。节点有一个uuid,他们拥有所谓的令牌范围,他们负责。

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

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


2
投票

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

假设你有一个数据。这有RF = 3,写一致性= 3,读一致性= 3.假设节点N1,N2,N3保持数据。如果任何此节点发生故障,操作将失败,因为不满足一致性级别。

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

© www.soinside.com 2019 - 2024. All rights reserved.