
迁移的方式包括不停机迁移上云和停机迁移上云两种,今天我们谈下停机迁移上云中比较常用的快照迁移方式和reindex迁移。

snapshot api是Elasticsearch用于对数据进行备份和恢复的一组api接口,可以通过snapshot api进行跨集群的数据迁移,原理就是从源ES集群创建数据快照,然后在目标ES集群中进行恢复。
迁移准备
云上ES集群、同vpc下的云oss、自建ES。
源ES集群
1.用户自建ES,需要提前在ES上安装S3插件并修改ES安全配置:
(1)安装s3插件:
安装s3插件./bin/elasticsearch-plugininstall repository-s3,并重启
注:不安装,创建快照仓库会有报错:repository type [s3] does not exist
(2)ES6版本需要修改JVM参数,避免access_key、secret_key认为不安全,修改完后需要重启ES:
在config/jvm.options中写入配置 -Des.allow_insecure_settings=true,并启动es
注:不修改JVM参数,创建快照仓库会出现报错:Setting [access_key] isinsecure, but property [allow_insecure_settings] is not set
2.源ES集群中创建repository
PUT_snapshot/my_backup
{
"type": "s3",
"settings": {
"bucket": "test666",
"region": "cn-north-1",
"access_key":"XXX",
"secret_key":"XXX",
"base_path":"instance01",
"protocol":"http",
"endpoint":" s3.cn-north-1.jdcloud-oss.com", #如果自建es部署在和oss相同可用区的云主机上,此时可以使用云存储的内网地址
"compress":"true"
}
}
3.查看repository
GET _snapshot/my_backup/*
4.源ES集群中创建snapshot并上传repository
POST _snapshot/my_backup/snapshot_1
5.也可以指定index创建snapshot并上传到repository
POST/_snapshot/my_backup/snapshot_3
{
"indices": "blog_index1",
"ignore_unavailable":"true",
"include_global_state":"false",
"partial": "false"
}
目的ES集群
1.目的ES集群中创建repository
PUT_snapshot/my_backup
{
"type": "s3",
"settings": {
"bucket": "test666",
"region": "cn-north-1",
"access_key":"XXX",
"secret_key":"XXX",
"base_path":"instance01",
"protocol":"http",
"endpoint":"s3-internal.cn-north-1.jdcloud-oss.com",
"compress":"true"
}
}
2.查看repository
GET _snapshot/my_backup/*
3.恢复snanpshot
POST _snapshot/my_backup/snapshot_1/_restore
备注
云es和云oss在不同vpc下或使用的是其他厂商的oss,由于云es没有公网地址,此时可以配置nat网关,云es通过nat网关访问公网oss地址。

reindex是Elasticsearch提供的一个api接口,可以把数据从源ES集群导入到当前的ES集群,实现数据的迁移。
迁移准备
云上ES集群、自建ES。
源ES集群
1.创建索引
PUTblog_index_77
{
"mappings":
{
"user":{
"properties":{
"name":{"type":"text"},
"title":{"type":"text"},
"age":{"type":"integer"}
}
}
}
}
2.写入数据
POSTblog_index_77/user
{
"title":"manager",
"name":"Tom Jerry",
"age":34
}
目的ES集群
1.由于云ES没有公网地址,配置nat网关,使目的ES通过nat可以访问到自建集群
2.创建索引
PUTblog_index_66
{
"mappings":
{
"user":{
"properties":{
"name":{"type":"text"},
"title":{"type":"text"},
"age":{"type":"integer"}
}
}
}
}
3.配置 reindex.remote.whitelist 参数,指明能够reindex 的远程集群的白名单
在elasticsearch.yml文件中添加:reindex.remote.whitelist:"116.196.106.13:9200" 并重启
4.reindex迁移数据
POST_reindex
{
"source": {
"remote": {
"host": "http://116.196.106.13:9200",
"socket_timeout":"1m",
"connect_timeout":"10s"
},
"index":"blog_index_77"
},
"dest": {
"index":"blog_index_66"
}
}
5.也可以迁移部分数据:查询条件为 title 字段为manager,将结果写入当前集群的 blog_index_66索引。
POST_reindex
{
"source": {
"remote": {
"host": "http://116.196.106.13:9200",
"socket_timeout":"1m",
"connect_timeout":"10s"
},
"index":"blog_index77",
"query":{
"match":{
"title":"manager"
}
}
},
"dest": {
"index":"blog_index_66"
}
}
本文转载自公众号:云服务飞行团





