操作Cassandra(2)-添加,替换,移动和删除节点

来源:互联网 发布:数据库关联查询sql语句 编辑:程序博客网 时间:2024/05/22 15:51

引导(Bootstrap)

添加新节点称为“引导”。 num_tokens参数将定义加载节点在引导期间将被分配的虚拟节点(令牌)的数量。令牌定义节点将负责的环(令牌范围)的部分。

令牌分配(Token allocation)

使用默认令牌分配算法,新节点将选择num_tokens个随机令牌来负责。由于令牌是随机分布的,负载分布随着更大量的虚拟节点而改进,但是也增加了令牌管理开销。默认的256个虚拟节点应该提供一个合理的负载平衡和可接受的开销。

在3.0+上,引入了新的令牌分配算法,以基于给定键空间的现有虚拟节点的负载来分配令牌,并且因此以更少的令牌产生改进的负载分布。要使用此方法,新节点必须使用JVM选项-Dcassandra.allocate_tokens_for_keyspace = <keyspace>启动,其中<keyspace>是算法可以从中找到负载信息以优化令牌分配的键空间。

手动令牌分配(Manual token assignment)

您可以使用initial_token cassandra.yaml参数手动指定逗号分隔的标记列表,如果指定了该标记,Cassandra将跳过令牌分配过程。当使用外部工具执行令牌分配时或使用其先前的令牌恢复节点时,这可能很有用。

范围流(Range streaming)

在分配令牌之后,加入节点将挑选负责流数据的令牌范围的当前副本。默认情况下,它将从每个令牌范围的主副本流出,以保证新节点中的数据将与当前状态一致。

在任何不可用的副本下,一致的引导过程将失败。 要覆盖此行为和不可用副本可能丢失的数据,请设置JVM标志-Dcassandra.consistent.rangemovement = false

恢复失败/挂起的引导程序(Resuming failed/hanged bootstrap)

在2.2+上,如果引导进程失败,可以通过调用nodetool bootstrap resume来从之前保存的状态恢复引导。如果由于某种原因引导程序挂起或停止,也可以通过简单地重新启动节点来恢复。为了清除引导状态并重新启动,您可以设置JVM启动标志-Dcassandra.reset_bootstrap_progress = true

在较低版本上,当引导进程失败时,建议擦除节点(删除所有数据),然后再次重新启动引导进程。

手动引导(Manual bootstrapping)

可以完全跳过引导过程,并通过设置隐藏的参数auto_bootstrap:false立即加入环。当从备份还原节点或创建新的数据中心时,这可能很有用。

删除节点(Removing nodes)

您可以使用nodetool decommission将节点从群集中取出到活动节点或使用nodetool removenode删除死节点。这将分配旧节点负责的范围到其他节点,并在旧节点复制适当的数据。如果使用decommission,数据将从decommission的节点流出。如果使用了removenode,数据将从剩余的副本流出。

不会自动从正在停用的节点中删除任何数据,因此如果要将节点恢复为环上不同令牌的服务,则应手动删除该节点。

移动节点(Moving nodes)

num_tokens:1时,可以使用nodetool move在环中移动节点位置。移动是兼顾移动前后的节点的,比停止+引导更有效率。移动节点后,nodetool cleanup应该删除任何不必要的数据。

替换死节点(Replacing a dead node)

为了替换死节点,请使用JVM启动标志cassandra - Dcassandra.replace_address_first_boot = <dead_node_ip>启动一旦启用此属性,节点将在休眠状态中启动,在此期间所有其他节点将看到此节点关闭。

替换节点将立即开始从集群中的其余节点引导数据。 新节点的正常引导的主要区别在于此新节点在此阶段不会接受任何写入。

一旦引导完成,节点将被标记为“UP”,我们依赖于隐射的切换来使这个节点不一致(因为自引导开始以来我们不接受写)。

        注意:如果替换过程所需的时间超过max_hint_window_in_ms,那么您必须运行repair以使所放置的节点再次保持一致,因为它在引导期间错过了正在进行的写入。

监控进度(Monitoring progress)

可以使用nodetool netstats监视引导,替换,移动和删除进度,这将显示流操作的进度。

范围移动后清理数据(Cleanup data after range movements)

作为一种安全措施,Cassandra不会自动从由于范围移动操作(引导,移动,替换)而“丢失”其令牌范围的一部分的节点中删除数据。当您满意新节点启动和工作时,对失去范围的节点运行nodetool cleanup如果你不这样做,旧的数据仍然会计算在该节点的负载上。

0 0