Elasticsearch集群跨机房迁移方案

目录

背景介绍

1 A机房elasticsearch集群基本情况

2 在B机房完成elasticsearch集群扩容

2.1 扩容规划

2.2 启动非master节点

2.3 通知业务修改集群连接地址

3 将索引数据排空迁移至B机房

4 下线A机房data节点

5 master节点切割

5.1 关闭集群自动均衡

5.2 从节点pending master切割

5.3 主节点required master切割

6 恢复集群配置

7 修改B机房节点配置,不需要重启


背景介绍

因为业务调整,我司有一批服务器需要从A机房退役迁移至B机房。但是因为涉及业务量太大,为了降低对业务的影响,本次迁移通过先扩容,再缩容的方式完成迁移。本次es集群迁移以elasticsearch集群介绍为例,所有迁移流程均有实践操作。

1 A机房elasticsearch集群基本情况

A机房elasticsearch集群一共10个节点,其中7个节点为data角色,其余3个节点为master/data角色合装,discovery.zen.ping.unicast.hosts配置为三个master节点:10.0.0.1,10.0.0.2,10.0.0.3

network.hostnode.namenode.datanode.master
10.0.0.1node1truetrue
10.0.0.2node2truetrue
10.0.0.3node3truetrue
10.0.0.4node4trueflase
10.0.0.5node5trueflase
10.0.0.6node6trueflase
10.0.0.7node7trueflase
10.0.0.8node8trueflase
10.0.0.9node9trueflase
10.0.0.10node10trueflase

2 在B机房完成elasticsearch集群扩容

2.1 扩容规划

B机房elasticsearch集群规划一共10个节点,其中7个节点为data角色,余下3个节点规划为单独master角色,discovery.zen.ping.unicast.hosts配置为六个master节点:10.0.0.1,10.0.0.2,10.0.0.3,20.1.1.1,20.1.1.2,20.1.1.3

注:B机房将master和data角色分离,是为了减轻合装给master带来的压力,导致集群出现不稳定性。

network.hostnode.namenode.datanode.master是否启动
20.1.1.1node11flasetrue
20.1.1.2node12flasetrue
20.1.1.3node13flasetrue
20.1.1.4node14trueflase
20.1.1.5node15trueflase
20.1.1.6node16trueflase
20.1.1.7node17trueflase
20.1.1.8node18trueflase
20.1.1.9node19trueflase
20.1.1.10node20trueflase

2.2 启动非master节点

只启动data节点,用于数据的迁移。master节点服务暂时不启动。

ssh 20.1.1.4 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
ssh 20.1.1.5 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
ssh 20.1.1.6 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
ssh 20.1.1.7 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
ssh 20.1.1.8 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
ssh 20.1.1.9 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
ssh 20.1.1.10 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'

2.3 通知业务修改集群连接地址

因为A机房机器下线后,只剩下B机房机器可以连通,所以连接地址需要修改为B机房node.data节点。不连接master节点原因,只是为了减轻master节点负担。

20.1.1.4:9200,20.1.1.5:9200,20.1.1.6:9200,20.1.1.7:9200,20.1.1.8:9200,20.1.1.9:9200,20.1.1.10:9200

3 将索引数据排空迁移至B机房

注:跨机房数据迁移,需要提前考虑机房间带宽情况。防止集群带宽速率过高,影响到其他业务传输。

1、先检查集群是否已经有节点数据被排空
curl -XGET "http://集群任意IP:9200/_cluster/settings?pretty"
#curl命令可以在kibana替换为如下命令:
get /_cluster/settings?pretty
​
2、如果1查询结果有排空数据的节点,接下来操作需要做追加。无则忽略。
curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d '{"persistent":{"cluster.routing.allocation.exclude._ip" : "10.0.0.1,10.0.0.2,10.0.0.3,10.0.0.4,10.0.0.5,10.0.0.6,10.0.0.7,10.0.0.8,10.0.0.9,10.0.0.10"},"transient":{"cluster.routing.allocation.exclude._ip":"10.0.0.1,10.0.0.2,10.0.0.3,10.0.0.4,10.0.0.5,10.0.0.6,10.0.0.7,10.0.0.8,10.0.0.9,10.0.0.10"}}'
#curl命令可以在kibana替换为如下命令:
PUT /_cluster/settings  //排空数据节点,填 的老节点的ip
{
  "persistent" :{
      "cluster.routing.allocation.exclude._ip" : "10.0.0.1,10.0.0.2,10.0.0.3,10.0.0.4,10.0.0.5,10.0.0.6,10.0.0.7,10.0.0.8,10.0.0.9,10.0.0.10"
   },
     "transient" :{
      "cluster.routing.allocation.exclude._ip" : "10.0.0.1,10.0.0.2,10.0.0.3,10.0.0.4,10.0.0.5,10.0.0.6,10.0.0.7,10.0.0.8,10.0.0.9,10.0.0.10"
   }
}
​
3、检查数据排空进度
curl -XGET "http://集群任意IP:9200/_cat/shards?v&pretty&s=state:desc"
#curl命令可以在kibana替换为如下命令:
get /_cat/shards?v&pretty&s=state:desc
​
4、调整如下参数,可以加快跨机房数据迁移速度。
#每秒传输速度,默认40Mb
PUT /_cluster/settings  
{
  "persistent" :{
      "indices.recovery.max_bytes_per_sec" : "200mb"
   },
     "transient" :{
      "indices.recovery.max_bytes_per_sec" : "200mb"
   }
}
​
#恢复线程数,默认是2
PUT /_cluster/settings  
{
  "persistent": {
    "cluster.routing.allocation.node_concurrent_recoveries": "5"
  },
  "transient": {
    "cluster.routing.allocation.node_concurrent_recoveries": "5"
  }
}
​
#当前节点在进行主分片恢复时的数量,默认是4
PUT /_cluster/settings 
{
  "persistent": {
    "cluster.routing.allocation.node_initial_primaries_recoveries": "5"
  },
  "transient": {
    "cluster.routing.allocation.node_initial_primaries_recoveries": "5"
  }
}

4 下线A机房data节点

数据排空后,下线A机房只含data角色的节点。含有master角色的节点需要放在切割阶段下线。

ps -ef|grep org.elasticsearch.bootstrap.Elasticsearch|grep -v grep|awk '{print $2}'|xargs kill -9

5 master节点切割

5.1 关闭集群自动均衡

1、关闭集群自动均衡。用于启时候,禁自动均衡 
curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d 
'{
  "persistent" :{
      "cluster.routing.rebalance.enable": "none"
   },
     "transient" :{
      "cluster.routing.rebalance.enable": "none"
   }
}'
#curl命令可以在kibana替换为如下命令:
PUT /_cluster/settings  
{
  "persistent": {
    "cluster.routing.rebalance.enable": "none"
  },
  "transient": {
    "cluster.routing.rebalance.enable": "none"
  }
}
​
2、检查群自动均衡是否关闭
curl -XGET "http://集群任意IP:9200/_cluster/settings?pretty"
#curl命令可以在kibana替换为如下命令:
get/_cluster/settings?pretty

5.2 从节点pending master切割

排除掉required master节点,就是pending master。确认主节点required master方法如下

curl http://集群任意IP:9200/_cat/master?v
#curl命令可以在kibana替换为如下命令:
get /_cat/master?v

假如:10.0.0.3为required master节点:

第一步:停10.0.0.1,起20.1.1.1

 ssh 10.0.0.1 -C 'ps -ef|grep org.elasticsearch.bootstrap.Elasticsearch|grep -v grep|awk '{print $2}'|xargs kill -9'
​
 ssh 20.1.1.1 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'

第二步:停10.0.0.2,起20.1.1.2

 ssh 10.0.0.2 -C 'ps -ef|grep org.elasticsearch.bootstrap.Elasticsearch|grep -v grep|awk '{print $2}'|xargs kill -9'
​
 ssh 20.1.1.2 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'

5.3 主节点required master切割

 ssh 10.0.0.3 -C 'ps -ef|grep org.elasticsearch.bootstrap.Elasticsearch|grep -v grep|awk '{print $2}'|xargs kill -9'

 ssh 20.1.1.3 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'

检查master是否已经全部迁移至B机房,A机房master是否已经全部下线

curl http://集群任意IP:9200/_cat/nodes?v
#curl命令可以在kibana替换为如下命令:
get /_cat/nodes?v

6 恢复集群配置

1、打开集群自动均衡
curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d '{"persistent" :{"cluster.routing.rebalance.enable": "all"}}'
curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d '{"transient" :{"cluster.routing.rebalance.enable": "all"}}'
#curl命令可以在kibana替换为如下命令:
PUT /_cluster/settings
{
  "persistent": {
    "cluster.routing.rebalance.enable": "ALL"
  },
  "transient": {
    "cluster.routing.rebalance.enable": "ALL"
  }
}

2、检查集群自动均衡是否打开
curl -XGET "http://集群任意IP:9200/_cluster/settings?pretty"
#curl命令可以在kibana替换为如下命令:
get /_cluster/settings?pretty

7 修改B机房节点配置,不需要重启

注:此处只需要elasticsearch.yml配置文件,删除A机房相关的节点信息就可以。

修改elasticsearch.yml配置文件中discovery.zen.ping.unicast.hosts配置项,将
10.0.0.1,10.0.0.2,10.0.0.3,20.1.1.1,20.1.1.2,20.1.1.3
修改为:
20.1.1.1,20.1.1.2,20.1.1.3

我的微信公众号同步发表了这一篇文章,欢迎各位小伙伴阅读加关注。

Elasticsearch集群跨机房迁移实战方案背景介绍因为业务调整,我司有一批服务器需要从A机房退役迁移至B机房。但是因为涉及业务量太大,为了降低对业务的https://mp.weixin.qq.com/s?__biz=MzA5MjkyNjU5MQ==&mid=2247483706&idx=1&sn=617ea2b0a71cd0b4e59d7f3d619d1d3c&chksm=9064e62aa7136f3c7bd2634954a28685a80f597cbaecfecb51b4517e67b80042f21f55805453#rd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值