【技术】记一次 Docker 中的 ES 数据迁移,使用 Reindex API

记一次 Docker 中的 ES 数据迁移,使用 Reindex API

首先声明,是因为环境限制,没有办法使用同步工具,不得已才使用 Reindex API 进行数据同步的。

环境背景

  • Linux
  • Docker:20
  • ElasticSearch:8

需求背景

老的 ES 在 Docker 安装的时候设置的内存太小,导致数据量过大时查询直接内存溢出,容器挂掉。原计划是修改老 ES 的内存配置,奈何最开始安装的时候没有进行挂接,进入到容器中也无法修改,就连 Docker 容器的 json 文件都改了,也不行。所以就直接启动了一个新的 ES 容器,这下把能挂接的目录都挂到宿主机上,方便后续修改。现在问题来了,之前的数据怎么办?要么忍痛割爱,等着系统同步,要么数据迁移。果断选择后者,谁让喜欢折腾呢。

开始迁移

确认老 ES 的访问地址

  • 情况1: 因为老 ES 安装的时候直接使用的主机模式,所以直接用宿主机的IP和对应端口就行。
  • 情况2: 没有使用主机模式,得先查看 Docker 给 ES 分配的 IP 地址。使用docker inspect <容器ID/名称> 查看容器信息。找到NetworkSettings -> NetWorks -> bridge -> IPAddress就可以看到 Docker 给 ES 分配的 IP 地址。

在新 ES 中创建索引的 Mapping (选配)

ES 在数据迁移的时候会自动创建索引,但是 Mapping 不会创建,所以有必要的话可以先在新 ES 中创建索引,并添加 Mapping。如果不需要可以跳过此步骤。

bash 复制代码
curl -X PUT "http://<ES_HOST>:9200/new_index?pretty" -H 'Content-Type: application/json' -d'
{
  "settings": { /* 自定义设置 */ },
  "mappings": { /* 自定义映射 */ }
}
'

在新 ES 中配置老 ES 的地址

编辑 elasticsearch.yml

yaml 复制代码
cluster:
  remote:
    old_cluster:
      seeds: "<源集群容器IP>:9300"

添加配置后,重启容器生效。重启命令:docker restart <容器ID/名称>

开始迁移数据

重启之后,请求新 ES 地址,开始同步数据

bash 复制代码
curl -X POST "http://目标ES_HOST:9200/_reindex?pretty" -H 'Content-Type: application/json' -d'
{
  "source": {
    "remote": { "host": "http://源ES_HOST:9200" },
    "index": "old_index",
    "size": 5000  // 每批迁移文档数
  },
  "dest": { "index": "new_index" }
}
'

如果 ES 有安全认证,需要在 remote 属性中添加认证属性;

json 复制代码
"remote": {
  "host": "http://源ES_HOST:9200",
  "headers": { "Authorization": "ApiKey <Base64编码的API密钥>" }
}

数据验证

bash 复制代码
curl -X GET "http://<ES_HOST>:9200/new_index/_count?pretty" -H 'Content-Type: application/json' -d'
{ "query": { "match_all": {} } }
'

PS:curl 可能用着不舒服,使用 postman 也是可以的,只需要把{}的内容作为请求的 body传递即可,注意改成 JSON 类型。

相关推荐
程序员小八7772 小时前
一篇文章讲透 Elasticsearch:从倒排索引到实战落地
大数据·elasticsearch·搜索引擎
Elasticsearch3 小时前
Kibana Dashboards API:适用于所有面板类型的稳定接口,在正式发布前经过 50 多个团队验证
elasticsearch
Elasticsearch4 小时前
Elasticsearch ES|QL 将全文搜索带到你从未建立索引的数据中
elasticsearch
雨辰AI5 小时前
K8s 国产数据库慢 SQL 自动监控|Prometheus+Grafana 可视化全落地
数据库·sql·安全·容器·kubernetes·grafana·prometheus
GGG7665 小时前
k8s的 Node and Cluster实战
容器·kubernetes
半支烟隐 pzishuo6 小时前
Kubernetes Gateway API 完全指南
容器·kubernetes·gateway
兵bing6 小时前
Docker Compose 配置文件归纳总结-千问
运维·docker·容器
蓝田~7 小时前
Java镜像1.2GB→200MB的瘦身之路:Docker多阶段构建+K8s Pod OOMKilled(137)排查,后端部署避坑指南
java·docker·kubernetes
TechWJ7 小时前
Excel报表越做越乱?用Metabase搭建可更新的数据仪表盘
docker·数据分析·excel·metabase·报表工具
凌虚(失业了求个工作)9 小时前
Kubernetes 编年史:从 Borg 到云原生操作系统
云原生·容器·kubernetes