【ELK搭建日記三】Elasticsearch分布式多機(jī)集群配置

前言

前面介紹了ES的插件安裝嵌言,ELK的準(zhǔn)備工作就已經(jīng)做完了,現(xiàn)在開始學(xué)習(xí)搭建ES集群及穗〈蒈睿看了網(wǎng)上的大神總結(jié)出來(lái)的經(jīng)驗(yàn),自己也開始照葫蘆畫瓢埂陆,咿咿呀呀學(xué)起來(lái)苛白。不多說(shuō)往下看。

簡(jiǎn)介

elasticsearch用于構(gòu)建高可用和可擴(kuò)展的系統(tǒng)焚虱。擴(kuò)展的方式可以是購(gòu)買更好的服務(wù)器(縱向擴(kuò)展)或者購(gòu)買更多的服務(wù)器(橫向擴(kuò)展),Elasticsearch能從更強(qiáng)大的硬件中獲得更好的性能购裙,但是縱向擴(kuò)展也有一定的局限性。真正的擴(kuò)展應(yīng)該是橫向的鹃栽,它通過增加節(jié)點(diǎn)來(lái)傳播負(fù)載和增加可靠性躏率。對(duì)于大多數(shù)數(shù)據(jù)庫(kù)而言,橫向擴(kuò)展意味著你的程序?qū)⒆龇浅4蟮母膭?dòng)來(lái)利用這些新添加的設(shè)備民鼓。對(duì)比來(lái)說(shuō)禾锤,Elasticsearch天生是分布式的:它知道如何管理節(jié)點(diǎn)來(lái)提供高擴(kuò)展和高可用。這意味著你的程序不需要關(guān)心這些摹察。對(duì)于大多數(shù)數(shù)據(jù)庫(kù)而言,橫向擴(kuò)展意味著你的程序?qū)⒆龇浅4蟮母膭?dòng)來(lái)利用這些新添加的設(shè)備倡鲸。對(duì)比來(lái)說(shuō)供嚎,Elasticsearch天生是分布式的:它知道如何管理節(jié)點(diǎn)來(lái)提供高擴(kuò)展和高可用。這意味著你的程序不需要關(guān)心這些峭状。

集群和節(jié)點(diǎn)

節(jié)點(diǎn)(node)是你運(yùn)行的Elasticsearch實(shí)例克滴。一個(gè)集群(cluster)是一組具有相同cluster.name的節(jié)點(diǎn)集合,他們協(xié)同工作优床,共享數(shù)據(jù)并提供故障轉(zhuǎn)移和擴(kuò)展功能劝赔,當(dāng)有新的節(jié)點(diǎn)加入或者刪除節(jié)點(diǎn),集群就會(huì)感知到并平衡數(shù)據(jù)胆敞。集群中一個(gè)節(jié)點(diǎn)會(huì)被選舉為主節(jié)點(diǎn)(master),它用來(lái)管理集群中的一些變更着帽,例如新建或刪除索引、增加或移除節(jié)點(diǎn)等;當(dāng)然一個(gè)節(jié)點(diǎn)也可以組成一個(gè)集群移层。

節(jié)點(diǎn)通信

我們能夠與集群中的任何節(jié)點(diǎn)通信仍翰,包括主節(jié)點(diǎn)。任何一個(gè)節(jié)點(diǎn)互相知道文檔存在于哪個(gè)節(jié)點(diǎn)上观话,它們可以轉(zhuǎn)發(fā)請(qǐng)求到我們需要數(shù)據(jù)所在的節(jié)點(diǎn)上予借。我們通信的節(jié)點(diǎn)負(fù)責(zé)收集各節(jié)點(diǎn)返回的數(shù)據(jù),最后一起返回給客戶端。這一切都由Elasticsearch透明的管理灵迫。

分片與副本分片

分片用于Elasticsearch在你的集群中分配數(shù)據(jù)秦叛。想象把分片當(dāng)作數(shù)據(jù)的容器。文檔存儲(chǔ)在分片中瀑粥,然后分片分配給你集群中的節(jié)點(diǎn)上挣跋。

當(dāng)你的集群擴(kuò)容或縮小,Elasticsearch將會(huì)自動(dòng)在你的節(jié)點(diǎn)間遷移分片利凑,以使集群保持平衡浆劲。

一個(gè)分片(shard)是一個(gè)最小級(jí)別的“工作單元(worker unit)”,它只是保存索引中所有數(shù)據(jù)的一小片.我們的文檔存儲(chǔ)和被索引在分片中,但是我們的程序不知道如何直接與它們通信哀澈。取而代之的是牌借,他們直接與索引通信.Elasticsearch中的分片分為主分片和副本分片,復(fù)制分片只是主分片的一個(gè)副本,它用于提供數(shù)據(jù)的冗余副本割按,在硬件故障之后提供數(shù)據(jù)保護(hù)膨报,同時(shí)服務(wù)于像搜索和檢索等只讀請(qǐng)求,主分片的數(shù)量和復(fù)制分片的數(shù)量都可以通過配置文件配置适荣。但是主切片的數(shù)量只能在創(chuàng)建索引時(shí)定義且不能修改.相同的分片不會(huì)放在同一個(gè)節(jié)點(diǎn)上现柠。

1)分片算法:

shard = hash(routing) % number_of_primary_shards

routing值是一個(gè)任意字符串,它默認(rèn)是_id但也可以自定義弛矛,這個(gè)routing字符串通過哈希函數(shù)生成一個(gè)數(shù)字够吩,然后除以主切片的數(shù)量得到一個(gè)余數(shù)(remainder),余數(shù)的范圍永遠(yuǎn)是0到number_of_primary_shards - 1丈氓,這個(gè)數(shù)字就是特定文檔所在的分片周循。

這也解釋了為什么主切片的數(shù)量只能在創(chuàng)建索引時(shí)定義且不能修改:如果主切片的數(shù)量在未來(lái)改變了,所有先前的路由值就失效了万俗,文檔也就永遠(yuǎn)找不到了湾笛。

所有的文檔API(get、index闰歪、delete嚎研、bulk、update库倘、mget)都接收一個(gè)routing參數(shù)临扮,它用來(lái)自定義文檔到分片的映射。自定義路由值可以確保所有相關(guān)文檔.比如用戶的文章,按照用戶賬號(hào)路由,就可以實(shí)現(xiàn)屬于同一用戶的文檔被保存在同一分片上教翩。

2)分片和副本交互:

新建公条、索引和刪除請(qǐng)求都是寫(write)操作,它們必須在主分片上成功完成才能復(fù)制到相關(guān)的復(fù)制分片上,下面我們羅列在主分片和復(fù)制分片上成功新建迂曲、索引或刪除一個(gè)文檔必要的順序步驟:

1靶橱、客戶端給Node 1發(fā)送新建、索引或刪除請(qǐng)求。

2关霸、節(jié)點(diǎn)使用文檔的_id確定文檔屬于分片0传黄。它轉(zhuǎn)發(fā)請(qǐng)求到Node 3,分片0位于這個(gè)節(jié)點(diǎn)上队寇。

3膘掰、Node 3在主分片上執(zhí)行請(qǐng)求,如果成功佳遣,它轉(zhuǎn)發(fā)請(qǐng)求到相應(yīng)的位于Node 1和Node 2的復(fù)制節(jié)點(diǎn)上识埋。當(dāng)所有的復(fù)制節(jié)點(diǎn)報(bào)告成功,Node 3報(bào)告成功到請(qǐng)求的節(jié)點(diǎn)零渐,請(qǐng)求的節(jié)點(diǎn)再報(bào)告給客戶端窒舟。

客戶端接收到成功響應(yīng)的時(shí)候,文檔的修改已經(jīng)被應(yīng)用于主分片和所有的復(fù)制分片诵盼。你的修改生效了惠豺。

3)副本分片復(fù)制時(shí)的相關(guān)的參數(shù)說(shuō)明:

replication:

復(fù)制默認(rèn)的值是sync。這將導(dǎo)致主分片得到復(fù)制分片的成功響應(yīng)后才返回风宁,如果你設(shè)置replication為async洁墙,請(qǐng)求在主分片上被執(zhí)行后就會(huì)返回給客戶端。它依舊會(huì)轉(zhuǎn)發(fā)請(qǐng)求給復(fù)制節(jié)點(diǎn)戒财,但你將不知道復(fù)制節(jié)點(diǎn)成功與否热监。

默認(rèn)的sync復(fù)制允許Elasticsearch強(qiáng)制反饋傳輸。async復(fù)制可能會(huì)因?yàn)樵诓坏却渌制途w的情況下發(fā)送過多的請(qǐng)求而使Elasticsearch過載饮寞。

consistency:

默認(rèn)主分片在嘗試寫入時(shí)需要**規(guī)定數(shù)量(quorum)**或過半的分片(可以是主節(jié)點(diǎn)或復(fù)制節(jié)點(diǎn))可用孝扛。這是防止數(shù)據(jù)被寫入到錯(cuò)的網(wǎng)絡(luò)分區(qū)。規(guī)定的數(shù)量計(jì)算公式如下:

int( (primary + number_of_replicas) / 2 ) + 1

consistency允許的值為one(只有一個(gè)主分片)骂际,all(所有主分片和復(fù)制分片)或者默認(rèn)的quorum或過半分片。

注意number_of_replicas是在索引中的的設(shè)置冈欢,用來(lái)定義復(fù)制分片的數(shù)量歉铝,而不是現(xiàn)在活動(dòng)的復(fù)制節(jié)點(diǎn)的數(shù)量。如果你定義了索引有3個(gè)復(fù)制節(jié)點(diǎn)凑耻,那規(guī)定數(shù)量是:int( (primary + 3 replicas) / 2 ) + 1 = 3

但如果你只有2個(gè)節(jié)點(diǎn)太示,那你的活動(dòng)分片不夠規(guī)定數(shù)量,也就不能索引或刪除任何文檔香浩。

注意: 新索引默認(rèn)有1個(gè)復(fù)制分片类缤,這意味著為了滿足quorum的要求**需要**兩個(gè)活動(dòng)的分片。當(dāng)然邻吭,這個(gè)默認(rèn)設(shè)置將阻止我們?cè)趩我还?jié)點(diǎn)集群中進(jìn)行操作餐弱。為了避開這個(gè)問題,規(guī)定數(shù)量只有在number_of_replicas大于一時(shí)才生效。

timeout:

當(dāng)分片副本不足時(shí)Elasticsearch會(huì)等待更多的分片出現(xiàn)膏蚓。默認(rèn)等待一分鐘瓢谢。如果需要,你可以設(shè)置timeout參數(shù)讓它終止的更早:100表示100毫秒驮瞧,30s表示30秒氓扛。

集群生態(tài):

1.同集群中節(jié)點(diǎn)之間可以擴(kuò)容縮容,

2.主分片的數(shù)量會(huì)在其索引創(chuàng)建完成后修正,但是副本分片的數(shù)量會(huì)隨時(shí)變化论笔。

3.相同的分片不會(huì)放在同一個(gè)節(jié)點(diǎn)上.

集群健康:

在Elasticsearch集群中可以監(jiān)控統(tǒng)計(jì)很多信息采郎,但是只有一個(gè)是最重要的時(shí)集群健康(cluster health)。Es中用三種顏色狀態(tài)表示:green狂魔,yellow蒜埋,red.

Green:所有主分片和副本分片都可用

Yellow:所有主分片可用,但不是所有副本分片都可用

Red:不是所有的主分片都可用毅臊;

這些我們可以在ES-Head插件中看到理茎。

Elasticsearch5.x的多機(jī)集群配置

這里主要針對(duì)基于Elasticsearch5.x的多機(jī)集群配置

ELasticsearch 5.3要求JDK版本最低為1.8,master機(jī)子安裝ELK管嬉,data機(jī)子安裝Elasticsearch皂林,安裝詳見【ELK搭建日記一】安裝和配置》。

要求按照配置修改系統(tǒng)參數(shù)蚯撩,確保系統(tǒng)有足夠資源啟動(dòng)ES础倍。

elasticsearch集群配置信息 elasticsearch-5.3.1/config/elasticsearch.yml

附:elasticsearch.yml基本配置說(shuō)明

主機(jī)master配置:

cluster.name: XXX ?#配置集群名稱

node.name: "es-node1"? ? ? ? ? #配置節(jié)點(diǎn)名稱

node.master: true? ? ? ? ? ? ? #允許這個(gè)節(jié)點(diǎn)被選舉為一個(gè)主節(jié)點(diǎn)(默認(rèn)允許)

node.data: true? ? ? ? ? ? ? ? #允許這個(gè)節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)(默認(rèn)允許)

network.host: 0.0.0.0? ? #允許其他機(jī)子訪問

path.data: /home/parallels/Desktop/data/elk/data? #存儲(chǔ)數(shù)據(jù)路徑

path.logs: /home/parallels/Desktop/data/elk/logs? #存放數(shù)據(jù)日志

http.port: 9200 #端口號(hào)

discovery.zen.ping.unicast.hosts: ["es-node1", "es-node2"]? #設(shè)置集群中master節(jié)點(diǎn)的初始列表,可以通過這些節(jié)點(diǎn)來(lái)自動(dòng)發(fā)現(xiàn)新加入集群的節(jié)點(diǎn)

http.cors.enabled: true

http.cors.allow-origin: "*"? #允許插件訪問集群

節(jié)點(diǎn)data配置:

cluster.name: XXX ?#配置集群名稱

node.name: "es-node2”? ? ? ? ? #配置節(jié)點(diǎn)名稱

node.master: false? ? ? ? ? ? ? #允許這個(gè)節(jié)點(diǎn)被選舉為一個(gè)主節(jié)點(diǎn)(默認(rèn)允許)

node.data: true? ? ? ? ? ? ? ? #允許這個(gè)節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)(默認(rèn)允許)

network.host: 0.0.0.0? ? #允許其他機(jī)子訪問

path.data: /home/parallels/Desktop/data/elk/data? #存儲(chǔ)數(shù)據(jù)路徑

path.logs: /home/parallels/Desktop/data/elk/logs? #存放數(shù)據(jù)日志

http.port: 9200 #端口號(hào)

discovery.zen.ping.unicast.hosts: [“本機(jī)ip地址”, “主機(jī)ip地址”]? #設(shè)置集群中master節(jié)點(diǎn)的初始列表胎挎,可以通過這些節(jié)點(diǎn)來(lái)自動(dòng)發(fā)現(xiàn)新加入集群的節(jié)點(diǎn)

http.cors.enabled: true

http.cors.allow-origin: "*"? #允許插件訪問集群

完成配置后確保所有節(jié)點(diǎn)在同一網(wǎng)段下

啟動(dòng)主節(jié)點(diǎn)./elasticsearch

啟動(dòng)elasticsearch head 插件 http://192.168.23.230:9100

es新建索引 默認(rèn)把數(shù)據(jù)分為5個(gè)分片和1副本分片

我們通過logstash導(dǎo)入數(shù)據(jù)(啟動(dòng)方法在ELK安裝和配置中)沟启,如果不做配置的情況下也將是按照es中默認(rèn)分片數(shù)來(lái)創(chuàng)建索引

./logstash -f ../config/logstash-simple.conf


可以看到集群健康值是yellow,因?yàn)橥ㄟ^logstash默認(rèn)生成的索引是有一份副本文件的犹菇,而這個(gè)副本文件沒有被節(jié)點(diǎn)分配德迹。我們按照前面的數(shù)據(jù)節(jié)點(diǎn)配置啟動(dòng)一個(gè)data節(jié)點(diǎn)即可完成分配,即變?yōu)榫G色揭芍。

但是當(dāng)節(jié)點(diǎn)數(shù)超過副本數(shù)+1的時(shí)候胳搞,就有可能出現(xiàn)數(shù)據(jù)丟失的風(fēng)險(xiǎn)如下圖

這種情況雖然健康值為綠色,但是當(dāng)中兩個(gè)節(jié)點(diǎn)宕機(jī)的極端情況下称杨,會(huì)出現(xiàn)數(shù)據(jù)丟失的風(fēng)險(xiǎn)肌毅。

可以通過elasticsearch-kopf插件進(jìn)行修改副本分片數(shù)達(dá)到所有節(jié)點(diǎn)分片數(shù)一致。

修改number_of_replicas

修改后

如果想自定義導(dǎo)入數(shù)據(jù)時(shí)的分片數(shù)量姑原,可以在logstash目錄下新建/config/logstash-simple.conf文件悬而,對(duì)output到es的數(shù)據(jù)格式進(jìn)行自定義。通過新建json配置文件來(lái)對(duì)索引格式自定義锭汛。

"number_of_replicas":"4",? 對(duì)應(yīng)副本分片數(shù)(可更改)

"number_of_shards":"4" 對(duì)應(yīng)主分片數(shù)(索引創(chuàng)建就無(wú)法更改)

分布式多集群進(jìn)階

在上文es的配置中笨奠,所有節(jié)點(diǎn)均為數(shù)據(jù)節(jié)點(diǎn)袭蝗,也可以是主節(jié)點(diǎn),當(dāng)主節(jié)點(diǎn)宕機(jī)時(shí)艰躺,其余的節(jié)點(diǎn)會(huì)自動(dòng)選舉出新的主節(jié)點(diǎn)呻袭,但在實(shí)際的項(xiàng)目中,這種方式并不推薦使用腺兴,這表示這個(gè)節(jié)點(diǎn)即有成為主節(jié)點(diǎn)的資格左电,又存儲(chǔ)數(shù)據(jù),這個(gè)時(shí)候如果某個(gè)節(jié)點(diǎn)被選舉成為了真正的主節(jié)點(diǎn)页响,那么他還要存儲(chǔ)數(shù)據(jù)篓足,這樣對(duì)于這個(gè)節(jié)點(diǎn)的壓力就比較大了。elasticsearch默認(rèn)每個(gè)節(jié)點(diǎn)都是這樣的配置闰蚕,在測(cè)試環(huán)境下這樣做沒問題栈拖。實(shí)際工作中建議不要這樣設(shè)置,這樣相當(dāng)于主節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)的角色混合到一塊了没陡。

如何配置多集群中的節(jié)點(diǎn)涩哟,實(shí)現(xiàn)負(fù)載均衡,可以參考elasticsearch負(fù)載均衡節(jié)點(diǎn)盼玄。


部分文獻(xiàn)出處

實(shí)例展示elasticsearch集群生態(tài),分片以及水平擴(kuò)展.

如何為logstash+elasticsearch配置索引模板?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贴彼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子埃儿,更是在濱河造成了極大的恐慌器仗,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件童番,死亡現(xiàn)場(chǎng)離奇詭異精钮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)剃斧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門轨香,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人幼东,你說(shuō)我怎么就攤上這事臂容。” “怎么了筋粗?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵策橘,是天一觀的道長(zhǎng)炸渡。 經(jīng)常有香客問我娜亿,道長(zhǎng),這世上最難降的妖魔是什么蚌堵? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任买决,我火速辦了婚禮沛婴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘督赤。我一直安慰自己嘁灯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布躲舌。 她就那樣靜靜地躺著丑婿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪没卸。 梳的紋絲不亂的頭發(fā)上羹奉,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音约计,去河邊找鬼诀拭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛煤蚌,可吹牛的內(nèi)容都是我干的耕挨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼尉桩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼筒占!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起魄健,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赋铝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后沽瘦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體革骨,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年析恋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了良哲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡助隧,死狀恐怖筑凫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情并村,我是刑警寧澤巍实,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站哩牍,受9級(jí)特大地震影響棚潦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膝昆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一丸边、第九天 我趴在偏房一處隱蔽的房頂上張望叠必。 院中可真熱鬧,春花似錦妹窖、人聲如沸纬朝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)共苛。三九已至,卻和暖如春蜓萄,著一層夾襖步出監(jiān)牢的瞬間俄讹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工绕德, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留患膛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓耻蛇,卻偏偏與公主長(zhǎng)得像踪蹬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子臣咖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容