暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

给Elasticsearch数据搬个家

DBA天团 2021-02-05
1608

    

  随着数字化时代的到来,数据量正在经历爆炸式增长,选择使用Elasticsearch的企业变得越来越多。京东云搜索Elasticsearch(JCS for Elasticsearch,简称ES)是基于开源Elasticsearch的分布式全文搜索服务,产品能够提供高可用、易扩展以及近实时的搜索能力,致力于海量数据存储搜索和实时日志分析,旨在为用户提供更稳定、实时、可靠的云搜索服务。上云过程中不可避免的就会遇到数据迁移的问题。




迁移的方式包括不停机迁移上云和停机迁移上云两种,今天我们谈下停机迁移上云中比较常用的快照迁移方式和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_keysecret_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迁移


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"

  }

}

                                  



本文转载自公众号:云服务飞行团

文章转载自DBA天团,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论