目录

背景介绍

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. Word文档如何自动生成文献摘要?
  2. poj 1328 Radar Installation
  3. laravel json字段添加_Laravel 6.0.4 中将添加计划任务事件
  4. 如果在chrome的新标签中继续打开开发工具
  5. 【干货】原型设计的八大指导原则
  6. 解决springmvc在单纯返回一个字符串对象时所出现的乱码情况(极速版)
  7. 如何做好产品经理一:你们是傻的吗?
  8. Exynos4412 内核移植(四)—— MMU 相关知识解析
  9. 领导者的资质——学习笔记(2):领导者的人格
  10. flask-mail异步发送邮件_异步、定时、邮件任务
  11. UIImagePickerController PAD /IPHONE 上注意事项
  12. HTTP协议详细总结
  13. jstorm mysql_Jstorm+Spring+mybatis整合
  14. Qt总结之三:磁盘文件操作、遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名(三)
  15. 微软应用商店_微软应用商店,居然藏着这8款神器?!
  16. 小米无线路由器服务器用户名和密码忘了,小米路由器登陆入口用户名和密码指南...
  17. 微信卡券的创建、领取、核销
  18. 如何学好Linux内核?
  19. 梯形图c语言转换软件,梯形图转化为HEX软件
  20. 苹果 iPhone 13 高端机将采用什么屏幕

热门文章

  1. Javascript的脑洞(一)
  2. 企业级用户该如何选购腾讯云服务器配置?
  3. 解决路由器无线中继连接不稳定的问题
  4. 2022双11最值得入手的数码好物清单、一定要收藏起来
  5. 怎样查看电脑出厂日期
  6. 【python】人工蜂群算法求解函数值
  7. 我和计算机比本领教案反思,《比本领》教案设计及反思
  8. Java中的共享锁和排他锁(以读写锁ReentrantReadWriteLock为例)
  9. 判断浏览器类型 是否是微信浏览器
  10. 什么是浏览器指纹-这篇文章全面告诉你答案