【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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值