ElasticSearch系列---【使用reindex做跨集群数据迁移】

1.前提条件

要保证网络策略通。

2.在新集群的每一台elasticsearch.yml中加入白名单

#带上引号,192.168.1.10:9200为旧集群ip
reindex.remote.whitelist: "192.168.1.10:9200"

3.重启新集群

4.在kibana中执行dsl执行reindex

#wait_for_completion=false参数决定是否异步,false为异步
POST _reindex?wait_for_completion=false
{
  "source": {
    "remote": {
      "host": "http://旧的ES的host:9200"
    },
    "index": "旧的ES的index"
  },
  "dest": {
    "index": "新的ES的index"
  }
}

#如果上面wait_for_completion=false,执行完会生成一个任务号,可以使用下面的命令查看执行结果,可以观察同步进度和一次同步多少
GET _tasks/任务号

#如果忘了任务号,不要慌,只要任务没结束,还在执行中,可以用下面命令查看是否有正在迁移的任务
GET _tasks?detailed=true&actions=*reindex

5.遇到的问题

由于我新集群JVM设置了只有8G,我同时同步了两个索引,报了下面的错误:

circuit_breaking_exception[[parent] Data too large, data for [<transport_request>] would be [12318476937/11.2gb], which is larger than the limit of [5537372108/5.5gb], real usage: [5818456248/5.8gb]

此时使用kibana执行任何命令,都会报上面的错,或者其他错,这里我想表达的是,会导致集群不可用。我执行了新建索引的dsl,也无法执行。

解决方案:
参考链接:https://blog.csdn.net/weixin_45112997/article/details/130948277

#本人使用的服务器内存配置为64G,所以这里这只jvm参数为31g,es集群jvm参数配置最高不要超过32g,即使服务器配置再高
-Xms31g 表示JVM Heap(堆内存)最小为10g,初始化内存大小
-Xmx31g表示应用JVM最大允许分配的堆内存,程序能够使用的最大内存数

这两个参数最好设置一样,可以避免每次GC后调整堆大小。

posted on 2025-04-09 22:35  少年攻城狮  阅读(141)  评论(0)    收藏  举报

导航