白话Elasticsearch66-针对集群重启时的shard恢复耗时过长问题定制的重要参数
文章目錄
- 概述
- 集群重啟時(shí)的無(wú)意義shard重分配問(wèn)題
- shard recovery配置
概述
繼續(xù)跟中華石杉老師學(xué)習(xí)ES,第66篇
課程地址: https://www.roncoo.com/view/55
集群重啟時(shí)的無(wú)意義shard重分配問(wèn)題
在集群重啟的時(shí)候,有一些配置會(huì)影響shard恢復(fù)的過(guò)程。
首先,我們需要理解默認(rèn)配置下,shard恢復(fù)過(guò)程會(huì)發(fā)生什么事情。
如果我們有10個(gè)node,每個(gè)node都有一個(gè)shard,可能是primary shard或者replica shard,你有一個(gè)index,有5個(gè)primary shard,每個(gè)primary shard有一個(gè)replica shard。
如果我們將整個(gè)集群關(guān)閉了進(jìn)行一些維護(hù)性的操作,比如給機(jī)器安裝新的磁盤(pán)之類(lèi)的事情。當(dāng)我們重啟集群的時(shí)候,肯定節(jié)點(diǎn)是一個(gè)接一個(gè)的啟動(dòng)的,可能會(huì)出現(xiàn)5個(gè)節(jié)點(diǎn)先啟動(dòng)了,然后剩下5個(gè)節(jié)點(diǎn)還沒(méi)啟動(dòng)。
也許是因?yàn)槭O碌?個(gè)節(jié)點(diǎn)沒(méi)來(lái)得及啟動(dòng),或者是因?yàn)橐恍┰虻R了,總之不管是什么原因,就是現(xiàn)在只有5個(gè)節(jié)點(diǎn)是在線(xiàn)的。這5個(gè)節(jié)點(diǎn)會(huì)通過(guò)gossip協(xié)議互相通信,選舉出一個(gè)master,然后組成一個(gè)集群。他們會(huì)發(fā)現(xiàn)數(shù)據(jù)沒(méi)有被均勻的分布,因?yàn)橛?個(gè)節(jié)點(diǎn)沒(méi)有啟動(dòng),那么那5個(gè)節(jié)點(diǎn)上的shard就是不可用的,集群中就少了一半的shard。此時(shí)在線(xiàn)的5個(gè)node就會(huì)將部分replica shard提升為primary shard,同時(shí)為每個(gè)primary shard復(fù)制足夠的replica shard。
最后,可能剩下的5個(gè)節(jié)點(diǎn)加入了集群。但是這些節(jié)點(diǎn)發(fā)現(xiàn)本來(lái)是他們持有的shard已經(jīng)被重新復(fù)制并且放在之前的5個(gè)node之中了,此時(shí)他們就會(huì)刪除自己本地的數(shù)據(jù)。然后集群又會(huì)開(kāi)始進(jìn)行shard的rebalance操作,將最早啟動(dòng)的5個(gè)node上的shard均勻分布到后來(lái)啟動(dòng)的5個(gè)node上去。
在這個(gè)過(guò)程中,這些shard重新復(fù)制,移動(dòng),刪除,再次移動(dòng)的過(guò)程,會(huì)大量的耗費(fèi)網(wǎng)絡(luò)和磁盤(pán)資源。對(duì)于數(shù)據(jù)量龐大的集群來(lái)說(shuō),可能導(dǎo)致每次集群重啟時(shí),都有TB級(jí)別的數(shù)據(jù)無(wú)端移動(dòng),可能導(dǎo)致集群?jiǎn)?dòng)會(huì)耗費(fèi)很長(zhǎng)時(shí)間。但是如果所有的節(jié)點(diǎn)都可以等待整個(gè)集群中的所有節(jié)點(diǎn)都完全上線(xiàn)之后,所有的數(shù)據(jù)都有了以后,再?zèng)Q定是否要復(fù)制和移動(dòng)shard,情況就會(huì)好很多。
shard recovery配置
所以現(xiàn)在問(wèn)題我們已經(jīng)知道了,那么我們就可以配置一些設(shè)置來(lái)解決這個(gè)問(wèn)題。
首先我們需要設(shè)置一個(gè)參數(shù),gateway.recover_after_nodes: 8。
這個(gè)參數(shù)可以讓es直到有足夠的node都上線(xiàn)之后,再開(kāi)始shard recovery的過(guò)程。所以這個(gè)參數(shù)是跟具體的集群相關(guān)的,要根據(jù)我們的集群中節(jié)點(diǎn)的數(shù)量來(lái)決定。
此外,還應(yīng)該設(shè)置一個(gè)集群中至少要有多少個(gè)node,等待那些node的時(shí)間:gateway.expected_nodes: 10,gateway.recover_after_time: 5m。
經(jīng)過(guò)上面的配置之后,es集群的行為會(huì)變成下面這樣,等待至少8個(gè)節(jié)點(diǎn)在線(xiàn),然后等待最多5分鐘,或者10個(gè)節(jié)點(diǎn)都在線(xiàn),開(kāi)始shard recovery的過(guò)程。
這樣就可以避免少數(shù)node啟動(dòng)時(shí),就立即開(kāi)始shard recovery,消耗大量的網(wǎng)絡(luò)和磁盤(pán)資源,甚至可以將shard recovery過(guò)程從數(shù)小時(shí)縮短為數(shù)分鐘。
總結(jié)
以上是生活随笔為你收集整理的白话Elasticsearch66-针对集群重启时的shard恢复耗时过长问题定制的重要参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 白话Elasticsearch65-最少
- 下一篇: 白话Elasticsearch67-不随