ES迁移到OpenSearch

本文详细介绍了如何通过共享文件系统、Logstash迁移以及S3存储实现Elasticsearch和OpenSearch的数据备份与恢复,涉及配置、插件安装和恢复步骤。

方式一:共享文件存储迁移

尽管可以使用 repository-s3 插件直接将快照生成到 S3,但必须在每个节点上安装此插件,调整 opensearch.yml(如果使用的是 Elasticsearch 集群,则需要调整 elasticsearch.yml),重新启动每个节点,添加 AWS 凭证,最后拍摄快照。此插件是持续使用或迁移大型集群的绝佳选择。

  1. 要将共享文件系统用作快照存储库,请将其添加到:elasticsearch.yml和opensearch.yml(如果上传到s3则不需要)

path.repo: ["/mnt/snapshots"]

  1. 如果您使用的是 Docker 安装,请在启动群集之前将文件系统添加到 中的每个节点:docker-compose.yml
volumes:
  - /Users/jdoe/snapshots:/mnt/snapshots
  1. 然后使用 REST API 注册存储库:
PUT _snapshot/my-fs-repository
{
  "type": "fs",
  "settings": {
    "location": "/mnt/snapshots"
  }
}
  1. 如果成功

{ "acknowledged": true }

  1. 接下来有两种恢复方式:
  • 将备份上传到s3上然后进行恢复
  • 如果使用的是docker且es和opensearch挂载了同一块数据卷,那么可以在opensearch中创建存储库,然后恢复。

方式二:logstash迁移

如果使用的是elastic的logstash需要下载opensearch插件。download
如果使用opensearch构建的logstash已经包含opensearch插件。download
logstash的pipeline配置:

input {
      # Read all documents from Elasticsearch matching the given query
      elasticsearch {
        hosts => "172.31.73.46:9205"
        index => "test_index"
        docinfo => true
        docinfo_target => "[@metadata][doc]"
        slices => 5
        size => 5000
      }
}

filter {
  # 去掉一些Logstash自己加的字段。
  mutate {
    remove_field => ["@timestamp", "@version"]
  }
}


output {
    opensearch {
      hosts => ["172.31.73.46:9200"]
      index => "opensearch-logstash-test"
      document_type => "%{[@metadata][doc][_type]}"
      document_id => "%{[@metadata][doc][_id]}"
      #user => "admin"
			#password => "admin"
      ssl => false
      ssl_certificate_verification => false
   }
}

$ bin/logstash -f config/pipeline.conf

方式三:S3迁移

  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. 在opensearch和elasticsearch环境设置accesskey和secretkey
bin/opensearch-keystore add --stdin s3.client.default.access_key
bin/opensearch-keystore add --stdin s3.client.default.secret_key
  1. 修改opensearch.yml

设置endpoint和protocol

s3.client.default.endpoint: 172.31.73.46:9000
s3.client.default.protocol: http
  1. 下载s3插件

bin/opensearch-plugin install repository-s3

  1. 重启opensearch以及elasticsearch
  2. 在opensearch和elasticsearch中创建仓库
PUT _snapshot/my_backup 
{
    "type": "s3",
    "settings": {
        "bucket": "xxxxxx"
    }
}
  1. 在elasticsearch中指定备份索引
PUT _snapshot/my_backup/snapshot_1
{
    "indices": "index_1,index_2"
}
  1. 在opensearch中恢复数据
POST _snapshot/my_backup/snapshot_1/_restore

默认行为是把这个快照里存有的所有索引都恢复。如果 snapshot_1 包括五个索引,这五个都会被恢复到我们集群里。

在从 Elasticsearch 迁移OpenSearch 时,需要注意以下几个关键事项: 1. **兼容性评估**:ElasticsearchOpenSearch 在功能和 API 上具有高度的相似性,但两者之间仍存在一些差异。迁移前应仔细对比目标版本之间的兼容性矩阵,确保插件、索引格式及配置参数能够无缝过渡。例如,某些 Elasticsearch 插件可能没有直接对应的 OpenSearch 版本,需要寻找替代方案或自行适配[^3]。 2. **中间件解耦合**:为避免对目标集群造成过大压力,在迁移过程中建议使用 Kafka 等消息中间件进行数据传输。这样可以将数据抽取与写入操作分离,降低系统间的耦合度,提高整体稳定性。此外,Kafka 还能提供缓冲作用,防止因网络波动或处理延迟导致的数据丢失或阻塞。 3. **Java 版本依赖问题**:如果采用 Java 编写的迁移工具,则需特别注意 JDK 版本的兼容性问题。Elasticsearch 客户端通常基于 JDK8 构建,而 OpenSearch 推荐使用 JDK11 或更高版本。因此,在编写迁移程序时,最好将数据抽取和写入逻辑分开实现,以分别满足不同客户端库的要求[^3]。 4. **索引管理与快照迁移**:OpenSearch 提供了快照功能用于备份和恢复数据。当需要将 Elasticsearch 中的索引迁移OpenSearch 时,可以通过创建远程快照的方式来进行。具体来说,可以在 Elasticsearch 上生成快照,并将其存储在一个共享文件系统或 S3 兼容的对象存储中;随后,在 OpenSearch 集群上注册相同的仓库路径并恢复该快照即可完成迁移。在此过程中,要确保两个集群都能访问到相同的快照存储位置,并且正确配置相关权限[^2]。 5. **性能调优与测试验证**:迁移完成后,应对新环境下的查询性能、索引速度等关键指标进行全面测试。根据实际负载情况调整 JVM 参数、线程池设置以及分片数量等参数,以达到最优运行状态。同时也要检查现有应用程序是否能够正常连接至 OpenSearch 并执行预期的操作。 6. **安全性和灾备规划**:确保所有必要的安全措施(如身份认证、访问控制、加密通信)都在新的 OpenSearch 集群中得到了妥善实施。另外,还应该制定详尽的灾难恢复计划,包括定期制作快照、跨区域复制等手段来保障业务连续性[^4]。 7. **监控与日志分析**:建立完善的监控体系对于维护一个健康的搜索引擎至关重要。利用 Kibana 或其他可视化工具跟踪关键健康指标,及时发现潜在故障点;同时也可通过收集和分析日志信息来辅助排查问题根源。 ```json { "query": { "bool": { "must": [ { "range": { "access_time.keyword": { "gte": "2023-01-01 00:00:00", "lt": "2024-01-01 00:00:00", "format": "yyyy-MM-dd HH:mm:ss" } } } ], "filter": { "term": { "loglevel.keyword": "ERROR" } } } } } ``` 通过上述方法和技术细节的应用,可以有效地促进从 ElasticsearchOpenSearch 的平滑过渡,从而充分利用后者提供的开源优势和服务特性。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值