当前位置: 首页 > news >正文

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

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

  • 环境背景
  • 需求背景
  • 开始迁移
    • 确认老 ES 的访问地址
    • 在新 ES 中创建索引的 Mapping (选配)
    • 在新 ES 中配置老 ES 的地址
    • 开始迁移数据
    • 数据验证

首先声明,是因为环境限制,没有办法使用同步工具,不得已才使用 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。如果不需要可以跳过此步骤。

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

在新 ES 中配置老 ES 的地址

编辑 elasticsearch.yml

cluster:remote:old_cluster:seeds: "<源集群容器IP>:9300"

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

开始迁移数据

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

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 属性中添加认证属性;

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

数据验证

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 类型。

相关文章:

  • 运行ollama V0.9.1 异常 GLIBC_2.27 not found
  • 香橙派3B学习笔记12:C语言操作GPIO_<wiringPi.h>_点灯通用输入输出
  • 数字孪生:为UI前端设计带来前所未有的创新体验
  • 《解构线性数据结构的核心骨架:从存储模型到操作范式的深度解析》
  • 深度学习进阶:卷积神经网络(CNN)原理与实战
  • Vue 3 常用响应式数据类型详解:ref、reactive、toRef 和 toRefs
  • 卫星通信链路预算之二:带宽和功带平衡
  • YOLO进化史:从v1到v12的注意力革命 —— 实时检测的“快”与“准”如何兼得?
  • 用ε贪婪算法解决多老虎机问题
  • 简单了解TypeScript
  • Java实现10大经典排序算法
  • 【操作系统】macOS软件提示“已损坏,打不开”的解决方案
  • 数字ic后端设计从入门到精通8(含fusion compiler, tcl教学)ULVTLL、LVT、ULVT详解及应用
  • 游戏技能编辑器界面优化设计
  • AEO:从搜索引擎到答案引擎,AI时代搜索优化的新战场
  • MSPM0G3507学习笔记(三)软硬I2C任意切换,兼容HAL:oled与mpu6050
  • RK 安卓10/11平台 HDMI-IN 调试
  • SSRF4 SSRF-gopher 协议扩展利用-向内网发起 GET/POST 请求
  • Java中间件使用方式与实战应用
  • 基于深度学习的智能文本摘要系统:技术与实践
  • 中小企业网站开发/专业网络推广公司排名
  • b2b网站方案/seo网络优化招聘信息
  • 旅游网站组织结构图怎么做/设计网站排名
  • wordpress底部制作/河南做网站优化
  • 一个空间放几个网站/云南疫情最新消息
  • 龙华网站建设yihe kj/如何修改百度上面的门店号码