日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Elasticsearch 線上問(wèn)題排查——搞一天了,明天還要給客戶解決這個(gè)問(wèn)題

 銘毅天下 2021-12-24

1、線上問(wèn)題

線上問(wèn)題描述:

原來(lái)是聊天形式,比較冗長(zhǎng),精簡(jiǎn)后的問(wèn)題描述如下:
  • 癥狀:新增節(jié)點(diǎn)后,shard 沒(méi)有分配到新節(jié)點(diǎn)上。如下圖所示:

2、問(wèn)題排查

我的大致排解思路:

如下第一、第二、第三......代表排查問(wèn)題的推進(jìn)步驟。

2.1 第一:確定節(jié)點(diǎn)角色劃分,核實(shí)未被分配的節(jié)點(diǎn)類型。

僅主節(jié)點(diǎn)是不參與分片數(shù)據(jù)落地存儲(chǔ)的,這是認(rèn)知大前提。
經(jīng)對(duì)方核實(shí),未分配的節(jié)點(diǎn)的確是數(shù)據(jù)節(jié)點(diǎn)。
集群有3個(gè)候選主節(jié)點(diǎn),3個(gè)數(shù)據(jù)節(jié)點(diǎn),其中1個(gè)數(shù)據(jù)節(jié)點(diǎn)為新添加的節(jié)點(diǎn)。

2.2 第二:關(guān)閉索引再打開(kāi)試試。

close 再 open 之前驗(yàn)證過(guò)會(huì)走重新分配機(jī)制,部分場(chǎng)景適用。
經(jīng)對(duì)方核查,沒(méi)有生效。

2.3 第三:獨(dú)立創(chuàng)立一個(gè)新索引,設(shè)置3個(gè)副本。

分片分配策略是:主、副本會(huì)分配到不同的節(jié)點(diǎn)上。
多個(gè)副本,如果數(shù)據(jù)節(jié)點(diǎn)夠多,肯定會(huì)相對(duì)均勻的分片到多個(gè)節(jié)點(diǎn)。
經(jīng)核查:仍然無(wú)法分配到新增的數(shù)據(jù)節(jié)點(diǎn)。
不過(guò),此時(shí)看截圖,已有了未分配的灰色分片。

2.4 第四:查看分片未分配的原因。

排查方法:
GET _cluster/allocation/explain
這時(shí)候,客戶反饋:“我設(shè)置了節(jié)點(diǎn)踢出集群的設(shè)置”。
我的第一反應(yīng):“和這個(gè)有關(guān)系,為什么要設(shè)置?!”
且 explain 執(zhí)行結(jié)果驗(yàn)證了剛才的推斷:
“cannot allocate because allocation is not permitted to any of the nodes”。

2.5 第五:為什么設(shè)置?在哪里設(shè)置的?如何設(shè)置的?

  • 為什么設(shè)置?

客戶反饋:“我看書上寫的只要有節(jié)點(diǎn)離開(kāi)集群就會(huì)觸發(fā) rebalance。所以就設(shè)置了這個(gè)參數(shù)?!?/span>
  • 在哪里設(shè)置?
經(jīng)反復(fù)確認(rèn),是集群層面的設(shè)置,非索引層面。
起初認(rèn)為是索引層面的設(shè)置,我單獨(dú)驗(yàn)證后不對(duì),才想起來(lái)是集群層面的配置。
  • 如何設(shè)置的?
這個(gè)之前的博文:Elasticsearch集群管理之1——如何高效的添加、刪除節(jié)點(diǎn)?中講過(guò),我自己也在實(shí)戰(zhàn)環(huán)境中用過(guò)。
命令行如下:
PUT _cluster/settings
{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : "10.0.0.1"
  }
}

2.6 取消這個(gè)設(shè)置就會(huì)恢復(fù)新節(jié)點(diǎn)的分片分配。

我推薦的命令行如下:
PUT _cluster/settings
{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : ""
  }
}
經(jīng)客戶驗(yàn)證也是 ok 的。

3、我的幾點(diǎn)觀察和思考

3.1 關(guān)于 head 插件 和 Kibana dev tools 的選型

head 插件在集群節(jié)點(diǎn)、分片可視化方面做得的確不錯(cuò)。
如果在 1.X版本、2.X版本,由于當(dāng)時(shí) Kibana 功能還不盡完善,甚至還沒(méi)有被 Elastic 官方收購(gòu),選型 head 插件做問(wèn)題排查無(wú)可厚非。
但是,5.X、6.X、7.X 后,Kibana 已經(jīng)有了突飛猛進(jìn)的發(fā)展,無(wú)論是 dev tools 的命令行提示功能,還是多維度的可視化監(jiān)控。
head 插件做命令行的調(diào)試的確稍顯笨拙,就類似早期的C、C++編譯器 VC6.0一樣。
而 Kibana dev tools 類似 VS2020+版本或者開(kāi)源的 Codeblocks,用過(guò)你會(huì)發(fā)現(xiàn)“如絲般順滑”般的效率提升。

3.2 關(guān)于優(yōu)化參數(shù)配置

我自己在管理集群、維護(hù)集群的階段,也是看到網(wǎng)上有好的優(yōu)化參數(shù)、新版本新特性參數(shù)都會(huì)在集群中試驗(yàn),對(duì)比看看有沒(méi)有功能提升或者性能改善。
但,一定得了解參數(shù)的確切含義、函數(shù)的用途、加與不加對(duì)集群或分片等層面的影響;明確相關(guān)參數(shù)的應(yīng)用背景,貼合自己應(yīng)用場(chǎng)景的經(jīng)驗(yàn)證 ok 才可以使用。
且,一定得先小范圍測(cè)試環(huán)境沒(méi)有問(wèn)題,甚至連續(xù)3天+沒(méi)有問(wèn)題后,才能有的放矢的應(yīng)用到生成環(huán)境。
比如:線程池隊(duì)列的參數(shù)優(yōu)化,和 CPU 核數(shù)相關(guān),不見(jiàn)得是放之四海而皆準(zhǔn)的“萬(wàn)能參數(shù)”。

3.3 關(guān)于設(shè)置,在哪個(gè)層面設(shè)置?

從全局角度考慮,Elasticsearch 設(shè)置分為:集群層面設(shè)置、索引層面設(shè)置等。
而集群層面設(shè)置又細(xì)分為:
  1. 臨時(shí)設(shè)置
  2. 永久設(shè)置
  3. 配置文件設(shè)置
索引層面設(shè)置又細(xì)分為:
  1. 靜態(tài)設(shè)置
    1. 在索引創(chuàng)建階段或者關(guān)閉索引階段設(shè)置。
  2. 動(dòng)態(tài)設(shè)置
    1. 通過(guò) update-index-settings 方式隨時(shí)更新設(shè)置。
如上圖所示,不同的設(shè)置含義不同。
需要設(shè)置前仔細(xì)核對(duì)各個(gè)參數(shù)的含義以及各個(gè)參數(shù)的設(shè)置方式。

3.4 設(shè)置生效容易,使得設(shè)置失效一樣得會(huì)

參數(shù)生效、參數(shù)失效是一對(duì)“好兄弟”,兩個(gè)都得靈活掌握。
設(shè)置完參數(shù)、參數(shù)生效的同時(shí)要考慮:如何回退?如何恢復(fù)到?jīng)]有加參數(shù)的原始狀態(tài)。
比如:前面設(shè)置的   "cluster.routing.allocation.exclude._ip" : "",不加具體的 IP 就是回退、不設(shè)置的含義。
官方對(duì)于設(shè)置回退有沒(méi)有說(shuō)明呢?
有的,官方明確說(shuō)明如下:
You can reset persistent or transient settings by assigning a null value.

也就是我們上面的命令行操作更嚴(yán)謹(jǐn)?shù)膶懛☉?yīng)該是:

PUT _cluster/settings
{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : null
  }
}

如果有標(biāo)準(zhǔn)寫法,上面的這個(gè)才是最正宗、最標(biāo)準(zhǔn)的寫法。

4、小結(jié)

事后觀察,只通過(guò)后面的第四、五、六步,就能定位問(wèn)題的根本原因。

但,畢竟不在現(xiàn)場(chǎng),多去了解問(wèn)題的來(lái)龍去脈,更有助于輔助解決問(wèn)題。

復(fù)盤總結(jié)一下,希望對(duì)大家也有所幫助。

參考

  • 集群層面設(shè)置
    • https://www./guide/en/elasticsearch/reference/7.14//cluster-update-settings.html
  • 索引層面設(shè)置
    • https://www./guide/en/elasticsearch/reference/7.x/index-modules.html

推薦

1、Elasticsearch 7.X 進(jìn)階實(shí)戰(zhàn)私訓(xùn)課
2、如何系統(tǒng)的學(xué)習(xí) Elasticsearch ?
3、全網(wǎng)首發(fā)!《 Elasticsearch 最少必要知識(shí)教程 V1.0 》低調(diào)發(fā)布
4、兩個(gè) Elasticsearch 線上實(shí)戰(zhàn)問(wèn)題及解讀
5、且慢!聽(tīng)說(shuō)你線上環(huán)境準(zhǔn)備選型 Elasticsearch SQL 了?
短時(shí)間快習(xí)得多干貨!
中國(guó)50%+Elastic認(rèn)證工程師出自于此!
比同事搶先一步學(xué)習(xí)進(jìn)階干貨!

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多