如何设计ES的冷热数据分离架构?Elasticsearch 集群如何实现高可用?如何避免脑裂问题?如果出现脑裂如何恢复?

以下为Elasticsearch架构设计与高可用方案详细说明:

冷热架构

一、冷热数据分离架构设计(文字描述模拟架构图)

[Hot Layer]  
│
├─ SSD节点组(3节点)
│   ├─ 角色:ingest/data/hot  
│   ├─ 存储:近7天数据  
│   └─ 策略:索引自动滚动  
│
[Warm Layer]  
│
├─ HDD节点组(5节点)  
│   ├─ 角色:data/warm  
│   ├─ 存储:历史数据  
│   └─ 策略:ILM策略自动迁移  
│
[Coordinator Layer]
└─ 独立协调节点(2节点)└─ 角色:coordinating_only  

以下是基于冷热分离架构的详细读写流程及策略解析:

一、读写流程说明
1. 数据写入流程
// 客户端写入示例(自动路由到热节点)
IndexRequest request = new IndexRequest("logs-hot-2024.05.20").source(jsonMap, XContentType.JSON).setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE); // 使用BulkProcessor自动批量提交
BulkProcessor bulkProcessor = BulkProcessor.builder((request, bulkListener) -> client.bulkAsync(request, bulkListener),new BulkProcessor.Listener() { /* ... */ }).setBulkActions(1000).setFlushInterval(TimeValue.timeValueSeconds(5)).build();
2. 数据读取流程
// 查询请求(协调节点自动路由)
SearchRequest request = new SearchRequest("logs-*").source(new SearchSourceBuilder().query(QueryBuilders.rangeQuery("@timestamp").gte("now-7d/d")).size(100));// 设置查询偏好(优先热节点)
request.preference("_only_nodes:hot"); SearchResponse response = client.search(request, RequestOptions.DEFAULT);
二、核心策略解析
1. 索引自动滚动策略(热层)
{"policy": {"phases": {"hot": {"min_age": "0ms","actions": {"rollover": {"max_age": "7d","max_size": "50gb","max_docs": 10000000},"set_priority": {"priority": 100}}}}}
}
2. ILM迁移策略(暖层)
{"policy": {"phases": {"warm": {"min_age": "7d","actions": {"allocate": {"require": {"data": "warm"},"number_of_replicas": 2},"shrink": {"number_of_shards": 1},"forcemerge": {"max_num_segments": 1}}}}}
}
三、策略核心作用
  1. 索引自动滚动(热层):
  • 实时索引:当前活跃索引(如logs-hot-2024.05.20)始终写入热节点组
  • 自动切换:达到7天/50GB/1000万文档任一阈值时,自动创建新索引(logs-hot-2024.05.21)
  • 性能保障:通过优先级设置(priority:100)确保热索引优先分配计算资源
  1. ILM迁移策略(暖层):
  • 自动迁移:索引年龄超过7天后,自动迁移到HDD节点组
  • 存储优化:合并段文件(forcemerge)减少磁盘占用,收缩分片数(shrink)提升查询效率
  • 副本扩展:增加副本数到2份,保障历史数据可用性
四、读写优化效果
指标热层(SSD)暖层(HDD)
写入吞吐量50k+ docs/sec5k+ docs/sec
查询延迟<100ms (P99)<500ms (P99)
存储成本$0.15/GB/month$0.03/GB/month
存储密度3副本2副本+压缩
五、架构验证命令
# 查看索引分布
GET _cat/indices?v&h=index,pri,rep,store.size,node# 监控ILM执行状态
GET _ilm/policy/logs-policy?human# 检查分片分配
GET _cluster/allocation/explain 

二、高可用实战配置

一、高可用架构示意图(文字描述版)

[高可用集群架构]
├─ 主节点组(3节点)  
│   ├─ 角色:master  
│   ├─ 选举策略:多数派仲裁(minimum_master_nodes=2)  
│   └─ 容灾:跨物理机架部署  
│
├─ 热数据节点组(3节点)  
│   ├─ 存储介质:SSD  
│   ├─ 副本策略:1同步副本  
│   └─ 容灾:自动分片重平衡  
│
├─ 冷数据节点组(5节点)  
│   ├─ 存储介质:HDD  
│   ├─ 副本策略:2异步副本  
│   └─ 容灾:跨机房异步复制  
│
└─ 协调节点组(2节点)  ├─ 请求路由:负载均衡  └─ 容灾:客户端重试机制  

二、高可用实现原理

// 高可用核心实现
public class HighAvailability {// 1. 节点角色隔离private static final String[] MASTER_ROLES = {"master"};private static final String[] DATA_HOT_ROLES = {"data", "ingest"};// 2. 数据分片策略int numberOfShards = 5;        // 分片数=节点数int numberOfReplicas = 1;      // 实时同步副本// 3. 客户端重试机制RestClientBuilder.RequestConfigCallback config = builder -> builder.setConnectionRequestTimeout(5000).setSocketTimeout(60000).setMaxRetryTimeout(30000); // 自动重试超时设置
}

三、容灾能力体现

  1. 数据层容灾(基于配置示例):
# 分片分配策略
cluster.routing.allocation.enable: all
indices.recovery.max_bytes_per_sec: 200mb# 故障检测(10秒超时)
discovery.zen.fd.ping_interval: 3s
discovery.zen.fd.ping_timeout: 10s
discovery.zen.fd.ping_retries: 3
  1. 客户端容灾(基于Java示例):
// 多节点接入 + 失效转移
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("es01", 9200),new HttpHost("es02", 9200),new HttpHost("es03", 9200)).setFailureListener(new LoggingFailureListener()) // 节点失效日志记录.setNodeSelector(NodeSelector.SKIP_DEDICATED_MASTERS) // 自动跳过专用master节点
);

四、容灾验证命令

# 查看分片分布(R=副本分片)
GET _cat/shards?v&h=index,shard,prirep,state,docs,node# 模拟节点宕机测试
POST _cluster/nodes/es01/_shutdown# 观察分片恢复进度(应有自动重新分配)
GET _cat/recovery?v&active_only=true

五、关键配置说明

配置项容灾作用推荐值
node.roles角色隔离防止单点故障专用角色分配
discovery.seed_hosts多节点发现防单点失效≥3节点列表
bootstrap.memory_lock防止内存交换导致性能下降true
network.host多网卡绑定提升网络可靠性site

三、脑裂问题解决方案

一、脑裂预防三重保障

# 1. 法定节点数控制(N/2+1)
discovery.zen.minimum_master_nodes: 2# 2. 角色严格隔离(专用master节点)
node.roles: [ master ]# 3. 网络分区感知
cluster.routing.allocation.awareness.attributes: zone
node.attr.zone: zone1

二、脑裂自恢复五步法

# 1. 停服保数据(Windows PowerShell)
Stop-Service elasticsearch-service# 2. 日志定位权威分区(查看最新cluster_state_version)
Select-String -Path "elasticsearch.log" -Pattern "cluster_state_version"# 3. 重置异常节点数据
Remove-Item -Recurse -Force "D:\esdata\nodes\0\_state"# 4. 优先启动权威分区节点
Start-Service elasticsearch-service -ComputerName es-master01# 5. 增量恢复非权威节点
# 通过_cat/recovery接口监控恢复进度

三、核心原理说明

  1. 法定人数机制:通过minimum_master_nodes确保网络分区时只有一个分区能形成多数派
  2. 状态版本追踪:cluster_state_version值最大的分区自动成为权威数据源
  3. 元数据保护:gateway模块持久化最新集群状态,确保重启后恢复最后有效状态

四、实战验证命令

# 检查master节点状态
GET _cat/nodes?v&h=name,master,version# 查看集群健康日志
GET _cluster/health?filter_path=status,number_of_nodes# 验证分片分配策略
GET _cluster/settings?include_defaults=true&filter_path=**.awareness*

五、高可用架构建议

[机房A]                   [机房B]
├─ master节点(3台)        └─ 协调节点(2台)
└─ 热数据节点(SSD)          └─ 温数据节点(HDD)

跨机房部署时需配置:

cluster.routing.allocation.awareness.force.zone.values: zone1,zone2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Trivy 镜像漏洞扫描:从零入门到实战指南

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 ——手把手带你掌握容器安全核心工具 一、安装配置&#xff1a;三步完成 Trivy 部署 Trivy 是由 Aqua Security 开发的开源容器安全工具&#xff0c;支持…

SQL基础概念以及SQL的执行方式

1. SQL入门 1.1. SQL语言功能 可以把 SQL 语言按照功能划分成以下的 4 个部分&#xff1a; DDL&#xff0c;英文叫做 Data Definition Language&#xff0c;也就是数据定义语言&#xff0c;它用来定义我们的数据库对象&#xff0c;包括数据库、数据表和列。通过使用 DDL&…

Rust 1.0 发布十周年,梦想再度扬帆起航!

目录 引言&#xff1a;发布十周年&#xff0c;锋芒露今朝 一、Rust的诞生&#xff1a;源于安全的初心 二、Rust 1.0&#xff1a;十年耕耘&#xff0c;硕果累累 三、核心利器&#xff1a;安全、并发与性能的十年锤炼 四、生态与应用&#xff1a;十年拓展&#xff0c;遍地开…

x86 与 ARM 汇编深度对比:聚焦 x86 汇编的独特魅力

一、引言 汇编语言是硬件与软件的桥梁&#xff0c;x86 和 ARM 作为两大主流架构&#xff0c;其汇编语言在设计理念、指令集、编程风格上差异显著。本文以 x86 汇编为核心&#xff0c;结合与 ARM 的对比&#xff0c;解析 x86 汇编的技术细节与应用场景&#xff0c;助力开发者深…

入驻面包多了

前言 入驻面包多了&#xff0c;其实已经开通面包多账号老久了&#xff0c;一直没有认证&#xff0c;因为没什么拿得出手的作品。 后边会努力沉淀&#xff0c;希望能出一些作品&#xff0c;给大家带来一些帮助&#xff0c;然后能赚到一些些奶茶钱。 一个小工具 上架了一个Win…

Python----目标检测(MS COCO数据集)

一、MS COCO数据集 COCO 是一个大规模的对象检测、分割和图像描述数据集。COCO有几个 特点&#xff1a; Object segmentation&#xff1a;目标级的分割&#xff08;实例分割&#xff09; Recognition in context&#xff1a;上下文中的识别&#xff08;图像情景识别&#xff0…

【Spring AI集成实战】基于NVIDIA LLM API构建智能聊天应用:从配置到函数调用全解析

【Spring AI集成实战】基于NVIDIA LLM API构建智能聊天应用&#xff1a;从配置到函数调用全解析 前言 在人工智能应用开发领域&#xff0c;大语言模型&#xff08;LLM&#xff09;的集成能力至关重要。NVIDIA作为全球领先的GPU厂商&#xff0c;其LLM API提供了对Meta Llama-3.…

通用的管理账号设置设计(一)

背景 首先说明一下需求背景&#xff1a; 在整个角色分类中分为管理员和用户&#xff0c;用户可以分为很多级别&#xff0c;比如用户处于哪个组&#xff08;group&#xff09;&#xff0c;用户处于哪个site&#xff08;城市&#xff09;。管理员可以&#xff1a; 2.1 锁定整个…

第5章 软件工程基础知识

5.2 软件过程模型 掌握常见软件开发模型的基本概念。 瀑布模型&#xff1a;各阶段的固定顺序&#xff0c;如同瀑布流水。适用于需求明确&#xff0c;且很少发生较大变化的项目。 演化模型&#xff1a; 原型模型&#xff1a;适用于用户需求不清&#xff0c;需求经常变化的情况…

深浅拷贝?

一、定义&#xff1a; 浅拷贝&#xff1a;只复制对象的第一层属性&#xff0c;若第一层属性是引用类型&#xff08;如对象、数组&#xff09;&#xff0c;则复制其内存地址&#xff0c;修改拷贝后的嵌套对象会影响原对象。 深拷贝&#xff1a;递归复制对象的所有层级&#xf…

MMA: Multi-Modal Adapter for Vision-Language Models论文解读

abstract 预训练视觉语言模型&#xff08;VLMs&#xff09;已成为各种下游任务中迁移学习的优秀基础模型。然而&#xff0c;针对少样本泛化任务对VLMs进行微调时&#xff0c;面临着“判别性—泛化性”困境&#xff0c;即需要保留通用知识&#xff0c;同时对任务特定知识进行微…

蚂蚁集团 CTO 何征宇:AGI时代,海量数据带来的质变|OceanBase 开发者大会实录

5 月 17 日&#xff0c;“第三届 OceanBase 开发者大会”在广州举办&#xff0c;会中&#xff0c;蚂蚁集团 CTO 何征宇&#xff0c;进行了题为《AGI时代&#xff0c;海量数据带来的质变》的主题分享。他深度剖析了AI 时代下&#xff0c;数据应用范式的变革&#xff0c;以及生成…

python网络爬虫的基本使用

各位帅哥美女点点关注&#xff0c;有关注才有动力啊 网络爬虫 引言 我们平时都说Python爬虫&#xff0c;其实这里可能有个误解&#xff0c;爬虫并不是Python独有的&#xff0c;可以做爬虫的语言有很多例如&#xff1a;PHP、JAVA、C#、C、Python。 为什么Python的爬虫技术会…

网页模板素材网站 web前端网页制作模板

在当今数字化时代&#xff0c;Web 前端网页制作对于企业和个人来说至关重要。无论是企业官网、个人博客还是电商网站&#xff0c;一个美观、功能性强且易于维护的网页设计能够有效提升用户体验和品牌形象。然而&#xff0c;从零开始设计一个网页往往需要耗费大量的时间和精力&a…

ROS系列(一):ROS入门指南 —— 核心解析与版本演进

引言 机器人操作系统&#xff08;ROS&#xff09;的诞生&#xff0c;不仅是一场技术革命&#xff0c;更是一张重新定义机器人开发范式的蓝图。从实验室的原型验证到工业场景的规模化落地&#xff0c;从单机智能到群体协作&#xff0c;ROS以开源、模块化和生态驱动的特性&#…

将 Docker 镜像推送到 GitLab Container Registry 的完整步骤

一、前提准备 GitLab 项目: 在 GitLab 上拥有一个项目&#xff0c;例如 your-group/your-project-name。重要: 确保项目路径&#xff08;尤其是项目名称部分&#xff09;全部使用小写字母。例如&#xff0c;如果初始是 Your-Project&#xff0c;请在项目设置中将其路径修改为 y…

Java-HashMap基础与扩展学习总结

​面试官​&#xff1a; “HashMap 是 Java 中最常用的数据结构之一&#xff0c;你能说说它的底层实现吗&#xff1f;比如哈希冲突是怎么解决的&#xff1f;” ​你​&#xff08;结合源码与优化场景&#xff09;&#xff1a; “好的&#xff0c;HashMap 底层是数组链表/红黑…

嵌入式学习之系统编程(五)进程(2)

一、进程的退出 &#xff08;一&#xff09;僵尸进程与孤儿进程 &#xff08;二&#xff09;相关函数 1、exit函数 2、_exit函数 3、atexit函数 二、进程空间的回收&#xff08;相关函数&#xff09; 1、wait函数 2、waitpid函数 3、练习 4、exec族 5、system函数 一…

AI时代新词-Transformer架构:开启AI新时代的关键技术

一、什么是Transformer架构&#xff1f; Transformer架构 是一种基于自注意力机制&#xff08;Self-Attention Mechanism&#xff09;的深度学习模型架构&#xff0c;最初由Vaswani等人在2017年的论文《Attention Is All You Need》中提出。它主要用于处理序列数据&#xff08…

基于cornerstone3D的dicom影像浏览器 第二十三章 mpr预设窗值与vr preset

文章目录 前言一、mpr窗口预设窗值二、vr preset三、调用流程 前言 实现mpr窗口预设窗值&#xff0c;vr窗口预设配色 效果如下&#xff1a; 一、mpr窗口预设窗值 可参考 第十五章 预设窗值 逻辑一样的&#xff0c;把windowWidth, windowCenter值转换为voiRange值&#xff0c;…