自建es之间数据迁移
本文主要讲述快照方式,其他方式可自行百度
下面是在自建es中操作迁移数据,操作的时候可借助与kibana进行操作,也可通过postman或者curl命令操作
源es
1.先在es配置文件中添加仓库配置
docker exec -it elastic-dev /bin/bash
cd config/
vi elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
path.repo: ["/usr/share/elasticsearch/data/back"]
然后退出重启容器生效
2.创建仓库
kibana:
PUT /_snapshot/new_cs
{
"type": "fs",
"settings":{
"location": "new_cs"
}
}
3.查看仓库
GET /_snapshot
4.创建快照备份(指定索引或者备份整个,看自己需要)
指定索引:
PUT /_snapshot/new_cs/data
{
"indices": "index1,index2",
"include_global_state": true
}
备份整个es:
PUT /_snapshot/new_cs/data
5.查看快照进度
GET /_snapshot/new_cs/data/_status
目标es
1.将源es备份的快照目录打包并发送到目标es服务器
源服务器操作
docker exec -it elastic-1 /bin/bash
cd data/back/
tar czf new_cs.tar.gz new_cs
exit
docker cp c897bd3c016d:/usr/share/elasticsearch/data/back/new_cs.tar.gz ./
scp new_cs.tar.gz root@172.16.0.11:/root
2.在目标es中创建仓库目录并重启生效
目标服务器操作
docker exec -it elastic-2 /bin/bash
cd config/
vi elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
path.repo: ["/usr/share/elasticsearch/data/back"]
然后退出重启容器生效
3.将发送过来的备份文件拷贝到容器对应的仓库中
docker cp new_cs.tar.gz fa8fdsa92b162:/usr/share/elasticsearch/data/back/
docker exec -it elastic-2 /bin/bash
cd data/back/
tar xf new_cs.tar.gz
4.同样的建立一个仓库
PUT /_snapshot/new_cs
{
"type": "fs",
"settings":{
"location": "new_cs"
}
}
注意:两边的仓库目录和备份名称一定要一样
5.执行恢复数据
POST /_snapshot/new_cs/data/_restore?wait_for_completion=true
同步自建es数据到腾讯云es
自建es执行
1.安装腾讯云提供的备份快照到cos的插件(因为腾讯云es必须通过块存储去同步数据,所以要先将备份数据备份到cos)
插件地址:https://github.com/tencentyun/elasticsearch-repository-cos/releases
尽量下载和你es版本一样的插件
docker cp repository-cos-7.9.2.zip c897bd3c016d:/usr/share/elasticsearch/plugins/
docker exec -it elastic-1 /bin/bash
cd plugin/
unzip -d repository-cos repository-cos-7.9.2.zip
rm -rf repository-cos-7.9.2.zip
chown elasticsearch repository-cos
exit
docker restart elastic-1
必须要重启es插件才能生效
2.通过repository-cos插件调用腾讯云cos创建仓库
PUT _snapshot/my_cos_backup
{
"type": "cos",
"settings": {
"app_id": "xxxxxxx",
"access_key_id": "xxxxxx",
"access_key_secret": "xxxxxxx",
"bucket": "xxxxxx",
"region": "ap-guangzhou",
"compress": true,
"chunk_size": "500mb",
"base_path": "/es_prod"
}
}
- app_id:腾讯云账号 APPID。在账号信息里面可以找到
- access_key_id:腾讯云 API 密钥 SecretId。
- access_key_secret:腾讯云 API 密钥 SecretKey。
- bucket:COS Bucket 名字,不带 appId 后缀的 bucket 名。这个需要先创建
- region:COS Bucket 地域,必须与 ES 集群同地域。
- base_path:备份目录。
3.创建快照
PUT _snapshot/my_cos_backup/snapshot_1
4.查看快照进度
GET _snapshot/my_cos_backup/snapshot_1
返回结果中的state字段为SUCCESS则说明快照已经备份成功
腾讯云es执行
1.创建仓库(和前面一样)
PUT _snapshot/my_cos_backup
{
"type": "cos",
"settings": {
"app_id": "xxxxxxx",
"access_key_id": "xxxxxx",
"access_key_secret": "xxxxxxx",
"bucket": "xxxxxx",
"region": "ap-guangzhou",
"compress": true,
"chunk_size": "500mb",
"base_path": "/es_prod"
}
}
2.执行恢复数据
POST /_snapshot/my_cos_backup/snapshot_1/_restore
{
"indices": "*,-.*"
}
"indices": "*,-.*"
这个匹配规则的意思是恢复所有除了以.
开头的索引,也就是排除那些kibana建立的索引
- indices:只恢复 某些 索引,忽略快照中存在的其他索引。
- rename_pattern:查找所提供的模式能匹配上的正在恢复的索引。
- rename_replacement:将匹配的索引重命名成替代的模式。
3.查看恢复状态
查看执行索引状态
GET index_1/_recovery
查看指定索引的状态,返回结果中 status 为 green,则说明索引已经完全恢复
GET _cluster/health/index_1