OpenSearch简介

OpenSearch 是一种分布式,由社区驱动并取得 Apache 2.0 许可的 100% 开源搜索和分析套件,可用于一组广泛的使用案例,如实时应用程序监控、日志分析和网站搜索。OpenSearch 提供了一个高度可扩展的系统,通过集成的可视化工具 OpenSearch 控制面板为大量数据提供快速访问和响应,使用户可以轻松地探索他们的数据。OpenSearch 由 Apache Lucene 搜索库提供技术支持,它支持一系列搜索及分析功能,如 k-最近邻(KNN)搜索、SQL、异常检测、Machine Learning Commons、Trace Analytics、全文搜索等。

由于ElasticSearch在7.10之后的版本不再开源,Amazon在Elasticsearch 和 Kibana 的最近 ALv2 版本创建并维护分叉,该分支被称为 OpenSearch 并在 ALv2 下提供。

简单来说,OpenSearch可以一定程度上理解为ES的一个第三方版本。

具体OpenSearch的介绍可以参考AWS官方提供的内容:什么是 OpenSearch?

迁移方案

由于OpenSearch源自于ES,所以两个系统之间的 数据迁移是十分方便的。

ES向OpenSearch迁移目前也就比较主流的方案有两种,分别是使用snapshot快照恢复与直接使用数据迁移。

直接数据迁移需要通过Logstash将数据从旧的ES集群将数据读取并写入新的OpenSearch集群。直接迁移的方式耗时会随着数据量的增加而增加,对于数据量较大的集群来说时间是不可控的。相比之下使用快照恢复的方式更适合大数据量的集群进行备份与恢复。

因此,如果要迁移的数据量较大的情况更推荐使用快照恢复的方式进行数据迁移。快照恢复的方式原理是使用ES与OpenSearch兼容的特性,由ES进行snapshot。再由OpenSearch集群进行快照恢复,将数据从ES集群中的数据恢复到OpenSearch集群,从而实现数据迁移的目的。

使用快照恢复,快照的存储介质可以选择共享存储与S3存储两种。这里我们选择使用S3作为存储介质。

预备

ES集群与OpenSearch集群

  • ES集群地址为:134.80.208.43:9200
  • OpenSearch集群地址:134.80.208.43:9201

部署minio

  1. 部署minio
version: '2'

services:
  minio:
    image: bitnami/minio:latest
    ports:
      - '9000:9000'
      - '9001:9001'
    volumes:
      - 'minio_data:/data'
    environment:
      - MINIO_ROOT_USER=minio-root-user
      - MINIO_ROOT_PASSWORD=minio-root-password
      - MINIO_SKIP_CLIENT=yes
      # - MINIO_SERVER_ACCESS_KEY=minio-access-key
      # - MINIO_SERVER_SECRET_KEY=minio-secret-key
volumes:
  minio_data:
    driver: local
  1. 在minio页面创建accesskey和secretkey
  2. 创建bucket

拷贝repository-s3安装包至容器内

ES设置

es环境设置accesskey和secretkey

bin/elasticsearch-keystore add --stdin s3.client.default.access_key
bin/elasticsearch-keystore add --stdin s3.client.default.secret_key

离线安装S3插件

bin/elasticsearch-plugin install repository-s3

修改elasticsearch.yml设置endpoint和protocol

s3.client.default.endpoint: 172.16.14.47:9000
s3.client.default.protocol: http

重启ES集群

OpenSearch设置

OpenSearch环境设置accesskey和secretkey

bin/opensearch-keystore add --stdin s3.client.default.access_key
bin/opensearch-keystore add --stdin s3.client.default.secret_key

离线安装S3插件

bin/opensearch-plugin install repository-s3

修改opensearch.yml设置endpoint和protocol

s3.client.default.endpoint: 172.16.14.47:9000
s3.client.default.protocol: http

ES创建snapshot

ES创建快照仓库

curl -X PUT '134.80.208.43:9200/_snapshot/s3_backup' -u elastic:password \
--header 'Content-Type: application/json' \
--data '{	
    "type": "s3", 
    "settings": { 
        "bucket": "es-opensearch" 
    } 
}'

ES中指定备份索引

这里我备份了sw_segment*相关索引,也可以配置多个索引,通过,分割。

curl -X PUT '134.80.208.43:9200/_snapshot/s3_backup/snapshot_1' -u elastic:password \
--header 'Content-Type: application/json' \
--data '{
    "indices": "sw_segment*"
}'

OpenSearch恢复snapshot

OpenSearch创建快照仓库

curl -X PUT "https://134.80.208.43:9201/_snapshot/s3_backup" -ku admin:admin \
--header 'Content-Type: application/json' \
--data '{
    "type": "s3",
    "settings": {
        "bucket": "es-opensearch"
    }
}'

OpenSearch从快照恢复数据

curl -X POST "https://134.80.208.43:9201/_snapshot/s3_backup/snapshot_1/_restore" -ku admin:admin