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

es --- 集群数据迁移

目录

    • 1、需求
    • 2、工具elasticdump
      • 2.1 mac安装
        • 问题
        • 解决
      • 2.2 elasticdump文档
    • 3、迁移

1、需求

迁移部分新集群没有的索引和数据

 

2、工具elasticdump

Elasticdump 的工作原理是将输入发送到输出 。两者都可以是 elasticsearch URL 或 File

 

2.1 mac安装

前置:已经安装有npm

npm install elasticdump -g

(-g 全局)

报错:

在这里插入图片描述

npm WARN ERESOLVE overriding peer dependency

npm WARN While resolving: requestretry@7.1.0

npm WARN Found: peer request@“2..” from the root project

npm WARN npm WARN Could not resolve dependency:

npm WARN peer request@“2..” from the root project

npm ERR! code EACCES

npm ERR! syscall mkdir

npm ERR! path /Users/miuye/.npm/_cacache/content-v2/sha512/cd/26

npm ERR! errno EACCES

npm ERR!

npm ERR! Your cache folder contains root-owned files, due to a bug in

npm ERR! previous versions of npm which has since been addressed.

npm ERR!

npm ERR! To permanently fix this problem, please run:

npm ERR! sudo chown -R 501:20 “/Users/miuye/.npm”

问题

  1、依赖冲突 2、权限不足

解决
# 升级相关包
sudo npm install requestretry@latest -g

在这里插入图片描述

# sudo重新执行
sudo npm install elasticdump -g

在这里插入图片描述

2.2 elasticdump文档

https://github.com/taskrabbit/elasticsearch-dump

 

3、迁移

迁移mapping

elasticdump --input=“http://username:password@testing.es.com:9200/my_index” --output=“http://username:password@staging.es.com:9200/$INDEX_NAME” --type=mapping

迁移data

elasticdump --input=“http://username:password@testing.es.com:9200/my_index” --output=“http://username:password@staging.es.com:9200/$INDEX_NAME” --type=data

【注意】:鉴权的用户名和密码写在url中,以@分割,无鉴权就只写es url

  如果目的es中已经存在对应资源,会报错,可以设置--skip-existing=true,如果资源存在,不报错

  我使用的脚本进行对比和迁移,如果需要新集群的配置信息和新集群保持一致,可以先迁移setting

#!/bin/bash

# 源集群和目标集群的配置
SOURCE_ES_URL="http://testing.es.com:9200"
TARGET_ES_URL="http://staging.es.com:9200"
SOURCE_USERNAME="testing"
SOURCE_PASSWORD="123456"
TARGET_USERNAME="staging"
TARGET_PASSWORD="123456"


# 获取源集群中所有索引的名称
INDEXES=$(curl -u $SOURCE_USERNAME:$SOURCE_PASSWORD -s -X GET "$SOURCE_ES_URL/_cat/indices?h=index&s=index")

while IFS= read -r INDEX_NAME; do
	# 只迁移以_dev结尾的
    if [[ "$INDEX_NAME" == *_dev ]]; then
        # 查询新集群索引
        INDEX_EXISTS=$(curl -u $TARGET_USERNAME:$TARGET_PASSWORD -s -o /dev/null -w "%{http_code}" -X GET "$TARGET_ES_URL/$INDEX_NAME")
        
        # 检查 curl 命令是否成功
        if [ $? -ne 0 ]; then
            echo "Failed to check index existence for $INDEX_NAME"
            continue
        fi

        if [ "$INDEX_EXISTS" -eq 200 ]; then
            echo "Index $INDEX_NAME exists, jump"
        elif [ "$INDEX_EXISTS" -eq 404 ]; then
            echo "Index $INDEX_NAME not exists, transfer..."
            # 迁移结构
            elasticdump --input="http://$SOURCE_USERNAME:$SOURCE_PASSWORD@testing.es.com:9200/$INDEX_NAME" --output="http://$TARGET_USERNAME:$TARGET_PASSWORD@staging.es.com:9200/$INDEX_NAME" --type=mapping
            # 迁移数据
            elasticdump --input="http://$SOURCE_USERNAME:$SOURCE_PASSWORD@testing.es.com:9200/$INDEX_NAME" --output="http://$TARGET_USERNAME:$TARGET_PASSWORD@staging.es.com:9200/$INDEX_NAME" --type=data
        else
            echo "Unknown $INDEX_EXISTS for $INDEX_NAME"
        fi
    fi
done <<< "$INDEXES"

请添加图片描述

相关文章:

  • C++11QT复习 (十四)
  • Qt中的元对象系统
  • 基于chatgpt得到的生活成本计算
  • 开源免费虚拟化软件PVE功能介绍
  • 服务器报错:xxx/libc.so.6: version `GLIBC_2.32‘ not found
  • 软件工程第二章
  • STM32 基础2
  • 华为交换机上配置流量策略根据IP限速
  • CentOS安装Docker
  • 005 vue项目结构 vue请求页面执行流程(vue2)
  • Spring IoCDI
  • tomcat的负载均衡和会话保持
  • 微信小程序生成某个具体页面的二维码
  • JVM基础架构:内存模型×Class文件结构×核心原理剖析
  • 算法刷题记录——LeetCode篇(2.6) [第151~160题](持续更新)
  • 使用ExcelJS实现专业级医疗数据导出功能:从数据到Excel报表的完整指南
  • vscode调试vite项目断点(debugger)
  • 基于HAI应用,从零开始的NLP处理实践指南
  • 【区块链安全 | 第三十一篇】合约(五)
  • CVAT及其半自动标注安装(Windows)
  • 中共中央、国务院印发《党政机关厉行节约反对浪费条例》
  • 泽连斯基:乌代表团已启程,谈判可能于今晚或明天举行
  • 广西等地旱情缓解,水利部针对甘肃启动干旱防御Ⅳ级响应
  • 美F-35险被胡塞武装击中,损失增大让行动成“烂尾仗”
  • 上海市重大工程一季度开局良好,崇明线等按既定计划加快建设
  • 陕西河南山西等地将现“干热风”灾害,小麦产区如何防范?