Elasticsearch 如何实现跨数据中心的数据同步?

实战场景

双数据中心容灾,要求RPO<5分钟,RTO<30分钟

‌RPO(Recovery Point Objective)‌:

RPO指的是灾难发生后,系统能够恢复到的数据更新点的时间。简单来说,它衡量的是数据丢失的量。在你的例子中,RPO<5分钟意味着在灾难发生后,系统能够恢复到灾难发生前5分钟内的数据状态,从而确保数据丢失量控制在5分钟以内。

‌RTO(Recovery Time Objective)‌:

RTO则是指从灾难发生到业务系统完全恢复并可以重新提供服务所需的时间。它衡量的是业务中断的时间长度。在你的例子中,RTO<30分钟意味着在灾难发生后,系统能够在30分钟内完全恢复并重新提供服务,从而将业务中断的时间控制在30分钟以内。

1. CCR核心配置(北京->上海 单向同步)

bash:ccr_setup.sh 复制代码
# 建立集群间安全连接
PUT /_cluster/settings
{
  "persistent": {
    "cluster.remote.shanghai_cluster.seeds": "es-sh-node1:9300,es-sh-node2:9300",
    "cluster.remote.shanghai_cluster.skip_unavailable": true
  }
}

# 创建跟随策略(同步订单索引)
PUT /_ccr/auto_follow/jd_orders
{
  "remote_cluster" : "shanghai_cluster",
  "leader_index_patterns" : ["jd_orders-*"],
  "follow_index_pattern" : "sh_{{leader_index}}",
  "max_read_request_operation_count" : 5120,
  "max_outstanding_read_requests" : 24
}

2. Logstash增量备份(双向同步商品索引)

ruby:logstash/pipeline/jd_goods.conf 复制代码
input {
  elasticsearch {
    hosts => ["http://es-bj-node1:9200"]
    index => "jd_goods"
    query => '{ "query": { "range": { "@timestamp": { "gte": "now-5m" }}}}'
    docinfo => true
    size => 500
    scroll => "5m"
  }
}

output {
  # 上海集群写入
  elasticsearch {
    hosts => ["http://es-sh-node1:9200"]
    index => "%{[@metadata][_index]}"
    document_id => "%{[@metadata][_id]}"
    pipeline => "timestamp_pipeline"
  }
  
  # 本地备份
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "jd_goods_backup"
  }
}

3. 网络优化配置

yaml:config/elasticsearch.yml 复制代码
# 跨数据中心专用线程池
thread_pool.search.size: 32
thread_pool.search.queue_size: 2000

# 传输层参数优化
transport.tcp.compress: true
transport.profiles.default.tcp_keep_alive: true
transport.profiles.default.tcp_no_delay: true

监控方案(基于Kibana):

json:.kibana/monitoring.json 复制代码
{
  "alert": {
    "name": "CCR延迟告警",
    "conditions": {
      "script": "ctx.results[0].hits.hits[0]._source.follower_lag > 300000"
    },
    "actions": {
      "webhook": "http://alert.jd.com/ccr_warn"
    }
  }
}

实战经验

  1. 使用专用10Gbps通道,实测同步延迟120-180ms
  2. 索引分片数=数据中心数量×2(北京8节点集群使用24分片)
  3. 采用时间戳管道统一时区:
bash 复制代码
PUT _ingest/pipeline/timestamp_pipeline
{
  "processors": [{
    "date": {
      "field": "bj_timestamp",
      "target_field": "@timestamp",
      "timezone": "Asia/Shanghai",
      "formats": ["ISO8601"]
    }
  }]
}
相关推荐
anxiao_m15 分钟前
数字孪生私有化部署怎么选?主流平台横向深度测评
大数据·3dcoat
Data_Journal1 小时前
什么是 CAPTCHA,它是如何工作的?
java·大数据·服务器·前端·数据库
跨境小彭1 小时前
店群运营实操复盘:批量活动申报自动化优化方案
大数据·运维·人工智能·自动化·跨境电商·temu·temu电商运营
Eric.461 小时前
Stable Diffusion+ComfyUI+OpenClaw AI漫剧量产提示词工程:结构化Prompt、负面词脱敏、权重锁定防画面崩坏全方案
大数据·人工智能·stable diffusion·prompt·comfyui·ai漫剧
长谷深风1112 小时前
ReAct框架:让AI像人类一样思考与行动
大数据·人工智能·热门·ai agent·agent工作流·智能体设计·ai产品设计
办公室马主任2 小时前
乐图数字化打通哪几个环节?从车间数据到经营决策的数据链路设计
大数据·人工智能·系统架构·制造
delishcomcn2 小时前
数字孪生+AI预测:热烫膜分切机迈向“黑灯工厂”的关键路径
大数据·人工智能
Raas1002 小时前
MAI Gateway(魔芋企业级AI网关):企业AI网关的合规审计与调用留痕设计
大数据·人工智能·gateway·企业·api网关·mai gateway·企业级网关
Irene19913 小时前
剑指大数据:企业级数据仓库项目实战(金融租赁版)读书笔记__大数据测试集群的服务器节点服务分配规划表__解读(附:技术选型清单)
大数据·数据仓库·金融
小五传输3 小时前
Serv-U替代方案怎么选?政务机关文件安全传输对比与迁移指南
大数据·运维·安全