目录

背景介绍

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.host node.name node.data node.master
10.0.0.1 node1 true true
10.0.0.2 node2 true true
10.0.0.3 node3 true true
10.0.0.4 node4 true flase
10.0.0.5 node5 true flase
10.0.0.6 node6 true flase
10.0.0.7 node7 true flase
10.0.0.8 node8 true flase
10.0.0.9 node9 true flase
10.0.0.10 node10 true flase

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.host node.name node.data node.master 是否启动
20.1.1.1 node11 flase true
20.1.1.2 node12 flase true
20.1.1.3 node13 flase true
20.1.1.4 node14 true flase
20.1.1.5 node15 true flase
20.1.1.6 node16 true flase
20.1.1.7 node17 true flase
20.1.1.8 node18 true flase
20.1.1.9 node19 true flase
20.1.1.10 node20 true flase

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

Elasticsearch集群跨机房迁移方案相关推荐

  1. 同程旅行Hadoop集群跨机房迁移实践

    本文作者:郭飞.现任同程旅行技术专家. Apache Hadoop.Hive.Spark  contributor 背景 随着同程旅行业务和数据规模越来越大,原有的机房不足以支撑未来几年的扩容需求,同 ...

  2. 滴滴 Elasticsearch 集群跨版本升级与平台重构之路

    分享嘉宾:赵情融 滴滴专家工程师 编辑整理:王洪达 出品平台:DataFunTalk 导读:前不久,滴滴ES团队将维护的30多个ES集群,3500多个ES节点,8PB的数据,从2.3.3跨大版本无缝升 ...

  3. es集群搭建_滴滴Elasticsearch 集群跨版本升级与平台重构之路

    前不久,滴滴ES团队将维护的30多个ES集群,3500多个ES节点,8PB的数据,从2.3.3跨大版本无缝升级到6.6.1.在对用户查询写入基本零影响和改动的前提下,解决了ES跨大版本协议不兼容.文件 ...

  4. Elasticsearch集群:搭建集群环境

    Elasticsearch集群:搭建集群环境 1. 创建相应目录 在/root/es-cluster目录下创建以下目录 mkdir -p es01/data mkdir -p es01/logsmkd ...

  5. 完美避坑!记一次Elasticsearch集群迁移架构实战

    作者介绍 李猛(ynuosoft),Elastic-stack产品深度用户,ES认证工程师,2012年接触Elasticsearch,对Elastic-Stack开发.架构.运维等方面有深入体验,实践 ...

  6. 数据中心安全风控_平安银行Hadoop集群跨数据中心迁移项目告捷项目骨干专访

    Hadoop集群跨数据中心迁移 平安银行东莞数据中心建成 平安银行科技中心零售大数据团队 平安银行科技中心科技运营中心 群迁告捷 经过平安银行科技运营中心和大数据团队的不懈努力,作为平安银行AI战略转 ...

  7. hbase集群 数据写入_HBase神器 | BDSHBase集群之间数据迁移同步的利器

    BDS定位 BDS针对开源HBase目前存在的同步迁移痛点,自主研发的一套数据迁移的平台,用于HBase集群的无缝迁移.主备容灾.异地多活.在线离线业务分离.HBase数据归档.对接RDS实时增量数据 ...

  8. 贝壳金服 TiDB 在线跨机房迁移实践

    2019独角兽企业重金招聘Python工程师标准>>> 作者介绍 : 李振环,贝壳金服数据基础架构负责人,目前负责数据平台和企业级数据仓库开发. 公司介绍 贝壳金服是专注居住场景的金 ...

  9. 400+节点的 Elasticsearch 集群运维

    作者:Anton Hägerstrand 翻译:杨振涛 Meltwater每天要处理数百万量级的帖子数据,因此需要一种能处理该量级数据的存储和检索技术. 从0.11.X 版本开始我们就已经是Elast ...

最新文章

  1. JS ES6 实用笔记
  2. 挖矿让英伟达多赚了近3亿美元,老黄:又创纪录了
  3. 【UWB】公式推导计算坐标值
  4. 步步理解 JAVA 泛型编程 – 共三篇
  5. 两条线段的夹角 cesium_《原本》命题1.10 一条线段可以被分成两条相等的线段
  6. Hadoop2.6.0的Intellij Idea 插件
  7. java判断tcp是否阻塞_connect()调用在TCP堆栈中是非阻塞的(java)是什么意思
  8. cpp知识汇总(1) 指针vs引用、static、const
  9. 箱线图怎么判断异常值_极简统计学---箱线图[2]
  10. Python Frozenset()
  11. 7.29~8.2 广州软件所-实习工作日记
  12. 使用ViewFlipper实现广告图片的自动轮播的效果
  13. 在CentOS下面编译WizNote Qt Project
  14. Ember 从0到1
  15. 常微分方程机敏问答[3] #20210622
  16. UVA1386 Cellular Automaton
  17. 爬虫-百度安全验证-图片旋转验证-深度学习解决方案
  18. ctcpejmu单词_微生物英文单词
  19. 全球及中国TNFα抑制剂行业竞争调查分析及项目可行性研究报告2021-2027年
  20. 如何打开安卓模拟器里的开发者选项

热门文章

  1. python 列表循环 [i for i in array[0:] if i>2]在快速排序中的使用
  2. 海阔天空的游戏出海,HMS生态提供的风帆与通路
  3. 文件在上传过程中发生异常服务器端,文件上传服务器端
  4. 互动媒体创意编程——自画像
  5. 全球与中国1,1‘-联-2-萘酚市场深度研究分析报告(2022)
  6. 韩锋oracle 简介,行业观察:Oracle自治服务与私有云的重大升级与解读
  7. python datatime简单计算工龄
  8. oracle共享锁和排他锁
  9. SPSS在教育行业中的应用
  10. 宝塔 mysql无法启动 修复