es集群缩容方案(含一个master节点的缩容)

背景

es虚拟机集群es-mini集群,一共有20个节点,目前需要缩容2台,两台节点分别为:192.168.0.20(data节点),192.168.0.3(master/data节点)。

本文有几个不同。我们es安装在es用户下,安装目录在/home/es/software,其中es设置了软连接,在elasticsearch下,配置文件单独存放在/home/es/software/configs/es-mini目录下。启动脚本是自己写的es-daemon.sh,所以stop和start和开源有所不同。

目录

背景

规划方案

1 批处理修改es相关配置(配置不在一一介绍了)

1.1 准备一个脚本

1.2 上传脚本changeSetting.sh 到每个节点tmp目录下

1.3 备份原来的配置文件elasticsearch.yml

1.4 执行脚本,修改配置

2 在kibana上依次排空data节点的数据,滚动重启es服务

2.1 排空前先检查是否存在close索引

2.2 排空数据,重启es服务

2.2.1 排空数据

2.2.2 检查索引数据迁移状态(RELOCATING表示正在迁移)

2.2.3 数据迁移完毕后,重启es服务

2.2.4 如果觉得迁移速度太慢,可以使用以下方法加快排空数据的速度

3 排空三个master节点,和新master节点192.168.0.4的数据,滚动重启master

3.1 排空数据

3.2 去掉192.168.0.3节点的master角色,重启

3.3 192.168.0.4节点修改为master角色,重启

3.4 重启最后两个master节点

3.4.1 先重启非active master节点

3.4.2 再重启active master节点

4 通过查看服务的启动时间,验证所有节点服务是否重启成功(主要找出是否有漏重启的节点)

5 最后停下线节点的服务

5.1 先排空192.168.0.3和192.168.0.20节点数据

5.2 停192.168.0.3和192.168.0.20节点的es服务,下线

6 将排空操作恢复原来的配置

7 验证缩容后节点服务是否正确

8 结束


规划方案

计划将192.168.0.4节点改为master,替换192.168.0.3。然后下线192.168.0.3和192.168.0.20节点。
 

es-mini集群角色清单列表
IP角色缩容计划缩容后角色
192.168.0.1master/data master/data
192.168.0.2master/data master/data
192.168.0.3master/data缩容下线节点下线
192.168.0.4data用于替换192.168.0.3的master角色master/data
192.168.0.5data data
192.168.0.6data data
192.168.0.7data data
192.168.0.8data data
192.168.0.9data data
192.168.0.10data data
192.168.0.11data data
192.168.0.12data data
192.168.0.13data data
192.168.0.14data data
192.168.0.15data data
192.168.0.16data data
192.168.0.17data data
192.168.0.18data data
192.168.0.19data data
192.168.0.20data缩容下线节点下线


注:因为生产环境都是在堡垒机执行的,所以下面的Linux命令都是批处理,执行命令仅供参考。再次需要准备一个文件ip20放在堡垒机,将集群所有ip列表放在ip20文件中。

1 批处理修改es相关配置(配置不在一一介绍了)

1.1 准备一个脚本

$ cat changeSetting.sh 

#/bin/sh
config_name="/home/es/software/configs/es-mini"
p1='"192.168.0.1","192.168.0.2","192.168.0.3"'
p2='"192.168.0.1","192.168.0.2","192.168.0.4"'

cd ${config_name}; sed -i "s/gateway.expected_nodes: 20/gateway.expected_nodes: 18/g" elasticsearch.yml
cd ${config_name}; sed -i "s/gateway.expected_data_nodes: 20/gateway.expected_data_nodes: 18/g" elasticsearch.yml
cd ${config_name}; sed -i "s/gateway.recover_after_nodes: 18/gateway.recover_after_nodes: 16/g" elasticsearch.yml
cd ${config_name}; sed -i "s/gateway.recover_after_data_nodes: 18/gateway.recover_after_data_nodes: 16/g" elasticsearch.yml

cd ${config_name}; sed -i "s/${p1}/${p2}/g" elasticsearch.yml

cd ${config_name}; grep -E 'discovery.zen.ping.unicast.hosts|gateway.expected_nodes|gateway.expected_data_nodes|gateway.recover_after_nodes|gateway.recover_after_data_nodes' elasticsearch.yml

1.2 上传脚本changeSetting.sh 到每个节点tmp目录下

for i in `cat ip20`;do echo "#####$i#####";scp changeSetting.sh $i:/tmp;done

1.3 备份原来的配置文件elasticsearch.yml

for i in `cat ip20`;do echo "#####$i#####";ssh $i -C "su - es -c 'cd /home/es/software/configs/es-mini;cp elasticsearch.yml elasticsearch.yml_bak'";done

1.4 执行脚本,修改配置

for i in `cat ip20`;do echo "#####$i#####";ssh $i -C "sh /tmp/changeSetting.sh";done

2 在kibana上依次排空data节点的数据,滚动重启es服务

(192.168.0.4节点放在最后重启,因为需要和192.168.0.4节点切割交换master角色)

2.1 排空前先检查是否存在close索引

注:在实际生产操作中,close状态的索引是无法被迁移,所以在我们缩容完毕之后,这一类索引数据出现了丢失,无法恢复。建议大家缩容前都检查一下这一类索引,所有打开或者删除的需要在排空数据之前操作,不然会在缩容中出现数据丢失。

get /_cat/indices?v&s=store.size:asc 

2.2 排空数据,重启es服务

此处只以192.168.0.5节点的操作为例,后面依次从192.168.0.6到192.168.0.20,重复这一步操作。(滚动重启是为了避免给业务造成影响,如果业务可以在一定时间段不使用也可以采用全停全启的操作。)

2.2.1 排空数据

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

2.2.2 检查索引数据迁移状态(RELOCATING表示正在迁移)

get /_cat/shards?v&pretty&s=state:desc

2.2.3 数据迁移完毕后,重启es服务

ssh 192.168.0.5 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh es-daemon.sh stop es-mini"'
ssh 192.168.0.5 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh es-daemon.sh start es-mini"'

循环以上步骤,直至data节点重启完毕。

2.2.4 如果觉得迁移速度太慢,可以使用以下方法加快排空数据的速度

调整传输速度,线程数:
PUT /_cluster/settings  //每秒传输速度,默认40Mb
{
  "persistent" :{
      "indices.recovery.max_bytes_per_sec" : "200mb"
   },
     "transient" :{
      "indices.recovery.max_bytes_per_sec" : "200mb"
   }
}

PUT /_cluster/settings  //恢复线程数,默认是2
{
  "persistent": {
    "cluster.routing.allocation.node_concurrent_recoveries": "5"
  },
  "transient": {
    "cluster.routing.allocation.node_concurrent_recoveries": "5"
  }
}

PUT /_cluster/settings 恢复线程数,默认是4
{
  "persistent": {
    "cluster.routing.allocation.node_initial_primaries_recoveries": "5"
  },
  "transient": {
    "cluster.routing.allocation.node_initial_primaries_recoveries": "5"
  }
}

3 排空三个master节点,和新master节点192.168.0.4的数据,滚动重启master

3.1 排空数据

PUT /_cluster/settings
{
  "persistent" :{
      "cluster.routing.allocation.exclude._ip" : "192.168.0.1,192.168.0.2,192.168.0.3,192.168.0.4"
   },
     "transient" :{
      "cluster.routing.allocation.exclude._ip" : "192.168.0.1,192.168.0.2,192.168.0.3,192.168.0.4"
   }
}

3.2 去掉192.168.0.3节点的master角色,重启

ssh 192.168.0.3 -C 'cd /home/es/software/configs/es-mini;sed -i "s/node.master: true/node.master: false/g" elasticsearch.yml'
ssh 192.168.0.3 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh es-daemon.sh stop es-mini"'
ssh 192.168.0.3 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh es-daemon.sh start es-mini"'

3.3 192.168.0.4节点修改为master角色,重启

ssh 192.168.0.4 -C 'cd /home/es/software/configs/es-mini;sed -i "s/node.master: false/node.master: true/g" elasticsearch.yml'
ssh 192.168.0.4 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh es-daemon.sh stop es-mini"'
ssh 192.168.0.4 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh es-daemon.sh start es-mini"'

3.4 重启最后两个master节点

注意:192.168.0.1节点此时是active master节点,一定要通知业务在重启。(active master重启,集群需要重新选举active,大概过程是1分钟左右,选举的过程中集群不可用。对集群特别敏感的业务要特别注意。)

3.4.1 先重启非active master节点

ssh 192.168.0.2 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh es-daemon.sh stop es-mini"'
ssh 192.168.0.2 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh es-daemon.sh start es-mini"'

3.4.2 再重启active master节点

ssh 192.168.0.1 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh es-daemon.sh stop es-mini"'
ssh 192.168.0.1 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh es-daemon.sh start es-mini"'

4 通过查看服务的启动时间,验证所有节点服务是否重启成功(主要找出是否有漏重启的节点)

for i in `cat ip20`;do echo "#####$i#####";ssh $i -C "su - es -c 'jps|grep -v Jps'|awk '{print \$1}'|xargs ps -o lstart";done

5 最后停下线节点的服务

5.1 先排空192.168.0.3和192.168.0.20节点数据

PUT /_cluster/settings
{
  "persistent" :{
      "cluster.routing.allocation.exclude._ip" : "192.168.0.1,192.168.0.2,192.168.0.3,192.168.0.4"
   },
     "transient" :{
      "cluster.routing.allocation.exclude._ip" : "192.168.0.1,192.168.0.2,192.168.0.3,192.168.0.4"
   }
}

5.2 停192.168.0.3和192.168.0.20节点的es服务,下线

ssh 192.168.0.3 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh es-daemon.sh stop es-mini"'
ssh 192.168.0.20 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh es-daemon.sh stop es-mini"'

6 将排空操作恢复原来的配置

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

验证是否执行成功

get /_cluster/settings?pretty

7 验证缩容后节点服务是否正确

curl http://192.168.0.1:9200/_cat/health?v
curl http://192.168.0.1:9200/_cat/nodes?v

8 结束

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值