当前位置: 首页 > article >正文

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核心配置(北京->上海 单向同步)

# 建立集群间安全连接
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增量备份(双向同步商品索引)

input {elasticsearch {hosts => ["http://es-bj-node1:9200"]index => "jd_goods"query => '{ "query": { "range": { "@timestamp": { "gte": "now-5m" }}}}'docinfo => truesize => 500scroll => "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. 网络优化配置

# 跨数据中心专用线程池
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):

{"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. 采用时间戳管道统一时区:
PUT _ingest/pipeline/timestamp_pipeline
{"processors": [{"date": {"field": "bj_timestamp","target_field": "@timestamp","timezone": "Asia/Shanghai","formats": ["ISO8601"]}}]
}
http://www.lryc.cn/news/2387505.html

相关文章:

  • C语言学习笔记三 --- V
  • 通过JS模板引擎实现动态模块组件(Vite+JS+Handlebars)
  • 梯度消失和梯度爆炸的原因及解决办法
  • 欧拉定理:若 gcd(a,n)=1,则 a^φ(n)≡1(mod n)。
  • fvm install 下载超时 过慢 fvm常用命令、flutter常用命令
  • Python正则表达式:30秒精通文本处理
  • Introduction to SQL
  • 计算机视觉---YOLOv3
  • #RabbitMQ# 消息队列进阶
  • React从基础入门到高级实战:React 核心技术 - React Router:路由管理
  • 【深度学习】损失“三位一体”——从 Fisher 的最大似然到 Shannon 的交叉熵再到 KL 散度,并走进 PET·P-Tuning微调·知识蒸馏的实战
  • 5 分钟速通密码学!
  • Linux——IP协议
  • Lua 脚本在 Redis 中的运用-24 (使用 Lua 脚本实现原子计数器)
  • Linux信号量(32)
  • 技术视界 | 打造“有脑有身”的机器人:ABC大脑架构深度解析(上)
  • 使用堡塔和XShell
  • 软件项目交付阶段,验收报告记录了什么?有哪些标准要求?
  • LightGBM的python实现及参数优化
  • 封装渐变堆叠柱状图组件附完整代码
  • 分布式项目保证消息幂等性的常见策略
  • 山东大学软件学院创新项目实训开发日志——第十三周
  • 如何在sublime text中批量为每一行开头或者结尾添加删除指定内容
  • Cesium 透明渐变墙 解决方案
  • 网络原理与 TCP/IP 协议详解
  • day022-定时任务-故障案例与发送邮件
  • 新增 git submodule 子模块
  • List优雅分组
  • Linux 使用 Docker 安装 Milvus的两种方式
  • AR眼镜+AI视频盒子+视频监控联网平台:消防救援的智能革命