ES集群间数据迁移

1.查看原索引的mapping,我这里通过谷歌插件直接看的

2.点击信息查看索引信息

3.将索引整理好

{
"settings": { "index": { "refresh_interval": "1s","number_of_shards": "5","provided_name": "mcn_sys_log","creation_date": "1578049275728","store": { "type": "fs"},"number_of_replicas": "1","uuid": "Tgnyt9euT2yGEA3_YcPuOw","version": { "created": "5060899"}}},
"mappings": { "sys_log": { "properties": { "logType": { "store": true,"type": "keyword"},"operate_type": { "store": true,"type": "keyword"},"systemCode": { "store": true,"type": "keyword"},"ip": { "store": true,"type": "keyword"},"id": { "type": "text","fields": { "keyword": { "ignore_above": 256,"type": "keyword"}}},"moudleName": { "store": true,"type": "keyword"},"userName": { "store": true,"type": "keyword"},"content": { "search_analyzer": "ik_smart","analyzer": "ik_max_word","store": true,"type": "text"},"gmtActionTime": { "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis","store": true,"type": "date"},"userCode": { "store": true,"type": "integer"},"status": { "store": true,"type": "keyword"}}}},
}

4.在新ES集群中通过谷歌的ES插件执行新索引的创建

5.在新ES集群机器上创建好同步文件

vim mcn_sys_log.json
{
  "source": {
    "remote": {
      "host": "http://1.1.1.1:9200",
      "username": "elastic",
      "password": "*****"
    },
    "index": "mcn_xuexi_time",
    "size": 2000
  },
  "dest": {
    "index": "mcn_xuexi_time"
  }
}

6.执行同步文件操作

curl -XPOST  -uelastic:BAGNimgiGBIE5Isu -H 'Content-Type: application/json' 'http://127.0.0.1:9200/_reindex?wait_for_completion=false' -d '@mcn_sys_log.json'

7.通过插件观察两个集群内索引文件数是否一致,一致即可

物理机迁移方案

一、背景
生产环境由于某些原因需要跨机房迁移ES集群,或者同机房原有集群中所有节点全部更换,期间ES索引要求完整,客户端请求中断不超过五分钟。
 
二、应用场景
1、同机房不同集群之间数据迁移;
2、跨机房不同集群之间数据迁移。
 
三、迁移方案
A机房ES集群 --> B机房ES集群 

1、迁移任务:假设A机房ES集群(3master、3data共三台物理机)迁移到B机房ES集群(3master、3data共三台物理机);
2、迁移思路:通过集群扩容的方式加入B机房ES节点,通过缩容的方式去掉A机房节点,始终保持一个集群原则,分片在集群内部进行迁移,集群及索引配置不更改,对业务友好;
3、对业务影响: 迁移期间有两次集群master重选举环节,选举期间ES集群对外不可用,每次选举时长不超过2分钟;
4、迁移步骤:
    1.在A机房ES集群扩容3master、3data节点,新节点使用首鸣的物理机,观察新增的3master、3data全部加入到A机房ES集群,此时B机房3master、3data和A机房3master、3data共同组成1个6master、6data节点的跨机房集群;
      discovery.zen.ping.unicast.hosts: ["bjsm_master1:tcp_port","bjsm_master2:tcp_port","bjsm_master3:tcp_port","bjdz_master1:tcp_port","bjdz_master2:tcp_port","bjdz_master3:tcp_port" ]    配置首鸣、大族共6个master节点
 
    2.在集群内部迁移A机房data节点上的分片到B机房的data节点上,此时集群中所有数据分片都在B机房的data节点上;
      执行RESTful API迁移分片: curl -H 'Content-Type:application/json' -XPUT 'http://bjsm_master1:http_port/_cluster/settings' -d'{"transient" : {"cluster.routing.allocation.exclude._ip" : "IP"}}'
 
    3.更改ES客户端配置文件中“data.elasticsearch.cluster-nodes”,去掉A机房的节点配置,改成B机房的master节点(tcp端口),然后客户端实例灰度重启并生效配置;
 
    4.下线A机房的3个data节点,再下线A机房的两个副master节点,最后下线A机房的主master节点,此时集群会进入master节点重新选举,且新的主master节点一定会在B机房的3个master节点中产生,此时集群会有短暂的不可访问(两分钟左右);
 
    5.去掉B机房master、data节点配置文件中的大族节点配置,逐个重启data节点,再重启副master节点,最后重启主master节点(集群会有最长两分钟的不可访问时间)后全部生效,等待ES集群再次恢复;
      discovery.zen.ping.unicast.hosts: ["bjsm_master1:tcp_port","bjsm_master2:tcp_port","bjsm_master3:tcp_port" ]   只留B机房的3个master节点
 
    6.B机房的客户端访问均正常后,下线A机房的3个master、3个data节点,此时整个迁移任务完毕。

 

posted @ 2023-02-28 14:32  caibutou  阅读(149)  评论(0)    收藏  举报