ElasticSearch-集群

本篇文章依據ElasticSearch權威指南進行實操和記錄

1,空集群

即不包含任何節點的集群

集群大多數分為兩類,主節點和數據節點

主節點

  1. 職責:主節點負責管理集群的狀態,例如分配分片、添加和刪除節點、監控節點故障等。它們不直接處理搜索或數據存儲任務,但它們對于集群的健康和性能至關重要。

  2. 選舉過程:在Elasticsearch中,主節點是通過選舉產生的。默認情況下,集群中的任何節點都可以成為主節點候選者。這意味著任何一個節點都可以發起成為主節點的請求,然后與其他節點競爭以決定誰是新的主節點。

  3. 資源需求:主節點通常不需要太多的資源來處理其任務,因為它不直接處理數據。但是,它需要穩定的網絡連接和足夠的CPU來處理集群狀態管理任務。

數據節點

  1. 職責:數據節點負責存儲數據、搜索數據和處理與數據相關的操作,如索引和搜索請求。數據節點是執行實際數據存儲和檢索任務的地方。

  2. 資源需求:數據節點需要大量的資源來存儲和處理數據。這包括大量的內存(用于緩存)、磁盤空間(用于存儲數據)以及CPU資源(用于處理搜索和聚合查詢)。

  3. 配置:在Elasticsearch中,默認情況下,每個節點都是數據節點。但是,你可以通過配置來指定哪些節點應該僅作為主節點或僅作為數據節點運行

空集群即啟動節點且不包含任何數據和索引,由于集群中必有一個主節點,所以空集群比定為主節點

2,集群健康

集群健康是集群監控系統數據中的其中一項,而且最為重要

輸入如下指令

GET /_cluster/health

返回

可以看到status返回了yellow

status狀態

status指示著當前集群在總體上是否工作正常。包括三種顏色,green:所有的主分片和副本分片都正常運行,yellow:所有的主分片都正常運行,但不是所有的副本分片都正常運行,red:有主分片沒能正常運行。

全部字段含義

{"cluster_name": "elasticsearch", //集群名稱"status": "green", //集群狀態  "timed_out": false, //檢查是否因超時中斷,false表示檢查完整完成"number_of_nodes": 2, //集群中節點總數(當前為2個)"number_of_data_nodes": 2, //具備數據存儲功能的節點數量(當前為2個)"active_primary_shards": 42, //活躍的主分片數(42個)"active_shards": 84,//總分片數(含副本,84個)"relocating_shards": 0, //正在遷移的分片數(0表示無遷移)"initializing_shards": 0, //初始化中的分片數"unassigned_shards": 0, //未分配的分片數"unassigned_primary_shards": 0,//未分配的主分片數"delayed_unassigned_shards": 0, //延遲未分配的分片數"number_of_pending_tasks": 0, //待處理任務數"number_of_in_flight_fetch": 0, //進行中的分片數據獲取操作數"task_max_waiting_in_queue_millis": 0, //任務隊列中最長等待時間的毫秒數"active_shards_percent_as_number": 100 //活躍分片百分比,100表示全部分片正常
}

3,添加索引

索引之前這篇文章簡單介紹過ElasticSeach快速上手筆記-入門篇-CSDN博客??????

es的索引指的是存儲相關數據的數據結構,可以類比成mysql的數據表,es索引會存儲不同的數據結構key和value的關系

分片是一個 Lucene 的實例,以及它本身就是一個完整的搜索引擎。 我們的文檔被存儲和索引到分片內,但是應用程序是直接與索引而不是與分片進行交互

分片可以把數據分散存儲在es的集群中

同樣分片也分為主分片和副分片

主分片:每個索引被劃分成若干個主分片,每個主分片都是一個獨立的索引。主分片負責處理所有的讀和寫操作?,主分片的數量在索引創建時確定,之后不能更改?,主分片是數據存儲的基本單位,每個主分片存儲索引的一部分數據?

副分片:副本分片是主分片的完整復制,位于不同的節點上,副本的數量可以在索引運行時動態調整?,副本分片用于提高系統的可用性和容錯性。如果某個節點故障,系統仍然能夠通過副本分片提供服務?

新建索引

接下來參考權威指南在空集群新建一個索引

PUT /blogs
{"settings" : {"number_of_shards" : 3,"number_of_replicas" : 1}
}

返回

可以看到成功新建

再次查看集群健康狀態

可以看到status=yellow,集群狀態主分片全部正常運行,但是副分片未全部正常,

unassigned_shards=5,這里處于未被分配狀態的分片數量有5個,除了最開始的2個,剛才又新建了2個,所以有5個

注意分片要不只存儲原始數據,要不只存儲副本數量,無需既存儲原始數據又存儲副本數據,這樣會在數據丟失的時候原始數據和副本全部丟失

4,添加故障轉移

當前咱的集群只有一個節點,這樣當前節點宕機等異常的時候會導致數據丟失

所以可以部署新的節點來解決這個問題

準備新節點

首先復制一份es文件

同時把data文件刪除掉

修改elasticsearch.yml文件

cluster.name: elasticsearchnode.name: node-1
http.port: 9303

cluster.name:集群名字,確認兩個節點保持相同

node.name:節點名稱,不同的節點名稱唯一

http.port:端口號,各個節點均不同

啟動新節點

./bin/elasticsearch

進入es文件下 和之前啟動節點相同執行以上指令

kibana查看節點數量

輸入指令

GET /_cat/nodes?v

返回

可以看到當前集群下有兩個節點

查看集群健康狀態

GET /_cluster/health

返回

可以看到這個時候的status=green了 表明所有的節點都在正常運行

同時unassigned_shards的數量變成了0

表明所有的分片都分配好了

分片分布情況

節點一分片數量3個,節點二數量3個

可以看到兩個節點的分片是均勻分布的

5,水平擴容

在了解水平擴容之前,先了解下擴容有幾類

水平擴容:水平擴容是指增加更多的節點到集群中,而不是增加單個節點的資源。這種方式可以顯著提高系統的容量和處理能力

垂直擴展:垂直擴展是指增加單個節點的資源,比如增加CPU、內存或者存儲空間。這種方式通常通過升級單個節點的硬件來實現。

當開發的項目量級逐漸增加,需要的存儲的數據越來越多,只有兩個節點是遠遠不夠的,所以需進行水平擴容

增加節點3

參考之前部署節點部署節點3

可以看到節點3成功啟動了

重新查看當前集群的節點情況

GET /_cat/nodes?v

返回

可以看到這個時候多了節點node-3,共有3個節點

分片分布情況

node-1

node-1的分片有2個

node-3

node-3的分片有2個

默認節點

默認節點同樣有2個

作用

之前每個節點擁有3個分片,現在每個節點擁有2個分片

每個節點的硬件資源(CPU, RAM, I/O)將被更少的分片所共享,每個分片的性能將會得到提升

現在擁有6個分片(3個主分片和3個副本分片)的索引可以最大擴容6個節點,每個節點上存在一個分片,并且每個分片擁有所在節點的全部資源

繼續擴容

權威指南里指出當需要的節點數量超過了當前的分片數量的時候,該咋辦

這時候可以通過增加分片的數量進而進行水平擴容

增加分片可以選擇主分片和副本分片,但主分片在索引新建的時候已確定了,但副本分片可以進行讀操作和搜索操作可以動態修改

修改副本分片數量為2個

PUT /blogs/_settings
{"number_of_replicas" : 2
}

返回

再次查看分片分布情況

node-1

node-3

默認節點

這個時候分片數量擴容到了9個,因此節點數量可以擴容到9個

注意這個時候咱只是新建了3個節點,沒有提高性能,單分片能夠從節點中獲取的資源更少,所以需拿到更好的水平得把節點數量擴容到分片數量保持相同

當然現在在不增加節點的情況下,可以保證部分節點宕機的情況下,數據不會丟失

6,應對故障

現在來測試下宕機的情況下,節點之間的處理邏輯

查看節點情況

這個時候關閉主節點之后,而集群中必定有個主節點,所以會新選舉出來一個新的主節點

同時主分片會丟失,但不會影響es的正常工作

同時這個主分片對應的副本分片會變成主分片

指令

查看節點的id

GET /_cat/nodes?v&h=id,name,ip,node.role,master

返回

id   name                     ip        node.role   master
O3QH local 127.0.0.1 cdfhilmrstw *
Y-Pa node-2                   127.0.0.1 cdfhilmrstw -
qqxZ node-3                   127.0.0.1 cdfhilmrstw -

這個時候主節點為local

其它的兩個節點為從節點

原節點主副分片分配情況

index shard prirep state   docs store dataset ip        node
blogs 0     r      STARTED    0  249b    249b 127.0.0.1 node-2
blogs 0     p      STARTED    0  249b    249b 127.0.0.1 node-3
blogs 0     r      STARTED    0  249b    249b 127.0.0.1 local
blogs 1     r      STARTED    0  249b    249b 127.0.0.1 node-2
blogs 1     r      STARTED    0  249b    249b 127.0.0.1 node-3
blogs 1     p      STARTED    0  249b    249b 127.0.0.1 local
blogs 2     p      STARTED    0  249b    249b 127.0.0.1 node-2
blogs 2     r      STARTED    0  249b    249b 127.0.0.1 node-3
blogs 2     r      STARTED    0  249b    249b 127.0.0.1 local

主節點擁有 1個主節點p1、2個副分片r0和r2

從節點node-2 擁有r0、r1、p2

從節點node-3擁有 p0、r1、r2

刪除主節點

首先看主節點的PID

GET /_nodes/process

返回

可以看到PID為74142

關閉該節點

kill -9 74142 

重新啟動節點1

可以看到主節點變成了節點3

id   name                     ip        node.role   port master
qqxZ node-3                   127.0.0.1 cdfhilmrstw 9302 *
O3QH local                    127.0.0.1 cdfhilmrstw 9300 -
Y-Pa node-2                   127.0.0.1 cdfhilmrstw 9301 -

再次關閉節點3

可以看到節點2被選舉成為了主節點

當主節點關閉,其余的從節點會選舉成為新的主節點

新分片分布情況

node-2分片:p0、p1、p2

節點1:r0、r1、r2

這個時候查看集群健康狀態

GET /_cluster/health

返回

可以看到狀態status=yellow

由于這個時候關閉了節點3,有3個副本分片沒有被分配,但集群仍然會正常運行,由于節點1存儲這個所有主分片的副本分片

重新啟動節點3

看分片情況

節點1:r0、r1、r2

節點2:p0、p1、p2

節點3:r0、r1、r2

這個時候未分配的副本分片重新分配給了節點3

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81991.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81991.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81991.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LG P9844 [ICPC 2021 Nanjing R] Paimon Segment Tree Solution

Description 給定序列 a ( a 1 , a 2 , ? , a n ) a(a_1,a_2,\cdots,a_n) a(a1?,a2?,?,an?),有 m m m 次修改 ( l , r , v ) (l,r,v) (l,r,v): 對每個 i ∈ [ l , r ] i\in[l,r] i∈[l,r],令 a i ← a i v a_i\gets a_iv ai?←…

Google Prompt Tuning:文本嵌入優化揭秘

Google Research Prompt Tunin :from_embedded_string 在 Google Research 的 Prompt Tuning 項目代碼庫 中,from_embedded_string 函數主要用于基于字符串文本初始化提示詞的嵌入向量,其調用場景通常與提示詞優化或任務適配相關。 1. 核心代碼位置 from_embedded_string …

網頁 H5 微應用接入釘釘自動登錄

??關于云審批 云審批(cloud approve) ,一款專為小微企業打造,支持多租戶的在線審批神器。它簡化了申請和審批流程,讓您隨時隨地通過手機或電腦完成請款操作。員工一鍵提交申請,審批者即時響應&#xff0c…

idea無法識別Maven項目

把.mvn相關都刪除了 導致Idea無法識別maven項目 或者 添加導入各個模塊 最后把父模塊也要導入

飛槳paddle import fluid報錯【已解決】

跟著飛槳的安裝指南安裝了paddle之后 pip install paddlepaddle有一個驗證: import paddle.fluid as fluid fluid.install check.run check()報錯情況如下,但是我在pip list中,確實看到了paddle安裝上了 我import paddle別的包&#xff0c…

現代化SQLite的構建之旅——解析開源項目Limbo

現代化SQLite的構建之旅——解析開源項目Limbo 在當今飛速發展的技術世界中,輕量級且功能強大的數據庫已成為開發者的得力助手。當我們談論輕量級數據庫時,SQLite無疑是一個舉足輕重的名字。然而,隨著技術的進步,我們對數據庫的需求也變得更加多樣化。這正是Limbo項目誕生…

MinIO:從入門到精通,解鎖云原生存儲的奧秘

一、引言:為什么 MinIO 正在重塑存儲世界? 在云計算和大數據時代,傳統存儲系統面臨擴展性差、成本高、兼容性不足等挑戰。MinIO 憑借其 S3 兼容性、分布式架構、高性能存儲 等特性,成為企業構建現代化存儲基礎設施的首選。 本文…

vscode怎么關閉自動定位文件

關閉自動定位文件功能 方式1 在設置中搜索: explorer.autoReveal 方式2 直接在settings.json中增加"explorer.autoReveal": false 添加類似jetbrains IDE的文件定位功能 可以直接安裝插件市場搜索niushuaibing.vs-location, 安裝后會有文件定位按鈕, 點擊后即可…

學習路之uniapp--unipush2.0推送功能--給自己發通知

學習路之uniapp--unipush2.0推送功能--給自己發通知 一、綁定云空間及創建云函數二、編寫發送界面三、效果后期展望: 一、綁定云空間及創建云函數 package.json {"name": "server-push","dependencies": {},"main": "…

什么是VR展示?VR展示的用途

隨著科技的迅猛發展,我們步入一個全新的數字時代。在這個時代,虛擬現實(VR)技術嶄露頭角,逐步改變我們對世界的認知。全景展示廳作為VR技術與傳統展覽藝術的完美結合,以獨特的全景視角,引領我們…

抖音IP屬地跟無線網有關嗎?如何更改

IP屬地顯示功能讓許多用戶感到好奇——為什么自己的位置信息有時準確,有時卻顯示在其他城市?這時,用戶會疑惑:抖音IP屬地跟無線網有關系嗎?抖音的IP屬地顯示與其所使用的網絡類型(包括無線網)密…

JESD204 ip核使用與例程分析(二)

JESD204 ip核使用與例程分析(二) JESD204時鐘方案專用差分時鐘對例程分析jesd204_0_transport_layer_demapperjesd204_0_sig_chkjesd204_0_clockingjesd204_0 ip核port寄存器AXI-LITE寄存器配置jesd204_phy ip核JESD204時鐘方案 圖3-1所示為最通用、靈活的時鐘解決方案。在圖…

微軟全新開源的Agentic Web網絡項目:NLWeb,到底是什么 ?

目錄 1、背景 2、NLWeb是什么? 3、NLWeb是如何工作的? 3.1 技術原理 3.2 對發布者的價值 3.3 核心團隊與合作伙伴 4、快速入門指南 5、延伸閱讀 Agentic:Agent的形容詞,Agentic指系統由大型語言模型(LLM&#…

前端性能優化的秘密武器:Preload 與 Prefetch 的深度解析

前端性能優化的秘密武器:Preload 與 Prefetch 的深度解析 在前端開發中,頁面加載速度直接影響用戶體驗和業務轉化率。而“資源預加載”技術,正是優化加載性能的核心手段之一。本文將深入淺出地講解 Preload 與 Prefetch 這兩項技術&#xff…

App Builder技術選型指南:從AI編程到小程序容器,外賣App開發實戰

在2025年快速迭代的技術生態中,開發者構建App的路徑愈發多樣化。本文以開發一個同城外賣App為例,對比當前主流的AI編程工具(如Cursor、GitHub Copilot、Trae)與小程序容器技術(如FinClip)的優劣勢、難易度及…

深度學習入門到實戰:用PyTorch打通數學、張量與模型訓練全鏈路?

本文較長,建議點贊收藏,以免遺失。更多AI大模型應用開發學習視頻及資料,盡在聚客AI學院。 一. 人工智能、機器學習與深度學習的關系 1.1 概念層次解析 人工智能(AI):使機器模擬人類智能的廣義領域 機器學…

windows服務器部署jenkins工具(一)

jenkins作為一款常用的構建發布工具,極大的簡化了項目部署發布流程。jenkins通常是部署在linux服務上,今天給大家分享的是windows服務器上如何搭建jenkins發布工具。 1.首先第一步還是看windows安裝docker 這篇文章哈,當然也可以不采用docke…

前端開發規范性利器系列之:ESLint

前言 我是一名從事低代碼平臺研發的前端CV程序猿,有幾十名像我一樣的小伙伴協同研發。在長期的多人協作和滾動迭代中,不出意外,代碼中會充斥各種“壞味道”,如代碼風格不統一、擴展性和靈活性降低等問題。我們是如何解決這些問題的…

數據結構知識點匯總

1、在數據結構中,隨機訪問是指能夠直接訪問任一元素,而不需要從特定的起始位置開始,也不需要按順序訪問其他元素。這種訪問方式通常不涉及遍歷。例如,數組(array)支持隨機訪問,你可以直接通過索…

ubuntu中上傳項目至GitHub倉庫教程

一、到github官網注冊用戶 1.注冊用戶 地址:https://github.com/ 2.安裝Git 打開終端,輸入指令git,檢查是否已安裝Git 如果沒有安裝就輸入指令 sudo apt-get install git 二、上傳項目到github 1.創建項目倉庫 進入github主頁,點擊號…