第5章:企业级大规模Elasticsearch集群多数据中心架构设计
5.1 问题定义
要解决什么问题
在第4章中,我们完成了单数据中心的生产级ES集群部署。但在实际生产环境中,单数据中心存在以下风险:
核心问题:
- 单点故障: 数据中心故障(断电、火灾、网络中断)导致整个服务不可用
- 合规要求: 数据本地化要求,数据不能跨地域存储
- 性能问题: 跨地域用户访问延迟高,影响用户体验
- 容量限制: 单数据中心容量有限,无法支撑超大规模数据
解决方案: 多数据中心部署,实现异地容灾、就近访问、读写分离。
5.2 多数据中心部署场景分析
场景1:异地容灾
需求: 主数据中心故障时,快速切换到备数据中心,保证业务连续性。
架构: 主动-被动(Active-Passive)
- 主数据中心: 处理所有读写请求
- 备数据中心: 仅同步数据,不处理请求
- 故障切换: DNS切换或应用配置切换
适用场景:
- 金融、电商等对可用性要求高的业务
- RTO(恢复时间目标)< 30分钟
- RPO(恢复点目标)< 5分钟
场景2:就近访问
需求: 用户分布在不同地域,就近访问降低延迟。
架构: 多个独立集群
- 北京集群: 服务北方用户
- 上海集群: 服务东部用户
- 广州集群: 服务南方用户
适用场景:
- 全国性业务,用户分布广泛
- 延迟要求< 100ms
- 数据可接受最终一致性
场景3:读写分离
需求: 写入集中在主中心,查询分散到多个中心,减轻主中心压力。
架构: 主动-主动(Active-Active)
- 主中心: 处理所有写入
- 从中心: 处理查询请求
- 数据同步: CCR实时同步
适用场景:
- 写多读多场景
- 查询可接受一定延迟
- 需要减轻主中心压力
5.3 跨集群复制(CCR)原理与配置
CCR工作原理
CCR(Cross-Cluster Replication)是ES提供的跨集群数据复制功能,支持将索引从一个集群复制到另一个集群。
核心概念:
- Leader索引: 主集群上的索引,可读写
- Follower索引: 从集群上的索引,仅可读
- 复制方向: Leader → Follower(单向)
工作流程:
- 在Leader集群上创建索引
- 在Follower集群上创建Follower索引,指定Leader索引
- Follower索引自动从Leader索引同步数据
- Follower索引只读,所有写入必须发送到Leader索引
CCR配置实践
步骤1:配置远程集群
在Follower集群上配置Leader集群:
# elasticsearch.yml(Follower集群)cluster:name:follower-clusterremote:leader:seeds:["leader1:9300","leader2:9300","leader3:9300"]验证远程集群连接:
GET_remote/info # 期望返回Leader集群信息步骤2:创建Leader索引
在Leader集群上创建索引:
PUT/leader_index{"settings":{"number_of_shards":5,