Elasticsearch 集群構(gòu)建及 分片王浴、讀寫、容災(zāi)

起因:在項(xiàng)目開發(fā)過程中梅猿,要使用到搜索 引擎來對(duì)一些關(guān)鍵字實(shí)現(xiàn)逆向查詢氓辣,如果僅用模糊搜索,那么搜索的時(shí)間會(huì)根據(jù)數(shù)據(jù)量的增大而增大袱蚓,對(duì)比之下就學(xué)了elasticsearch钞啸,也記錄一下,常忱耍回顧体斩。


1. Elasticsearch集群構(gòu)建及分片原理分析

分布式搜索引擎,如果是單機(jī)颖低,那既不能HA絮吵,也不能實(shí)現(xiàn)分布式

  • HA

  • 海量數(shù)據(jù)的水平擴(kuò)展

  • 高并發(fā)訪問

分片機(jī)制

  • 通俗來講就是一個(gè)放數(shù)據(jù)的盒子

  • 每個(gè)索引都會(huì)被分片

  • 創(chuàng)建索引的時(shí)候會(huì)要求制定主分片和副本分片的數(shù)量

分片的邏輯

  • 副本分片不允許和主分片在同一個(gè)機(jī)器上

  • 主分片掛了,還有副本分片來進(jìn)行數(shù)據(jù)訪問

  • 所以單機(jī)的時(shí)候枫甲,副本分片不會(huì)制定機(jī)器

![image-20200219203725366.png](https://upload-images.jianshu.io/upload_images/19048787-77d9dab1ad86e2c6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

1.1. ES集群搭建

在elasticsearch.yml里進(jìn)行配置

# elasticsearch.ymk
# 是我們的集群名稱源武,每個(gè)集群的機(jī)器如果要加入同一個(gè)集群,這個(gè)名字必須一樣
cluster.name: icoding-es
# 節(jié)點(diǎn)名想幻,這個(gè)必須都不一樣
node.name: es-node-1
# 存儲(chǔ)路徑
path.data: /usr/local/elasticsearch/esdata
path.logs: /usr/local/elasticsearch/eslogs
http.port:9200
# 主節(jié)點(diǎn)粱栖,設(shè)置后在主節(jié)點(diǎn)掛掉后有機(jī)會(huì)升級(jí)為master
node.master: true
# 數(shù)據(jù)節(jié)點(diǎn)
node.data: true
# 可以配置ip和域名,配置后ES會(huì)通過9300-9305的端口進(jìn)行數(shù)據(jù)連接
discovery.seed_hosts: ["192.168.0.146", "192.168.0.147", "192.168.0.148"]
# 集群初始化設(shè)置的master節(jié)點(diǎn)
cluster.initial_master_nodes: ["es-node-1"]
image-20200219230127642.png

星:代表主節(jié)點(diǎn)

圓圈:代表從節(jié)點(diǎn)!

1.2. ES集群節(jié)點(diǎn)宕機(jī)測(cè)試

image-20200219230903697.png

2. Elasticsearch集群腦裂問題分析

集群中有一個(gè)master節(jié)點(diǎn):相當(dāng)于一個(gè)管理節(jié)點(diǎn)

Node:elasticsearch的服務(wù)節(jié)點(diǎn)脏毯,安裝ES的機(jī)器(主闹究,從)

Index:是我們數(shù)據(jù)的一個(gè)邏輯集合,他擁有數(shù)據(jù)的結(jié)構(gòu)食店,以及提前做好的分詞內(nèi)容渣淤,主要用來搜索的的對(duì)象

Shard:物理分片,進(jìn)行數(shù)據(jù)的實(shí)際物理存儲(chǔ)和管理的地方(主分片數(shù)不能修改吉嫩,但副本分片可以增加)

image-20200220201623593.png

當(dāng)原來的Master因?yàn)榫W(wǎng)絡(luò)問題無法和其他slave鏈接价认,就出現(xiàn)了其他slave選舉出新的master的情況

  • 只要最小投票人數(shù)1個(gè)就能把節(jié)點(diǎn)投為master

  • 由于和其他節(jié)點(diǎn)連接不上,這個(gè)節(jié)點(diǎn)就把自己投成master

腦裂的解決方案

master主節(jié)點(diǎn)應(yīng)該要經(jīng)過多個(gè)有資格成為master(node.master=true)的節(jié)點(diǎn)選舉后才能成為新的節(jié)點(diǎn)自娩,不是你一個(gè)人自己選自己就能決定

  • discovery.zen.minimum_master_nodes=(N/2)+1

    • N就是有資格成為master的節(jié)點(diǎn)數(shù)

    • 這個(gè)值默認(rèn)是1

    • 在ES7.x以前是這樣的

  • 在ES7.x版本中用踩,這個(gè)參數(shù)已經(jīng)被移除了,這塊的內(nèi)容完全由ES自身做管理,避免了多個(gè)腦裂的情況脐彩,選舉也非乘槟耍快

3. Elasticsearch集群中文檔讀寫原理

3.1. 文檔的寫原理

image-20200220203755592.png
  • 客戶端連接的時(shí)候,首先要連接一個(gè)協(xié)調(diào)節(jié)點(diǎn)controller node

  • 協(xié)調(diào)節(jié)點(diǎn)會(huì)根據(jù)客戶端寫入的數(shù)據(jù)來hash判斷是寫入P0還是P1惠奸,P2梅誓,只要主分片才能寫入數(shù)據(jù)

  • 如果hash后寫入到P2分片,會(huì)由協(xié)調(diào)節(jié)點(diǎn)來路由轉(zhuǎn)發(fā)數(shù)據(jù)到P2分片

  • P2分片數(shù)據(jù)寫入完成后會(huì)同步到R2備份分片佛南,會(huì)將完成寫入的響應(yīng)返回到協(xié)調(diào)節(jié)點(diǎn)

  • 協(xié)調(diào)節(jié)點(diǎn)收到完成操作后返回給客戶端梗掰,完成了這次寫入的操作了

  • 客戶端每次連接的協(xié)調(diào)節(jié)點(diǎn)controller node可能會(huì)變

3.2. 文檔的讀原理

  • 客戶端讀請(qǐng)求會(huì)先選擇一個(gè)協(xié)調(diào)節(jié)點(diǎn)

  • 由協(xié)調(diào)節(jié)點(diǎn)根據(jù)數(shù)據(jù)的請(qǐng)求hash得知是放在哪個(gè)分片上的

  • 由于數(shù)據(jù)在主從分片上都有,并且數(shù)據(jù)一模一樣共虑,讀取操作在主從上是采用輪詢的方式

  • 因此副本分片多了后會(huì)提升分片的負(fù)載能力

  • 數(shù)據(jù)查詢完畢后返回給協(xié)調(diào)節(jié)點(diǎn)愧怜,協(xié)調(diào)節(jié)點(diǎn)返回客戶端

4. 如何合理設(shè)置集群中分片數(shù)和副本數(shù)

當(dāng)你在Elasticsearch中將index的分片設(shè)置好后,主分片數(shù)量在集群中是不能進(jìn)行修改的妈拌,即便是你發(fā)現(xiàn)主分片數(shù)量不合理也無法調(diào)整拥坛,那怎么辦?

  • 分配分片時(shí)主要要考慮的問題

    • 數(shù)據(jù)集的增長(zhǎng)趨勢(shì)

    • 很多用戶認(rèn)為提前放大分配好分片的量就能確保以后不會(huì)出現(xiàn)新的問題尘分,比如分1000個(gè)分片

  • 要知道分配的每個(gè)分片都是由額外的成本的

    • 每個(gè)分片其實(shí)都是要存數(shù)據(jù)的猜惋,并且都是一個(gè)lucene的索引,會(huì)消耗文件句柄已經(jīng)CPU和內(nèi)存資源

    • 當(dāng)你進(jìn)行數(shù)據(jù)訪問時(shí)培愁,我們的index就會(huì)去到所有的分片上去取數(shù)據(jù)

    • 如果要取100條著摔,如果你有100個(gè)分片,就會(huì)從100個(gè)分片上各取出100個(gè)數(shù)據(jù)然后進(jìn)行排序給出最終的排序結(jié)果定续,取了100*100條數(shù)據(jù)

  • 主分片數(shù)據(jù)到底多少為宜呢谍咆?

    • 根據(jù)你的節(jié)點(diǎn)數(shù)來進(jìn)行分片,3個(gè)Node私股,N*(1.5-3)

    • 我們現(xiàn)在3個(gè)節(jié)點(diǎn)摹察,主分片數(shù)據(jù):5-9個(gè)分片

總結(jié)

  • 分片是有相依消耗的,并且持續(xù)投入

  • 當(dāng)index擁有多個(gè)分片時(shí)倡鲸,ES會(huì)查詢所有分片然后進(jìn)行數(shù)據(jù)合并排序

  • 分片數(shù)量建議:node*(1.5-3)

# 創(chuàng)建索引過程中進(jìn)行分片設(shè)置
PUT /index_test
{
 "settings": {
 "number_of_shards": 5,
 "number_of_replicas": 1
 }
}
# 修改副本分片數(shù)量
# 副本分片如果過多在寫入的時(shí)候會(huì)消耗更多時(shí)間來復(fù)制數(shù)據(jù)
PUT /index_test/_settings
{
 "number_of_replicas": 2
}

5. ES集群分片容災(zāi)的機(jī)制

集群所有Node都啟動(dòng)的狀態(tài)

image-20200220211206482.png

我要kill掉es-node-1供嚎,es-node-2和es-node-3上的副本分片就升級(jí)為主分片

image-20200220211350285.png

過了一會(huì),剛升級(jí)的主分片復(fù)制出副本分片

image-20200220211603183.png

啟動(dòng)剛剛kill掉的es-node-1峭状,數(shù)據(jù)還沒有復(fù)制過來

image-20200220212202600.png

過了一會(huì)數(shù)據(jù)進(jìn)行了移動(dòng)克滴,通過9300內(nèi)部通信端口進(jìn)行數(shù)據(jù)的傳輸?shù)?/p>

image-20200220212232618.png

不要以為每天把功能完成了就行了,這種思想是要不得的优床,互勉~劝赔!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市胆敞,隨后出現(xiàn)的幾起案子望忆,更是在濱河造成了極大的恐慌罩阵,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件启摄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡幽钢,警方通過查閱死者的電腦和手機(jī)歉备,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匪燕,“玉大人蕾羊,你說我怎么就攤上這事∶毖保” “怎么了龟再?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)尼变。 經(jīng)常有香客問我利凑,道長(zhǎng),這世上最難降的妖魔是什么嫌术? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任哀澈,我火速辦了婚禮,結(jié)果婚禮上度气,老公的妹妹穿的比我還像新娘割按。我一直安慰自己,他們只是感情好磷籍,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布适荣。 她就那樣靜靜地躺著,像睡著了一般院领。 火紅的嫁衣襯著肌膚如雪弛矛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天栅盲,我揣著相機(jī)與錄音汪诉,去河邊找鬼。 笑死谈秫,一個(gè)胖子當(dāng)著我的面吹牛扒寄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拟烫,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼该编,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了硕淑?” 一聲冷哼從身側(cè)響起课竣,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤嘉赎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后于樟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體公条,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年迂曲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了靶橱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡路捧,死狀恐怖关霸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情杰扫,我是刑警寧澤队寇,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站章姓,受9級(jí)特大地震影響佳遣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜啤覆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一苍日、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窗声,春花似錦相恃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至见剩,卻和暖如春杀糯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苍苞。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來泰國打工固翰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人羹呵。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓骂际,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親冈欢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子歉铝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361