如何設計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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82394.shtml
英文地址,請注明出處:http://en.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;…