【elasticsearch】ELASTICSEARCH 中暂时移除一个节点,然后重新加入集群

 


一、前言:

遇到一个需求需要对线上ES集群进行角色拆分,目前是节点即是master 也是 data,集群是对外提供服务,操作需要谨慎,所以对于滚动重启ES实例比较重要,再将ES实例重新上线。ES提供了非常便利的API来支持这一点。

目前的方案是:将需要重启的某个ES实例上的数据都迁移到别的节点,然后在重启节点,待数据恢复后,在将节点允许分配副本。

具体方案:

es集群示例:
在这里插入图片描述

比如我们有这样一个ES集群,selk21节点 需要临时下线:

步骤1:将该节点动态排除es集群

这将导致Elasticsearch将该节点上的分片分配给其余节点,而不会将群集状态更改为黄色或红色(即使您的副本数设置为0)。

API 为:

PUT _cluster/settings { "transient" : { "cluster.routing.allocation.exclude._ip" : "10.11.36.1" } }

具体的执行命令:

curl -s -u admin:admin -XPUT 10.11.36.1:29200/_cluster/settings -d ' { "transient" : { "cluster.routing.allocation.exclude._ip" : "10.11.36.1" } }'

注意 这个操作是transient集群重启后,这个设置会失效

步骤2 重启节点

步骤一配置完成以后,我们就会看到shard在集群中开始迁移,待迁移完成以后。

对selk21节点进行重启处理。

步骤3 重新加入集群

API:

PUT _cluster/settings { "transient" : { "cluster.routing.allocation.exclude._ip" : "" } }

具体是执行命令:

curl -s -u admin:admin -XPUT 10.11.36.1:29200/_cluster/settings -d ' { "transient" : { "cluster.routing.allocation.exclude._ip" : "" } }'

只要让_name匹配不到对用的node即可, 除了_name 之外, 还可以用_ip、_host进行匹配

参考:

  • http://vearne.cc/archives/561

__EOF__

本文作者彬在俊
本文链接https://www.cnblogs.com/erlou96/p/16878222.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   彬在俊  阅读(256)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示