OpenSearch迁移方案

news2024/11/29 1:56:47

一、背景

因业务需要迁移Opensearch 集群,当前集群数据量高达21TB,采用常规工具进行迁移估计不可取,需要使用对象存储做中转,进行OpenSearch数据迁移。

二、OpenSearch迁移方案

前期进行OpenSearch数据迁移调研

序号方案诠释备注
1[OpenSearch → S3] → [OSS → OpenSearch]在AWS环境下通过OS的快照存储到S3里面,然后在阿里云那边将S3的数据复制一份到OSS里面,然后在阿里云环境下恢复OSS的快照到OS里面S3–>OSS涉及流量出网
2OpenSearch → S3 → OpenSearch或者OpenSearch → OSS → OpenSearch将OpenSearch的数据备份到S3,阿里云账号下的OpenSearch连接AWS的S3桶,进行快照恢复S3传出需要流量,1G=1RMB
3OpenSearch → Logstash → OpenSearch使用开源组件,将OpenSearch点对点拷贝数据大批量数据容易出现超时

方案一:OpenSearch快照,跨云进行快照恢复

请添加图片描述

A.大致流程

①在AWS中的OpenSearch服务,在Pod内将数据生成快照到S3中

②AliCloud在线迁移服务将S3中的数据Copy一份到OSS中

③在AliCloud的OpenSearch中恢复OSS的快照

B.可行性评估 ✓

经过测试,OpenSearch支持用OSS做快照

参考地址:Take and restore snapshots - OpenSearch Documentation

方案二:Aliyun OpenSearch根据S3进行快照恢复

请添加图片描述

大致流程

①在AWS上面将Node节点赋权S3,然后将OpenSearch设置S3为快照桶

②将所需的索引快照到S3中

③在AliCloud中的OpenSearch设置AWS的S3为快照桶

④在AliCloud中OpenSearch恢复快照

请添加图片描述

可行性:✓

方案三:在aliyun上使用数据迁移工具Logstash 对OpenSearch进行数据迁移

请添加图片描述

大致流程

①通过Logstash input跟AWS中部署的OpenSearch进行连接,AWS OpenSearch为数据源

②在Logstash outPut连接aliCloud中的OpenSearch进行目标数据源,达到数据传递效果

可行性:✓

方案确定:方案二(OpenSearch → OSS → OpenSearch)

请添加图片描述

选择原因:

  1. 对于TB需采用对象存储方式转移,避免实时转移导致数据不稳定丢失
  2. 采用OSS不采用S3的原因是OSS对于外网流入流量免费,内网流出流量免费,节省了很大的一部分流量费。S3对于外网流出会收取流量费

三、迁移准备

1.迁移准备

在进行数据迁移前,需要考虑数据的完整性跟用户使用体验,需要提前预演集群切换的整个过程。

No.ActionReamrk
1新集群稳定运行准备好需要迁移的集群
2业务指向新集群业务服务更改地址数据传入新集群
3将OpenSearch中老数据按照索引名称进行数据迁移,注意迁移到新集群之后检查数据的完整性跟是否可以查询防止迁移过来不能查看
4业务稳定运行后销毁老集群清理老集群

2.迁移具体步骤

A. 原OpenSearch设置快照

在OpenSearch所在的集群或服务器设置可以操作S3的权限,具体设置见AWS S3官方文档。(只需要让服务器能上传下载S3的数据)

  1. 在OpenSearch Dashboard中设置快照存储桶

    # 向OpenSearch设置快照存储桶
    PUT _snapshot/my-snapshot-repo-name
    {
        "type": "s3",
        "settings": {
            "bucket": "guance-opensearch-data",
            "base_path": "my/snapshot/directory",
            "endpoint": "s3.cn-north-1.amazonaws.com.cn"
        }
    }
    

    该命令参考文档:https://opensearch.org/docs/latest/tuning-your-cluster/availability-and-recovery/snapshots/snapshot-restore/#amazon-s3

请添加图片描述

快照相关命令:

#查看快照桶
GET _snapshot
#删除快照桶
DELETE _snapshot

B. 原OpenSearch备份快照

设置完快照桶之后开始备份索引,索引备份会根据数据大小影响备份时间

  1. 开始备份

    PUT _snapshot/my-snapshot-repo-name/XXXXX 
    {  "indices": "index Name" }
    

*** 备份快照一定要一个一个备份,如果同事备份多个快照会有问题。***
备份之后可以查看到备份的进度:

GET /_snapshot/my-snapshot-repo-name/XXXXX

等待state为SUCCESS 即备份成功,此时可以上AWS S3 存储桶查看备份文件

请添加图片描述

参考命令:Take and restore snapshots - OpenSearch Documentation

C. 新集群添加AWS S3的认证凭证

由于新集群的路径不确定在哪,所以采用公网连接S3(需考虑流量费用)进行索引恢复,涉及连接新OpenSearch连接S3,以及恢复快照。

  1. 连接到AWS S3

在OpenSearch所在的集群中设置S3的访问路径(这里依据观测云的OpenSearch进行操作),在K8S的OpenSearch配置文件增加AWS S3的访问路径

    s3:
      client:
        default:
          endpoint: s3.cn-north-1.amazonaws.com.cn
          max_retries: 3
          path_style_access: false
          protocol: https
          read_timeout: 50s
          use_throttle_retries: true
          region: cn-north-1
# 参数解释:https://opensearch.org/docs/latest/tuning-your-cluster/availability-and-recovery/snapshots/snapshot-restore/#amazon-s3

请添加图片描述

由于是一个OpenSearch集群,所以需要对Master、Data、Client都需要在config文件里面增加AWS S3配置,随后重启OpenSeach相关Pod.

  1. 设置AWS S3凭证(AK/SK)
    在集群中为OpenSeach添加密钥信息,命令如下
ACCESS_KEY="XXXXX"
SECRET_KEY="xxxxx"
SESSION_TOKEN="xxxxxxx session_token"
for i in {0..2}; do
  kubectl exec -i -n middleware opensearch-cluster-data-$i -c opensearch-data -- /bin/sh -c "echo \"$ACCESS_KEY\" | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.access_key; echo \"$SECRET_KEY\" | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.secret_key; echo \"$SESSION_TOKEN\" | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.session_token"
done

for i in {0..2}; do
  kubectl exec -it -n middleware opensearch-cluster-master-$i -c opensearch-master -c opensearch-master -- /bin/sh -c "echo \"$ACCESS_KEY\" | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.access_key; echo \"$SECRET_KEY\" | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.secret_key; echo \"$SESSION_TOKEN\" | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.session_token"
done

for i in {0..2}; do
  kubectl exec -it -n middleware opensearch-cluster-client-$i -c opensearch-master -c opensearch-client -- /bin/sh -c "echo \"$ACCESS_KEY\" | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.access_key; echo \"$SECRET_KEY\" | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.secret_key; echo \"$SESSION_TOKEN\" | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.session_token"
done

opensearch-keystore是OpenSearch进行密钥管理的地方,官方解释:OpenSearch keystore - OpenSearch Documentation

  1. 登录新OpenSearch Dashboard设置S3快照库
    这里需要跟在老的OpenSearch设置的S3存储桶位置一致,包括区域、桶、快照路径。

    1. 刷新密钥

      POST /_nodes/reload_secure_settings

    2. 添加AWS S3快照库

PUT _snapshot/my-snapshot-repo-name
{
  "type": "s3",
  "settings": {
    "bucket": "XXXXX",
    "base_path": "my/snapshot/directory"
  }
}

D. 恢复快照

在新集群中执行快照恢复命令进行快照恢复,如果快照比较慢需要等待

POST /_snapshot/my-snapshot-repo-name/xxxxxx/_restore

Tips:在恢复的过程中可以查看快照恢复情况

GET index_name/_recovery

等待恢复完毕即可

F.附使用OSS进行同步OpenSearch同步数据步骤

  • OSS基本兼容S3,相对来说如果替换只需要替换Endpoint即可
  1. 在两边都OpenSearch的配置文件中加入OSS的配置,即在集群中更改opensearch.yml加入OSS的连接地址,并重启Data、Master、Clent节点

        s3:
          client:
            default:
              endpoint: oss-cn-shanghai.aliyuncs.com
              max_retries: 3
              path_style_access: false
              protocol: https
              read_timeout: 50s
              use_throttle_retries: true
              region: cn-shanghai
    
  2. 在两边集群中添加OSS的AKSK

ACCESS_KEY="xxxx"
SECRET_KEY="xxxxxx+xxx+"
for i in {0..2}; do
  kubectl exec -i -n middleware opensearch-cluster-data-$i -c opensearch-data -- /bin/sh -c "echo \"$ACCESS_KEY\" | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.access_key; echo \"$SECRET_KEY\" | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.secret_key"
done

for i in {0..2}; do
  kubectl exec -it -n middleware opensearch-cluster-master-$i -c opensearch-master -c opensearch-master -- /bin/sh -c "echo \"$ACCESS_KEY\" | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.access_key; echo \"$SECRET_KEY\" | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.secret_key"
done

for i in {0..2}; do
  kubectl exec -it -n middleware opensearch-cluster-client-$i -c opensearch-master -c opensearch-client -- /bin/sh -c "echo \"$ACCESS_KEY\" | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.access_key; echo \"$SECRET_KEY\" | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.secret_key"
done
  1. 在源集群(AWS)中添加OSS快照桶
#刷新快照权限
POST /_nodes/reload_secure_settings

#添加OSS快照存储桶
PUT _snapshot/my-snapshot-repo-name
{
  "type": "s3",
  "settings": {
    "bucket": "guancecloud-oss-prod-sh-al1",
    "base_path": "my/snapshot/directory"
  }
}
  1. 创建快照索引并上传OSS
PUT _snapshot/my-snapshot-repo-name/XXX
{
  "indices": "XXX"
}
  1. 目标集群添加OSS存储桶
#刷新快照权限
POST /_nodes/reload_secure_settings

#添加OSS快照存储桶
PUT _snapshot/my-snapshot-repo-name
{
  "type": "s3",
  "settings": {
    "bucket": "guancecloud-oss-prod-sh-al1",
    "base_path": "my/snapshot/directory"
  }
}
  1. 恢复快照
#恢复快照
POST /_snapshot/my-snapshot-repo-name/XXXX/_restore

#查看恢复进度
GET index_name/_recovery
#会展示索引的恢复进度百分比
  1. 查看快照生命周期

对于迁移过来的快照,会携带源集群的生命周期。

GET _opendistro/_ism/explain/Index_Namexxxxx

四、参考文档

OpenSearch迁移S3官方文档:Take and restore snapshots - OpenSearch Documentation

OpenSearch 密钥管理文档:OpenSearch keystore - OpenSearch Documentation

h迁移S3官方文档:Take and restore snapshots - OpenSearch Documentation

OpenSearch 密钥管理文档:OpenSearch keystore - OpenSearch Documentation

AWS迁移ALiyun ElasticSearch指导文档:将AWS中的ES数据迁移到阿里云ES中_检索分析服务 Elasticsearch版(ES)-阿里云帮助中心 (aliyun.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2206342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java项目之科研工作量管理系统的设计与实现源码(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的科研工作量管理系统的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 科研工作…

介绍Java

Java简介 Java是一门由Sun公司(现被Oracle收购)在1995年开发的计算机编程语言,其主力开发人员是James Gosling,被称为Java之父。Java在被命名为“Java”之前,实际上叫做Oak,这个名字源于James Gosling望向…

Basic Pentesting_ 2靶机渗透

项目地址 plain https://download.vulnhub.com/basicpentesting/basic_pentesting_2.tar.gz 修改静态ip 开机按e 输入rw signie init/bin/bash ctrlx 进入编辑这个文件 vi /etc/network/interfaces修改网卡为ens33 保存退出 实验过程 开启靶机虚拟机 ![](https://img-bl…

paimon,基础查询语句测试

基础设置 -- 创建catalog/加载catalog,如果这个catalog已经存在就不会创建,自动加载元数据信息CREATE CATALOG fs_paimon_catalog WITH ( type paimon, warehouse hdfs://wsl01:8020/paimon/catalog ); -- 使用catalog use catalog fs_paimon_catalog…

Java中二维数组-杨辉三角

使用二维数组打印一个10行杨辉三角 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1)第一行有1个元素,第n行有n个元素 2)每一行的第一个元素和最后一个元素都是1 3)从第三行开始,对于非第一个元素和最后一个元素的元素…

差分注意力,负注意力的引入

文章目录 Differential Transformer差分注意力,负注意力的引入相关链接介绍初始化函数多头差分注意力 Differential Transformer差分注意力,负注意力的引入 相关链接 ai-algorithms/README.md at main Jaykef/ai-algorithms (github.com) unilm/Diff…

response和验证码、文件下载操作

目录 Response对象 案例: 1、完成重定向 2、服务器输出字符输出流到浏览器 3、服务器输出字节输出流到浏览器 4、验证码 ServletContext对象 Response对象 功能:设置响应消息 1、设置响应行 格式:HTTP/1.1 200 ok 设置状态码 se…

RabbitMQ 高级特性——死信队列

文章目录 前言死信队列什么是死信常见面试题死信队列的概念:死信的来源(造成死信的原因有哪些)死信队列的应用场景 前言 前面我们学习了为消息和队列设置 TTL 过期时间,这样可以保证消息的积压,那么对于这些过期了的消…

【更新】上市公司企业机构投资者实地调研数据(2013-2023年)

一、测算方式: 参考《会计研究》逯东(2019)老师的做法,考虑投资者实地调研的频率和可能性,设立了下述变量来衡量上市公司接待投资者调研情况: 首先,使用年度范围内接待投资者调研的总次数 ( Visitnmb) 作为…

卸载PLSQL及标准卸载流程

目录 1. 卸载PLSQL2. 删除注册表3. 删除数据信息 1. 卸载PLSQL 等待进度条走完 2. 删除注册表 regedit 右击删除 3. 删除数据信息 由于AppData是隐藏文件,需要勾选隐藏的项目。 重启电脑,PLSQL就卸载成功了。

低代码工单管理app评测,功能与效率解析

预计到2030年,低代码平台市场将达1870亿美元。ZohoCreator助力企业构建定制化软件应用,以建筑行业工作订单管理app为例,简化流程,提升管理效率,降低成本。其用户友好界面、自动化管理、跨平台使用及全面报告功能受企业…

项目优化内容及实战

文章目录 事前思考Prometheus 普罗米修斯概述架构安装及使用 Grafana可视化数据库读写分离实战1-PrometheusGrafanaspringboot 事前思考 需要了解清楚:需要从哪些角度去分析实现?使用了缓存,就需要把缓存命中率数据进行收集;使用…

企业在隔离网环境下如何进行安全又稳定的跨网文件交换?

在数字化时代,企业的数据流通如同血液一般重要。然而,当企业内部实施了隔离网环境,跨网文件交换就成了一个棘手的问题。今天我们将探讨在隔离网环境下,企业面临的跨网文件交换挑战,以及如何通过合规的跨网文件交换系统…

数字电路——触发器1(RS和钟控触发器)

触发器:能够存储一位二进制信息的基本单元电路称触发器(Flip-Flop) 特点: 具有两个能自行保持的稳定状态,用来表示逻辑状态的“0”或“1”。具有一对互补输出。有一组控制(激励、驱动)输入。或许有定时(时钟)端CP(Clock Pulse)。在输入信号…

PostgreSQL 16.4安装以及集群部署

1. 环境准备 1.1 主机环境 主机 IP: 192.24.215.121操作系统: CentOS 9PostgreSQL 版本: 16.4 1.2 从机环境 从机 IP: 192.24.215.122操作系统: CentOS 9PostgreSQL 版本: 16.4 2. 安装 PostgreSQL 16.4 在主从两台机器上都需要安装 PostgreSQL 16.4。 2.1 添加 Postgre…

银行卡基础信息查询 API 对接说明

本文将介绍一种 银行卡基础信息查询 API 对接说明,它可用于银行卡基础信息查询。 接下来介绍下 银行卡基础信息查询 API 的对接说明。 申请流程 要使用 API,需要先到 银行卡基础信息查询 API 对应页面申请对应的服务,进入页面之后&#xf…

Python自定义异常类:实际应用示例之最佳实践

Python自定义异常类:实际应用示例之最佳实践 前言 在软件开发中,合理处理异常是保证程序稳定性的重要环节。虽然 Python 内置了丰富的异常类型,但在处理复杂业务逻辑时,自定义异常类能够使代码更加清晰且具备可扩展性。 本文将…

一个架构师的职业素养:四种常用的权限模型

你好,我是看山。 本文收录在《一个架构师的职业素养》专栏。日拱一卒,功不唐捐。 今天咱们一起聊聊权限系统。 以大家熟知的电商场景举例: 用户可以分为普通用户、VIP用户:我们需要控制不同角色用户的访问范围。比如,京东的PLUS会员,可以进入会员专区,而且能够使用礼金…

ESP32接入扣子(Coze) API使用自定义智能体

使用ESP32接入Coze API实现聊天机器人的教程 本示例将使用ESP32开发板通过WiFi接入 Coze API,实现一个简单的聊天机器人功能。用户可以通过串口向机器人输入问题,ESP32将通过Coze API与智能体进行通信,并返回对应的回复。本文将详细介绍了如…

OpenGL 进阶系列03 - OpenGL实例化渲染来提高性能

目录 一:概述 二:实例化渲染的优点: 三:OpenGL实例化渲染的例子: 一:概述 OpenGL 实例化渲染(Instanced Rendering)是一种渲染技术,可以有效地绘制多个相同对象,而不需要为每个对象单独提交绘制调用。通过这种方式,可以显著提高渲染性能,尤其是在需要绘制大量相…