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节点,此时整个迁移任务完毕。