初識ElastricSearch

      網(wǎng)友投稿 635 2025-04-03

      不知道大家在項(xiàng)目中是否使用過Elastricsearch?大家對它的了解又有多少呢?官網(wǎng)的定義:Elasticsearch是一個(gè)分布式、可擴(kuò)展、近實(shí)時(shí)的搜索與數(shù)據(jù)分析引擎。今天我們就來揭開一下它的神秘面紗(以下簡稱ES)。


      ES 是使用 Java 編寫的一種開源搜索引擎,它在內(nèi)部使用 Lucene 做索引與搜索,通過對 Lucene 的封裝,隱藏了 Lucene 的復(fù)雜性,取而代之的提供一套簡單一致的 RESTful API。然而,ES不僅僅是 Lucene,并且也不僅僅只是一個(gè)全文搜索引擎,它還有如下特點(diǎn):

      一個(gè)分布式的實(shí)時(shí)文檔存儲,每個(gè)字段可以被索引與搜索;

      一個(gè)分布式實(shí)時(shí)分析搜索引擎;

      能勝任上百個(gè)服務(wù)節(jié)點(diǎn)的擴(kuò)展,并支持 PB 級別的結(jié)構(gòu)化或者非結(jié)構(gòu)化數(shù)據(jù)。

      首先我們將數(shù)據(jù)大體分為兩類,一類是結(jié)構(gòu)化數(shù)據(jù):也稱作行數(shù)據(jù),指具有固定格式或有限長度的數(shù)據(jù),是由二維表結(jié)構(gòu)來邏輯表達(dá)和實(shí)現(xiàn)的數(shù)據(jù),嚴(yán)格地遵循數(shù)據(jù)格式與長度規(guī)范,主要通過關(guān)系型數(shù)據(jù)庫進(jìn)行存儲和管理,如數(shù)據(jù)庫、元數(shù)據(jù)等;一類是非結(jié)構(gòu)化數(shù)據(jù):又可稱為全文數(shù)據(jù),不定長或無固定格式,不適于由數(shù)據(jù)庫二維表來表現(xiàn),包括所有格式的辦公文檔、XML、HTML、Word 文檔,郵件,各類報(bào)表、圖片和音頻、視頻信息等。

      如果要更細(xì)致的區(qū)分的話,XML、HTML 可劃分為半結(jié)構(gòu)化數(shù)據(jù)。因?yàn)樗鼈円簿哂凶约禾囟ǖ臉?biāo)簽格式,所以既可以根據(jù)需要按結(jié)構(gòu)化數(shù)據(jù)來處理,也可抽取出純文本按非結(jié)構(gòu)化數(shù)據(jù)來處理。

      根據(jù)兩種數(shù)據(jù)分類,搜索也相應(yīng)的分為兩種:

      (1)結(jié)構(gòu)化數(shù)據(jù)搜索:因?yàn)樗鼈兙哂刑囟ǖ慕Y(jié)構(gòu),所以我們一般都是可以通過關(guān)系型數(shù)據(jù)庫(MySQL,Oracle 等)的二維表(Table)的方式存儲和搜索,也可以建立索引。

      (2)非結(jié)構(gòu)化數(shù)據(jù)搜索:即對全文數(shù)據(jù)的搜索,主要有兩種方法:順序掃描、全文搜索;

      順序掃描:即按照順序掃描的方式查詢特定的關(guān)鍵字。例如給你一張報(bào)紙,讓你找到該報(bào)紙中“阿Q”的文字在哪些地方出現(xiàn)過。你肯定需要從頭到尾把報(bào)紙閱讀掃描一遍然后標(biāo)記出關(guān)鍵字在哪些版塊出現(xiàn)過以及它的出現(xiàn)位置。這種方式無疑是最耗時(shí)的最低效的。

      全文搜索:將非結(jié)構(gòu)化數(shù)據(jù)中的一部分信息提取出來,重新組織,使其變得有一定結(jié)構(gòu)(這種結(jié)構(gòu),我們稱之為索引),然后對此有一定結(jié)構(gòu)的數(shù)據(jù)進(jìn)行搜索,從而達(dá)到搜索相對較快的目的。這種方式的主要工作量在前期索引的創(chuàng)建,但是對于后期搜索卻是快速高效的。

      Lucene是apache軟件基金會4 jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開放源代碼的全文檢索引擎工具包,但它不是一個(gè)完整的全文檢索引擎,而是一個(gè)全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是為軟件開發(fā)人員提供一個(gè)簡單易用的工具包,以方便的在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。Lucene是一套用于全文檢索和搜尋的開源程式庫,由Apache軟件基金會支持和提供。

      我所熟知的以 Lucene 為基礎(chǔ)建立的開源可用全文搜索引擎主要有 Solr 和 ES:ES 本身就具有分布式的特性和易安裝使用的特點(diǎn),而 Solr 的分布式需要借助第三方來實(shí)現(xiàn),例如通過使用 ZooKeeper 來達(dá)到分布式協(xié)調(diào)管理。

      接下來我們說一下Lucene能實(shí)現(xiàn)全文搜索的一個(gè)重要的查詢結(jié)構(gòu):倒排索引

      舉例

      Java is the best programming language.

      PHP is the best programming language.

      Javascript is the best programming language.

      通過分詞器將每個(gè)文檔的內(nèi)容域拆分成單獨(dú)的詞(我們稱它為詞條或 Term),創(chuàng)建一個(gè)包含所有不重復(fù)詞條的排序列表,然后列出每個(gè)詞條出現(xiàn)在哪個(gè)文檔。

      結(jié)果

      這種結(jié)構(gòu)由文檔中所有不重復(fù)詞的列表構(gòu)成,對于其中每個(gè)詞都有一個(gè)文檔列表與之關(guān)聯(lián)。這種由屬性值來確定記錄的位置的結(jié)構(gòu)就是倒排索引。帶有倒排索引的文件我們稱為倒排文件。

      將上面的內(nèi)容轉(zhuǎn)換為圖的形式來說明倒排索引的結(jié)構(gòu)信息

      概念如下:

      詞條(Term):索引里面最小的存儲和查詢單元,對于英文來說是一個(gè)單詞,對于中文來說一般指分詞后的一個(gè)詞。

      詞典(Term Dictionary):或字典,是詞條 Term 的集合。搜索引擎的通常索引單位是單詞,單詞詞典是由文檔集合中出現(xiàn)過的所有單詞構(gòu)成的字符串集合,單詞詞典內(nèi)每條索引項(xiàng)記載單詞本身的一些信息以及指向“倒排列表”的指針。

      倒排表(Post list):一個(gè)文檔通常由多個(gè)詞組成,倒排表記錄的是某個(gè)詞在哪些文檔里出現(xiàn)過以及出現(xiàn)的位置。

      每條記錄稱為一個(gè)倒排項(xiàng)(Posting)。倒排表記錄的不單是文檔編號,還存儲了詞頻等信息。

      倒排文件(Inverted File):所有單詞的倒排列表往往順序地存儲在磁盤的某個(gè)文件里,這個(gè)文件被稱之為倒排文件,倒排文件是存儲倒排索引的物理文件。

      初識ElastricSearch

      詞典和倒排表是 Lucene 中很重要的兩種數(shù)據(jù)結(jié)構(gòu),是實(shí)現(xiàn)快速檢索的重要基石。詞典和倒排文件是分兩部分存儲的,詞典在內(nèi)存中而倒排文件存儲在磁盤上。

      為了大家更好的理解ES,下面介紹一下ES中的概念:

      (1)Near Realtime(NRT):近實(shí)時(shí),一是從寫入數(shù)據(jù)到數(shù)據(jù)可以被搜索到有一個(gè)小延遲(默認(rèn)1秒);二是基于ES執(zhí)行搜索和分析可以達(dá)到秒級;

      (2)Cluster(集群):ES 集群由一個(gè)或多個(gè) ES 節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)配置相同的 cluster.name (默認(rèn)值為 “elasticsearch”)即可加入集群。確保不同的環(huán)境中使用不同的集群名稱,否則最終會導(dǎo)致節(jié)點(diǎn)加入錯(cuò)誤的集群。ES 的集群搭建很簡單,不需要依賴第三方協(xié)調(diào)管理組件,自身內(nèi)部就實(shí)現(xiàn)了集群的管理功能。

      (3)Node:一個(gè) ES 服務(wù)啟動(dòng)實(shí)例就是一個(gè)節(jié)點(diǎn)(Node)。節(jié)點(diǎn)通過 node.name 來設(shè)置節(jié)點(diǎn)名稱,如果不設(shè)置則在啟動(dòng)時(shí)給節(jié)點(diǎn)分配一個(gè)隨機(jī)通用唯一標(biāo)識符作為名稱(默認(rèn)是隨機(jī)分配的)。默認(rèn)節(jié)點(diǎn)會去加入一個(gè)名稱為“elasticsearch”的集群。如果直接啟動(dòng)一堆節(jié)點(diǎn),那么它們會自動(dòng)組成一個(gè)elasticsearch集群,當(dāng)然一個(gè)節(jié)點(diǎn)也可以組成一個(gè)elasticsearch集群。

      (4)Index(索引):簡單理解就是一個(gè)數(shù)據(jù)庫,索引有名稱,包含一堆有相似結(jié)構(gòu)的文檔數(shù)據(jù),一個(gè)index包含很多document,一個(gè)index就代表了一類類似的或者相同的document。比如說建立一個(gè)product index,商品索引,里面可能就存放了所有的商品數(shù)據(jù),所有的商品document。索引是保存相關(guān)數(shù)據(jù)的地方。 索引實(shí)際上是指向一個(gè)或者多個(gè)物理 分片 的 邏輯命名空間 。

      (5)Type(類型):簡單理解就是一張表,每個(gè)索引里都可以有一個(gè)或多個(gè)type,type是index中的一個(gè)邏輯數(shù)據(jù)分類,一個(gè)type下的document,都有相同的field,比如博客系統(tǒng),有一個(gè)索引,可以定義用戶數(shù)據(jù)type,博客數(shù)據(jù)type,評論數(shù)據(jù)type。

      (6)Document(文檔)&field(字段):Document就是一行數(shù)據(jù),es中的最小數(shù)據(jù)單元,一個(gè)document可以是一條客戶數(shù)據(jù),一條商品分類數(shù)據(jù),通常用JSON數(shù)據(jù)結(jié)構(gòu)表示,每個(gè)index下的type中,都可以去存儲多個(gè)document。一個(gè)document里面有多個(gè)field,每個(gè)field就是一個(gè)數(shù)據(jù)字段。

      ①節(jié)點(diǎn)的角色

      節(jié)點(diǎn)分為主節(jié)點(diǎn)、候選主節(jié)點(diǎn)、數(shù)據(jù)節(jié)點(diǎn)和協(xié)調(diào)節(jié)點(diǎn),其中候選主節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)是在配置文件中指定的,而主節(jié)點(diǎn)是由候選主節(jié)點(diǎn)選舉出來的,協(xié)調(diào)節(jié)點(diǎn)則可以是任何節(jié)點(diǎn),以下是它們的功能介紹:

      數(shù)據(jù)節(jié)點(diǎn):負(fù)責(zé)數(shù)據(jù)的存儲和相關(guān)的操作,例如對數(shù)據(jù)進(jìn)行增、刪、改、查和聚合等操作,所以數(shù)據(jù)節(jié)點(diǎn)(Data 節(jié)點(diǎn))對機(jī)器配置要求比較高,對 CPU、內(nèi)存和 I/O 的消耗很大。通常隨著集群的擴(kuò)大,需要增加更多的數(shù)據(jù)節(jié)點(diǎn)來提高性能和可用性。

      候選主節(jié)點(diǎn):可以被選舉為主節(jié)點(diǎn)(Master 節(jié)點(diǎn)),集群中只有候選主節(jié)點(diǎn)才有選舉權(quán)和被選舉權(quán),其他節(jié)點(diǎn)不參與選舉的工作。

      主節(jié)點(diǎn):負(fù)責(zé)創(chuàng)建索引、刪除索引、跟蹤哪些節(jié)點(diǎn)是群集的一部分,并決定哪些分片分配給相關(guān)的節(jié)點(diǎn)、追蹤集群中節(jié)點(diǎn)的狀態(tài)等。主節(jié)點(diǎn)和其他節(jié)點(diǎn)之間通過 Ping 的方式互相檢查,主節(jié)點(diǎn)負(fù)責(zé) Ping 所有其他節(jié)點(diǎn),判斷是否有節(jié)點(diǎn)已經(jīng)掛掉;其他節(jié)點(diǎn)也通過 Ping 的方式判斷主節(jié)點(diǎn)是否處于可用狀態(tài);穩(wěn)定的主節(jié)點(diǎn)對集群的健康是非常重要的。

      協(xié)調(diào)節(jié)點(diǎn):雖然對節(jié)點(diǎn)做了角色區(qū)分,但是用戶的請求可以發(fā)往任何一個(gè)節(jié)點(diǎn),并由該節(jié)點(diǎn)負(fù)責(zé)分發(fā)請求、收集結(jié)果等操作,而不需要主節(jié)點(diǎn)轉(zhuǎn)發(fā),這種節(jié)點(diǎn)可稱之為協(xié)調(diào)節(jié)點(diǎn),協(xié)調(diào)節(jié)點(diǎn)是不需要指定和配置的,集群中的任何節(jié)點(diǎn)都可以充當(dāng)協(xié)調(diào)節(jié)點(diǎn)的角色。

      ES中每個(gè)節(jié)點(diǎn)既可以是候選主節(jié)點(diǎn)也可以是數(shù)據(jù)節(jié)點(diǎn),通過在配置文件 …/config/elasticsearch.yml 中設(shè)置即可,默認(rèn)都為 true。

      node.master: true //是否候選主節(jié)點(diǎn) node.data: true //是否數(shù)據(jù)節(jié)點(diǎn)

      但是由于數(shù)據(jù)節(jié)點(diǎn)對 CPU、內(nèi)存核 I/O 消耗都很大,所以如果某個(gè)節(jié)點(diǎn)既是數(shù)據(jù)節(jié)點(diǎn)又是主節(jié)點(diǎn),那么可能會對主節(jié)點(diǎn)產(chǎn)生影響從而對整個(gè)集群的狀態(tài)產(chǎn)生影響。因此為了提高集群的健康性,我們應(yīng)該對 ES集群中的節(jié)點(diǎn)做好角色上的劃分和隔離,可以使用幾個(gè)配置較低的機(jī)器群作為候選主節(jié)點(diǎn)群。

      ②發(fā)現(xiàn)與選舉機(jī)制

      發(fā)現(xiàn)機(jī)制(Zen Discovery)

      那么有一個(gè)問題,ES 內(nèi)部是如何通過一個(gè)相同的設(shè)置 cluster.name 就能將不同的節(jié)點(diǎn)連接到同一個(gè)集群的呢?答案是 Zen Discovery。

      Zen Discovery是 ES的內(nèi)置默認(rèn)發(fā)現(xiàn)模塊(發(fā)現(xiàn)模塊的職責(zé)是發(fā)現(xiàn)集群中的節(jié)點(diǎn)以及選舉 Master 節(jié)點(diǎn))。它提供單播和基于文件的發(fā)現(xiàn),并且可以擴(kuò)展為通過插件支持云環(huán)境和其他形式的發(fā)現(xiàn)。Zen Discovery 與其它模塊集成:例如,節(jié)點(diǎn)之間的所有通信都使用 Transport 模塊完成,節(jié)點(diǎn)使用發(fā)現(xiàn)機(jī)制通過 Ping 的方式查找其他節(jié)點(diǎn)。

      ES默認(rèn)被配置為使用單播發(fā)現(xiàn),以防止節(jié)點(diǎn)無意中加入集群,只有在同一臺機(jī)器上運(yùn)行的節(jié)點(diǎn)才會自動(dòng)組成集群。如果集群的節(jié)點(diǎn)運(yùn)行在不同的機(jī)器上,使用單播,你可以為 ES節(jié)點(diǎn)提供一些它應(yīng)該去嘗試連接的節(jié)點(diǎn)列表即單播列表。當(dāng)該節(jié)點(diǎn)聯(lián)系到單播列表中的成員時(shí),它就會得到整個(gè)集群所有節(jié)點(diǎn)的狀態(tài),然后它會聯(lián)系 Master 節(jié)點(diǎn),并加入集群。這意味著單播列表不需要包含集群中的所有節(jié)點(diǎn), 它只是需要足夠的節(jié)點(diǎn),當(dāng)一個(gè)新節(jié)點(diǎn)聯(lián)系上其中一個(gè)并且說上話就可以了。如果你使用 Master 候選節(jié)點(diǎn)作為單播列表,你只要列出三個(gè)就可以了。這個(gè)配置在 elasticsearch.yml 文件中:

      discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]

      ES節(jié)點(diǎn)啟動(dòng)后先 Ping ,如果 discovery.zen.ping.unicast.hosts 有設(shè)置,則 Ping 設(shè)置中的 Host ,否則嘗試 ping 本地的幾個(gè)端口。ES支持同一個(gè)主機(jī)啟動(dòng)多個(gè)節(jié)點(diǎn),Ping 的 Response 會包含該節(jié)點(diǎn)的基本信息以及該節(jié)點(diǎn)認(rèn)為的 Master 節(jié)點(diǎn)。

      Master選舉

      采用分布式系統(tǒng)思路,保證選舉出的master被多數(shù)派(quorum)的master-eligible node(候選主節(jié)點(diǎn))認(rèn)可,以此來保證只有一個(gè)master。這個(gè)quorum通過以下配置進(jìn)行配置:

      conf/elasticsearch.yml: discovery.zen.minimum_master_nodes: 2

      (1)master選舉誰發(fā)起,什么時(shí)候發(fā)起?

      master(主節(jié)點(diǎn))選舉當(dāng)然是由master-eligible(候選主節(jié)點(diǎn))節(jié)點(diǎn)發(fā)起,當(dāng)一個(gè)master-eligible節(jié)點(diǎn)發(fā)現(xiàn)滿足以下條件時(shí)發(fā)起選舉:

      該master-eligible節(jié)點(diǎn)的當(dāng)前狀態(tài)不是master;

      該master-eligible節(jié)點(diǎn)通過ZenDiscovery模塊的ping操作詢問其已知的集群其他節(jié)點(diǎn),沒有任何節(jié)點(diǎn)連接到master;

      包括本節(jié)點(diǎn)在內(nèi),當(dāng)前已有超過minimum_master_nodes個(gè)節(jié)點(diǎn)沒有連接到master;

      總結(jié)一句話,即當(dāng)一個(gè)節(jié)點(diǎn)發(fā)現(xiàn)包括自己在內(nèi)的多數(shù)派的master-eligible節(jié)點(diǎn)認(rèn)為集群沒有master時(shí),就可以發(fā)起master選舉。

      (2)當(dāng)需要選舉master時(shí),選舉誰?

      如果各節(jié)點(diǎn)都沒有認(rèn)為的 Master ,則從所有候選主節(jié)點(diǎn)中選擇,規(guī)則很簡單,按照 ID(ID為節(jié)點(diǎn)第一次啟動(dòng)時(shí)隨機(jī)生成) 的字典序排序,取第一個(gè)。之所以這么設(shè)計(jì),應(yīng)該是為了讓選舉結(jié)果盡可能穩(wěn)定,不要出現(xiàn)都想當(dāng)master而選不出來的情況。

      (3) 什么時(shí)候選舉成功?

      這里有個(gè)限制條件就是 discovery.zen.minimum_master_nodes :如果候選主節(jié)點(diǎn)數(shù)達(dá)不到最小值的限制,則循環(huán)上述過程,直到候選主節(jié)點(diǎn)數(shù)足夠可以開始選舉,如果只有一個(gè) Local 節(jié)點(diǎn)那就選出的是自己。如果當(dāng)前節(jié)點(diǎn)被選為Master ,則開始等待節(jié)點(diǎn)數(shù)達(dá)到 discovery.zen.minimum_master_nodes,然后提供服務(wù);如果當(dāng)前節(jié)點(diǎn)不是 Master ,則嘗試加入 Master 。

      舉例說明:

      當(dāng)一個(gè)master-eligible node(我們假設(shè)為Node_A)發(fā)起一次選舉時(shí):

      a、假設(shè)Node_A選Node_B當(dāng)Master:Node_A會向Node_B發(fā)送join請求,那么此時(shí):

      如果Node_B已經(jīng)成為Master,Node_B就會把Node_A加入到集群中,然后發(fā)布最新的cluster_state, 最新的cluster_state就會包含Node_A的信息,相當(dāng)于一次正常情況的新節(jié)點(diǎn)加入。對于Node_A,等新的cluster_state發(fā)布到Node_A的時(shí)候,Node_A也就完成join了。

      如果Node_B在競選Master,那么Node_B會把這次join當(dāng)作一張選票。對于這種情況,Node_A會等待一段時(shí)間,看Node_B是否能成為真正的Master,直到超時(shí)或者有別的Master選成功。

      如果Node_B認(rèn)為自己不是Master(現(xiàn)在不是,將來也選不上),那么Node_B會拒絕這次join。對于這種情況,Node_A會開啟下一輪選舉。

      b、假設(shè)Node_A選自己當(dāng)Master:

      此時(shí)NodeA會等別的node來join,即等待別的node的選票,當(dāng)收集到超過半數(shù)的選票時(shí),認(rèn)為自己成為master,然后變更c(diǎn)luster_state中的master node為自己,并向集群發(fā)布這一消息。

      ③腦裂現(xiàn)象

      如果由于網(wǎng)絡(luò)或其他原因?qū)е录褐羞x舉出多個(gè) Master 節(jié)點(diǎn),使得數(shù)據(jù)更新時(shí)出現(xiàn)不一致,這種現(xiàn)象稱之為腦裂,即集群中不同的節(jié)點(diǎn)對于 Master 的選擇出現(xiàn)了分歧,出現(xiàn)了多個(gè) Master 競爭。

      腦裂問題可能有以下幾個(gè)原因造成:

      網(wǎng)絡(luò)問題:集群間的網(wǎng)絡(luò)延遲導(dǎo)致一些節(jié)點(diǎn)訪問不到 Master,認(rèn)為 Master 掛掉了從而選舉出新的 Master,并對 Master 上的分片和副本標(biāo)紅,分配新的主分片。

      節(jié)點(diǎn)負(fù)載:主節(jié)點(diǎn)的角色既為 Master 又為 Data,訪問量較大時(shí)可能會導(dǎo)致 ES 停止響應(yīng)(假死狀態(tài))造成大面積延遲,此時(shí)其他節(jié)點(diǎn)得不到主節(jié)點(diǎn)的響應(yīng)認(rèn)為主節(jié)點(diǎn)掛掉了,會重新選取主節(jié)點(diǎn)。

      內(nèi)存回收:主節(jié)點(diǎn)的角色既為 Master 又為 Data,當(dāng) Data 節(jié)點(diǎn)上的 ES 進(jìn)程占用的內(nèi)存較大,引發(fā) JVM 的大規(guī)模內(nèi)存回收,造成 ES 進(jìn)程失去響應(yīng)。

      為了避免腦裂現(xiàn)象的發(fā)生,我們可以從原因著手通過以下幾個(gè)方面來做出優(yōu)化措施:

      適當(dāng)調(diào)大響應(yīng)時(shí)間,減少誤判:通過參數(shù) discovery.zen.ping_timeout 設(shè)置節(jié)點(diǎn)狀態(tài)的響應(yīng)時(shí)間,默認(rèn)為 3s,可以適當(dāng)調(diào)大。如果 Master 在該響應(yīng)時(shí)間的范圍內(nèi)沒有做出響應(yīng)應(yīng)答,判斷該節(jié)點(diǎn)已經(jīng)掛掉了。

      選舉觸發(fā):我們需要在候選集群中的節(jié)點(diǎn)的配置文件中設(shè)置參數(shù) discovery.zen.munimum_master_nodes 的值。這個(gè)參數(shù)表示在選舉主節(jié)點(diǎn)時(shí)需要參與選舉的候選主節(jié)點(diǎn)的節(jié)點(diǎn)數(shù),默認(rèn)值是 1,官方建議取值(master_eligibel_nodes/2)+1,其中 master_eligibel_nodes 為候選主節(jié)點(diǎn)的個(gè)數(shù)。這樣做既能防止腦裂現(xiàn)象的發(fā)生,也能最大限度地提升集群的高可用性,因?yàn)橹灰簧儆?discovery.zen.munimum_master_nodes 個(gè)候選節(jié)點(diǎn)存活,選舉工作就能正常進(jìn)行;當(dāng)小于這個(gè)值的時(shí)候,無法觸發(fā)選舉行為,集群無法使用,不會造成分片混亂的情況。

      角色分離:即是上面我們提到的候選主節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)進(jìn)行角色分離,這樣可以減輕主節(jié)點(diǎn)的負(fù)擔(dān),防止主節(jié)點(diǎn)的假死狀態(tài)發(fā)生,減少對主節(jié)點(diǎn)“已死”的誤判。

      阿Q打算把ES的知識做一個(gè)系統(tǒng)的學(xué)習(xí)與講解,所以后續(xù)將持續(xù)輸出ES的相關(guān)知識,如果你感興趣的話,可以關(guān)注“阿Q說代碼”!你也可以后臺留言說出你的疑惑,阿Q將會在后期的文章中為你解答。

      Elasticsearch Lucene/Solr

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:lookup函數(shù)的實(shí)際應(yīng)用,查找最后一次采購日期
      下一篇:WPS表格怎么做序號下拉列表圖文教程
      相關(guān)文章
      久久精品国产亚洲AV电影| 亚洲经典在线观看| 亚洲欧洲无卡二区视頻| 亚洲国产精品成人精品小说| 亚洲福利视频网站| 久久久久亚洲AV成人片| 亚洲视频在线不卡| 亚洲精品免费在线| 亚洲欧洲日本天天堂在线观看| 亚洲国产老鸭窝一区二区三区 | 亚洲欧美中文日韩视频| 亚洲熟妇无码AV| 亚洲AV无码精品国产成人| 国产精品亚洲专区无码牛牛| 久久久亚洲精华液精华液精华液 | 亚洲高清国产AV拍精品青青草原| 亚洲国产精品无码久久久不卡| 亚洲av一综合av一区| 亚洲成a人片在线观看中文动漫| 亚洲天天做日日做天天欢毛片| 亚洲综合在线视频| 亚洲导航深夜福利| 狠狠色伊人亚洲综合网站色| 亚洲精品无码久久久久YW| 色噜噜噜噜亚洲第一| 亚洲情a成黄在线观看| 亚洲人成色777777在线观看| 亚洲国产成人私人影院| 亚洲欧洲春色校园另类小说| 亚洲第一成人在线| 亚洲AV无码国产一区二区三区 | 亚洲精品偷拍无码不卡av| 国产婷婷综合丁香亚洲欧洲| 亚洲中文字幕久久无码| 亚洲国产精品ⅴa在线观看| 亚洲国产电影av在线网址| 亚洲色精品88色婷婷七月丁香| 亚洲视频在线观看一区| 亚洲毛片免费视频| 亚洲欧美日本韩国| 亚洲无码高清在线观看|