溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Elasticsearch 集群健康值紅色終極解決方案是怎樣的

發(fā)布時(shí)間:2021-12-06 11:26:56 來(lái)源:億速云 閱讀:219 作者:柒染 欄目:大數(shù)據(jù)

這篇文章給大家介紹Elasticsearch 集群健康值紅色終極解決方案是怎樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

Elasticsearch當(dāng)清理緩存( echo 3 > /proc/sys/vm/drop_caches )的時(shí)候,出現(xiàn) 
如下集群健康值:red,紅色預(yù)警狀態(tài),同時(shí)部分分片都成為灰色。 
Elasticsearch 集群健康值紅色終極解決方案是怎樣的 
查看Elasticsearch啟動(dòng)日志會(huì)發(fā)現(xiàn)如下: 
集群服務(wù)超時(shí)連接的情況。

bserver: timeout notification from cluster service. timeout setting [1m], time since start [1m]

該問(wèn)題排查耗時(shí)很長(zhǎng),問(wèn)題已經(jīng)解決。 
特將問(wèn)題排查及解決方案詳盡的整理出來(lái)。

1、集群狀態(tài)解讀

head插件會(huì)以不同的顏色顯示。 
1)、綠色——最健康的狀態(tài),代表所有的主分片和副本分片都可用; 
2)、黃色——所有的主分片可用,但是部分副本分片不可用; 
3)、紅色——部分主分片不可用。(此時(shí)執(zhí)行查詢部分?jǐn)?shù)據(jù)仍然可以查到,遇到這種情況,還是趕快解決比較好。) 
參考官網(wǎng):http://t.cn/RltLEpN(部分中文集群健康狀態(tài)博文資料翻譯的不夠精確,以官網(wǎng)為準(zhǔn))

如果集群狀態(tài)為紅色, Head插件顯示:集群健康值red 。則說(shuō)明:至少一個(gè)主分片分配失敗。

這將導(dǎo)致一些數(shù)據(jù)以及索引的某些部分不再可用。

盡管如此, ElasticSearch還是允許我們執(zhí)行查詢,至于是通知用戶查詢結(jié)果可能不完整還是掛起查詢,則由應(yīng)用構(gòu)建者來(lái)決定。

2、什么是unassigned 分片?

一句話解釋:未分配的分片。 
啟動(dòng)ES的時(shí)候,通過(guò)Head插件不停刷新,你會(huì)發(fā)現(xiàn)集群分片會(huì)呈現(xiàn)紫色、灰色、最終綠色的狀態(tài)。

3、為什么會(huì)出現(xiàn) unassigned 分片?

如果不能分配分片,例如,您已經(jīng)為集群中的節(jié)點(diǎn)數(shù)過(guò)分分配了副本分片的數(shù)量,則分片將保持UNASSIGNED狀態(tài)。 
其錯(cuò)誤碼為:ALLOCATION_FAILED。

你可以通過(guò)如下指令,查看集群中不同節(jié)點(diǎn)、不同索引的狀態(tài)。

GET _cat/shards?h=index,shard,prirep,state,unassigned.reason

4、出現(xiàn)unassigned 分片后的癥狀?

head插件查看會(huì):Elasticsearch啟動(dòng)N長(zhǎng)時(shí)候后,某一個(gè)或幾個(gè)分片仍持續(xù)為灰色。

5、unassigned 分片問(wèn)題可能的原因?

Elasticsearch 集群健康值紅色終極解決方案是怎樣的

6、集群狀態(tài)紅色如何排查?

Elasticsearch 集群健康值紅色終極解決方案是怎樣的

7、如何Fixed unassigned 分片問(wèn)題?

方案一:極端情況——這個(gè)分片數(shù)據(jù)已經(jīng)不可用,直接刪除該分片。 
ES中沒(méi)有直接刪除分片的接口,除非整個(gè)節(jié)點(diǎn)數(shù)據(jù)已不再使用,刪除節(jié)點(diǎn)。 
curl -XDELETE ‘localhost:9200/index_name/’

方案二:集群中節(jié)點(diǎn)數(shù)量>=集群中所有索引的最大副本數(shù)量 +1。 
N> = R + 1 
其中: 
N——集群中節(jié)點(diǎn)的數(shù)目; 
R——集群中所有索引的最大副本數(shù)目。 
知識(shí)點(diǎn):當(dāng)節(jié)點(diǎn)加入和離開(kāi)集群時(shí),主節(jié)點(diǎn)會(huì)自動(dòng)重新分配分片,以確保分片的多個(gè)副本不會(huì)分配給同一個(gè)節(jié)點(diǎn)。換句話說(shuō),主節(jié)點(diǎn)不會(huì)將主分片分配給與其副本相同的節(jié)點(diǎn),也不會(huì)將同一分片的兩個(gè)副本分配給同一個(gè)節(jié)點(diǎn)。 
如果沒(méi)有足夠的節(jié)點(diǎn)相應(yīng)地分配分片,則分片可能會(huì)處于未分配狀態(tài)。 
由于我的集群就一個(gè)節(jié)點(diǎn),即N=1;所以R=0,才能滿足公式。

問(wèn)題就轉(zhuǎn)嫁為: 
1)添加節(jié)點(diǎn)處理,即N增大; 
2)刪除副本分片,即R置為0。 
R置為0的方式,可以通過(guò)如下命令行實(shí)現(xiàn):

root@tyg:/# curl -XPUT "http://localhost:9200/_settings" -d' {  "number_of_replicas" : 0 } '{"acknowledged":true}

方案三:allocate重新分配分片。 
如果方案二仍然未解決,可以考慮重新分配分片。

可能的原因:

1)節(jié)點(diǎn)在重新啟動(dòng)時(shí)可能遇到問(wèn)題。正常情況下,當(dāng)一個(gè)節(jié)點(diǎn)恢復(fù)與群集的連接時(shí),它會(huì)將有關(guān)其分片的信息轉(zhuǎn)發(fā)給主節(jié)點(diǎn),然后主節(jié)點(diǎn)將這分片從“未分配”轉(zhuǎn)換為“已分配/已啟動(dòng)”。

2)當(dāng)由于某種原因(例如節(jié)點(diǎn)的存儲(chǔ)已被損壞)導(dǎo)致該進(jìn)程失敗時(shí),分片可能保持未分配狀態(tài)。

在這種情況下,您必須決定如何繼續(xù):嘗試讓原始節(jié)點(diǎn)恢復(fù)并重新加入集群(并且不要強(qiáng)制分配主分片);

或者強(qiáng)制使用Reroute API分配分片并重新索引缺少的數(shù)據(jù)原始數(shù)據(jù)源或備份。 
如果您決定分配未分配的主分片,請(qǐng)確保將“allow_primary”:“true”標(biāo)志添加到請(qǐng)求中。

ES5.X使用腳本如下:

Elasticsearch 集群健康值紅色終極解決方案是怎樣的

ES2.X及早期版本,將 allocate_replica改為 allocate,其他不變。

腳本解讀: 
步驟1:定位 UNASSIGNED 的節(jié)點(diǎn)和分片

curl -s 'localhost:9200/_cat/shards' | fgrep UNASSIGNED

步驟2:通過(guò) allocate_replica 將 UNASSIGNED的分片重新分配。

8、核心知識(shí)點(diǎn)

1)路由 
原理很簡(jiǎn)單,把每個(gè)用戶的數(shù)據(jù)都索引到一個(gè)獨(dú)立分片中,在查詢時(shí)只查詢那個(gè)用戶的分片。這時(shí)就需要使用路由。 
使用路由優(yōu)勢(shì):路由是優(yōu)化集群的一個(gè)很強(qiáng)大的機(jī)制。 
它能讓我們根據(jù)應(yīng)用程序的邏輯來(lái)部署文檔, 從而可以用更少的資源構(gòu)建更快速的查詢。

2)在索引過(guò)程中使用路由 
我們可以通過(guò)路由來(lái)控制 ElasticSearch 將文檔發(fā)送到哪個(gè)分片。 
路由參數(shù)值無(wú)關(guān)緊要,可以取任何值。重要的是在將不同文檔放到同一個(gè)分片上時(shí), 需要使用相同的值。

3)指定路由查詢 
路由允許用戶構(gòu)建更有效率的查詢,當(dāng)我們只需要從索引的一個(gè)特定子集中獲取數(shù)據(jù)時(shí), 為什么非要把查詢發(fā)送到所有的節(jié)點(diǎn)呢?

指定路由查詢舉例:

curl -XGET 'localhost:9200/documents/_search?pretty&q=*:*&routing=A'

4)集群再路由reroute 
reroute命令允許顯式地執(zhí)行包含特定命令的集群重新路由分配。

例如,分片可以從一個(gè)節(jié)點(diǎn)移動(dòng)到另一個(gè)節(jié)點(diǎn),可以取消分配,或者可以在特定節(jié)點(diǎn)上顯式分配未分配的分片。

5)allocate分配原理 
分配unassigned的分片到一個(gè)節(jié)點(diǎn)。

將未分配的分片分配給節(jié)點(diǎn)。接受索引和分片的索引名稱和分片號(hào),以及將分片分配給它的節(jié)點(diǎn)。。 
它還接受allow_primary標(biāo)志來(lái)明確指定允許顯式分配主分片(可能導(dǎo)致數(shù)據(jù)丟失)。

9、小結(jié)

1)該問(wèn)題的排查累計(jì)超過(guò)6個(gè)小時(shí),最終找到解決方案。之前幾近沒(méi)有思路,想放棄,但咬牙最終解決。

2) 切記,第一手資料很重要! 
Elasticsearch出現(xiàn)問(wèn)題,最高效的解決方案是第一手資料ES英文官網(wǎng)文檔,其次是ES英文論壇、ES github issues,再次是stackoverflow等英文論壇、博客。最后才是:Elasticsearch中文社區(qū)、其他相關(guān)中文技術(shù)博客等。

關(guān)于Elasticsearch 集群健康值紅色終極解決方案是怎樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI