You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在两台机器间同步ES8的prod与staging环境数据/索引?

ES8 生产环境到测试环境数据同步最优方案

针对两台配置一致的ES8集群(prod生产、staging测试),根据不同的同步需求,推荐以下几种最优方案:

1. 全量同步:Snapshot and Restore(快照恢复)

官方原生支持的全量同步方案,适合一次性同步或定期更新测试数据集的场景,数据一致性最高,对prod集群性能影响极小。

操作步骤:

  • 配置prod集群快照仓库:选择可被两个集群访问的存储(如NFS共享目录、对象存储),执行API创建仓库:
    PUT _snapshot/prod_backup_repo
    {
      "type": "fs",
      "settings": {
        "location": "/path/to/shared/backup",
        "compress": true,
        "max_snapshot_bytes_per_sec": "50mb"
      }
    }
    
  • 创建prod索引快照:对需要同步的索引生成快照(支持指定单个或多个索引):
    PUT _snapshot/prod_backup_repo/prod_full_snapshot_20240520
    {
      "indices": "prod_index_1,prod_index_2",
      "ignore_unavailable": true,
      "include_global_state": false
    }
    
  • 在staging集群恢复快照:先配置相同的快照仓库(确保存储路径可访问),再执行恢复:
    POST _snapshot/prod_backup_repo/prod_full_snapshot_20240520/_restore
    {
      "indices": "prod_index_1,prod_index_2",
      "rename_pattern": "prod_(.+)",
      "rename_replacement": "staging_$1",
      "include_global_state": false
    }
    
    (注:rename_pattern可将prod索引重命名为staging前缀,避免冲突)

优势:

  • 官方原生工具,兼容性强,数据一致性有保障
  • 快照为增量模式,后续快照仅存储变化数据,节省存储
  • 对prod集群性能影响低(快照为后台异步操作)

注意事项:

  • 确保staging与prod的ES版本兼容(ES8系列内版本尽量完全一致)
  • 快照存储需具备两个集群的读写权限
  • 恢复前可暂停staging集群的写入操作,避免数据冲突

2. 增量/实时同步:Cross-Cluster Replication(CCR)

适合需要持续保持staging与prod数据近实时同步的场景,无需手动触发,自动同步增量数据。

操作步骤:

  • 配置跨集群信任与连接:在staging集群的elasticsearch.yml中添加prod集群的远程连接配置:
    cluster.remote.prod_cluster.seeds: ["prod-server-ip:9300"]
    cluster.remote.prod_cluster.skip_unavailable: true
    
    或通过API动态配置:
    PUT _cluster/settings
    {
      "persistent": {
        "cluster.remote.prod_cluster.seeds": ["prod-server-ip:9300"]
      }
    }
    
  • 在staging创建follower索引:指向prod的leader索引,开启实时同步:
    PUT _ccr/follow/staging_index_1
    {
      "remote_cluster": "prod_cluster",
      "leader_index": "prod_index_1",
      "max_read_request_operation_count": 1024,
      "max_outstanding_read_requests": 16
    }
    

优势:

  • 近实时同步增量数据,staging数据始终与prod保持一致
  • 自动处理索引结构变更、分片调整等操作
  • 无需手动干预,适合持续测试场景

注意事项:

  • 两个集群需网络互通(9300端口开放)
  • prod集群需配置权限允许staging的访问(可通过角色控制)
  • follower索引默认只读,若测试需要写入,需先暂停follow或克隆索引后操作

3. 轻量自定义同步:Logstash/elasticdump

适合小数据量索引同步,或需要对数据进行自定义处理(字段过滤、格式修改)的场景。

Logstash配置示例:

input {
  elasticsearch {
    hosts => ["prod-server-ip:9200"]
    index => "prod_index"
    query => '{"query": {"match_all": {}}}'
    scroll => "5m"
    size => 1000
  }
}
# 可选:添加filter进行数据处理
# filter {
#   mutate { remove_field => ["sensitive_field"] }
# }
output {
  elasticsearch {
    hosts => ["staging-server-ip:9200"]
    index => "staging_index"
  }
}

elasticdump命令示例:

# 同步数据
elasticdump --input=http://prod-server-ip:9200/prod_index --output=http://staging-server-ip:9200/staging_index

# 同步索引映射
elasticdump --input=http://prod-server-ip:9200/prod_index/_mapping --output=http://staging-server-ip:9200/staging_index/_mapping

优势:

  • 灵活度高,可自定义同步逻辑与数据处理规则
  • 工具轻量化,部署简单
  • 适合小数据量或需要修改数据后同步的场景

注意事项:

  • 大数据量时性能低于快照与CCR,会对prod集群产生一定查询压力
  • 需控制同步并发量,避免影响prod业务

方案选择总结

  • 一次性全量同步/定期更新:优先选择Snapshot and Restore,性能与一致性最优
  • 持续近实时同步:选择CCR,实现自动化同步,减少运维成本
  • 小数据量/自定义需求:选择Logstash或elasticdump,灵活满足个性化需求

内容的提问来源于stack exchange,提问作者Remco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:17:10