ES集群故障的問題追蹤與解決方案是什么

這期內(nèi)容當中小編將會給大家?guī)碛嘘PES集群故障的問題追蹤與解決方案是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)公司成都網(wǎng)站建設按需定制設計,是成都網(wǎng)站推廣公司,為發(fā)電機回收提供網(wǎng)站建設服務,有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設計服務:原型圖制作、網(wǎng)站創(chuàng)意設計、前端HTML5制作、后臺程序開發(fā)等。成都網(wǎng)站建設熱線:13518219792

1、很久前的歷史問題了,來記錄下。問題原因是某2個索引發(fā)生了寫故障,開始是懷疑某臺機器硬盤導致的。這種情況的影響是集群狀態(tài)變red,部分記錄無法被搜索到。詭異的是其中一個索引出現(xiàn)故障后自動恢復了,而另外一個索引卻無法自動回復。

2、話不多說,日志是反映問題的第一現(xiàn)場。

ES集群故障的問題追蹤與解決方案是什么

以上日志可以看出該索引的副本3出現(xiàn)了故障,且是write bulk的寫故障。由于ES的寫操作會先寫主分片,然后主分片再將操作同步到副本分片,再等待副本并發(fā)操作完再返回客戶端。故查看ES副本執(zhí)行操作時的源碼,發(fā)現(xiàn)日志返回的報錯信息恰好就在副本操作發(fā)生異常時回調(diào)的onFailure方法中,里邊再調(diào)用了failShardIfNeeded方法,failShardIfNeeded方法又調(diào)用了decPendingAndFinishIfNeeded  onPrimaryDemoted這兩個方法,通過查找資料對比源碼發(fā)現(xiàn):

ES集群故障的問題追蹤與解決方案是什么

 decPendingAndFinishIfNeeded 是當所有的分片都處理完這個請求后,不管是查詢失敗還是成功、超時,每執(zhí)行一次,都會總查詢的總分片數(shù)減1,直到所有分片都返回了,再調(diào)用finish()方法響應客戶端:

ES集群故障的問題追蹤與解決方案是什么

onPrimaryDemoted是寫操作首先在主分片執(zhí)行成功,然后同步到副本,但是副本發(fā)現(xiàn)它的主分片 的 primary term 比它知道的該索引的primary term 還小,term因為是寫的請求總是分發(fā)到主分片,所以每次更新主分片,term都會加1,在主向副發(fā)送同步數(shù)據(jù)的請求時候會帶上這個term值(感覺應該是為了保證數(shù)據(jù)一致性)。當主帶過來的term值對比之前帶過來的還要小,那證明這個主分片處于一種不正常的狀態(tài)。于是副本就認為這個主分片是一個已經(jīng)過時了的主分片,因此就回調(diào)onFailure方法拒絕執(zhí)行,并執(zhí)行onPrimaryDemoted通知master節(jié)點,master節(jié)點會檢測該主分片是否真的異常,真的過時會在索引Meta信息中更新配置,將該副本分片移除(集群中經(jīng)常體現(xiàn)的就是unsigned了)。

ES集群故障的問題追蹤與解決方案是什么

 查看異常日志,發(fā)現(xiàn)確實出現(xiàn)了方法中打印的異常日志,且對比term值確實發(fā)現(xiàn)主分片異常:

ES集群故障的問題追蹤與解決方案是什么

3、開篇提到了,因為是同時有2個索引發(fā)生了故障,所以懷疑是機器本身的原因。但是按理說,剔除了副本就好了,但是為什么一個索引的主分片故障后自動分配,并從translog恢復數(shù)據(jù)變?yōu)榻】禒顟B(tài)了,另一個索引的主分片卻無法自動恢復分配呢?原因是ES移除shard后有一個故障恢復時間,當故障超過一定時間,ES會分配一個新的shard到新node上,此時需要全量同步數(shù)據(jù)。但是如果之前故障的shard回來了,就可以只回補故障之后的數(shù)據(jù),追平后加回來即可,實現(xiàn)快速故障恢復。聯(lián)合之前的經(jīng)驗,確實有這種故障后恢復是需要從重新從主分片拷貝一份,完了后再刪除原來那個副本的情況。且日志里面也有體現(xiàn)timeout了:

ES集群故障的問題追蹤與解決方案是什么

 4、解決方案綜合以上分析,此時不能直接恢復,執(zhí)行命令讓ES重試分配,從原來的shard中恢復,如果是手動分配自動復制的話,會有擠爆硬盤的風險:POST  /_cluster/reroute?retry_failed=true

 5、總結至此看到了這次故障的大概原因,但是為什么會引發(fā)這樣的故障還是沒有頭緒,更深層次的原理還是需要努力一層一層往深了挖,閱讀源碼,萬法不離其宗,es也只是一個java應用。

上述就是小編為大家分享的ES集群故障的問題追蹤與解決方案是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文題目:ES集群故障的問題追蹤與解決方案是什么
網(wǎng)頁URL:http://muchs.cn/article46/jojhhg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名品牌網(wǎng)站設計、關鍵詞優(yōu)化、品牌網(wǎng)站建設、企業(yè)網(wǎng)站制作、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設