我有一个包含4个elasticsearch节点的集群,它们都有node.data = true。我想将其中一个转换为非数据节点;就像更改yaml文件并重新启动一样简单,或者如果我这样做会冒数据丢失的风险吗?
或者我最好只是站起另一个虚拟机并将其作为非数据节点添加到集群中?
答案 0 :(得分:2)
如果没有任何数据丢失,有几种方法可以实现这一目标!
方法-1:
使用 Shard Allocation Filtering 设置将所有分片从数据节点
X
移动到其他数据节点,然后停止节点X
,然后将其作为非数据节点启动。
您可以使用分片分配过滤设置从存储分片中将数据节点列入白名单(index.routing.allocation.include.{attribute}
)或黑名单(index.routing.allocation.exclude.{attribute}
)。您可以阅读更多相关信息here。
Warning: If you have very large indices spread across the cluster then this approach may take long time to move shards and it depends on your bandwidth.
<强>方法-2:强>
确保所有索引的副本碎片至少为1和 停止数据节点
启动X
,然后将其作为非数据节点
这可能看起来很简单但很少冒险。您的群集状态可能会从red
转移到yellow
和green
。您可以阅读有关此案例的更多信息here。
始终建议在对群集进行此类更改之前备份整个数据
此处X
是您要转换为非数据节点的数据节点。