欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > OpenSearch迁移方案

OpenSearch迁移方案

2025/2/27 6:37:03 来源:https://blog.csdn.net/xiao_1xu/article/details/142860665  浏览:    关键词:OpenSearch迁移方案

一、背景

因业务需要迁移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.cnmax_retries: 3path_style_access: falseprotocol: httpsread_timeout: 50suse_throttle_retries: trueregion: 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}; dokubectl 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"
donefor i in {0..2}; dokubectl 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"
donefor i in {0..2}; dokubectl 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.commax_retries: 3path_style_access: falseprotocol: httpsread_timeout: 50suse_throttle_retries: trueregion: cn-shanghai
    
  2. 在两边集群中添加OSS的AKSK

ACCESS_KEY="xxxx"
SECRET_KEY="xxxxxx+xxx+"
for i in {0..2}; dokubectl 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"
donefor i in {0..2}; dokubectl 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"
donefor i in {0..2}; dokubectl 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)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词