分布式特性
- elasticsearch的分布式架構(gòu)帶來的好處
- 存儲的水平擴容现使,支持pb級的數(shù)據(jù)
- 提高系統(tǒng)的可用性荐绝,部分節(jié)點停止服務一汽,整個集群的服務不受影響
- elasticsearch的分布式架構(gòu)
- 不同集群通過不同的名字區(qū)分,默認名字“elasticsearch”
- 通過配置文件修改低滩,或者在命令行中 -E cluster.name=cutie進行設定
節(jié)點
- 節(jié)點是一個elasticsearch的實例
- 其本質(zhì)上就是一個java進程
- 一臺機器上可以運行多個elasticsearch進程召夹,但是生產(chǎn)環(huán)境一般建議一臺機器上就運行一個elasticsearch實例
- 每一個節(jié)點都有名字,通過配置文件配置恕沫,或者啟動的時候 -E node.name=cutie指定
- 每一個節(jié)點在啟動之后监憎,會分配一個uid,保存在data目錄下
coordinating node
- 處理請求的節(jié)點昏兆,叫coordinating node
- 路由請求到正確的節(jié)點枫虏,例如創(chuàng)建索引的請求妇穴,需要路由到master
- 所有的節(jié)點默認都是 coordinating node
- 通過將其他類型設置成false,使其成為dedicated coordinating node
demo - 啟動節(jié)點隶债,cerebro介紹
- 啟動一個節(jié)點
- bin/elasticsearch -E node.name=node1 -E cluster.name=cutie -E path.data=node1_data -E http.port=9200
-
https://github.com/lmenezes/cerebro/release
- overview / filter by node / index
- nodes
- rest / more
- health status
data node
- 可以保存數(shù)據(jù)的節(jié)點腾它,叫做data node
- 節(jié)點啟動后,默認就是數(shù)據(jù)節(jié)點死讹,可以設置node.data:false禁止
- data node的職責
- 保存分片數(shù)據(jù)瞒滴,在數(shù)據(jù)拓展上啟到了至關重要的作用,由master node決定如何把分片分發(fā)啊哦數(shù)據(jù)節(jié)點上
- 通過增加數(shù)據(jù)節(jié)點
- 可以解決數(shù)據(jù)水平拓展和解決數(shù)據(jù)單點問題
master node
- master node的職責
- 處理創(chuàng)建赞警,刪除索引等請求 / 決定分片被分配到哪個節(jié)點 / 負責索引的創(chuàng)建與刪除
- 維護并且更新cluster state
- master node 的最佳實踐
- master節(jié)點非常重要妓忍,在部署上需要考慮解決單點的問題
- 為一個集群設置多個master節(jié)點/每個節(jié)點值承擔master的單一角色
master eligible nodes & 選主流程
- 一個集群,支持配置多個master eligible節(jié)點愧旦,這些節(jié)點可以在必要的時候世剖,如master節(jié)點出現(xiàn)故障,網(wǎng)絡故障時笤虫,參與選主流程旁瘫,成為master節(jié)點
- 每個節(jié)點啟動后,默認就是一個master eligible節(jié)點
- 可以設置mode.master:false禁止
- 當集群內(nèi)第一個master eligible節(jié)點啟動的時候琼蚯,它會將自己選舉程master節(jié)點
- 互相ping對方酬凳,node id低的會成為被選舉的節(jié)點
-
其他節(jié)點會加入集群,但是不承擔master節(jié)點的角色遭庶,一旦發(fā)現(xiàn)被選中的主節(jié)點丟失宁仔,就會選舉出新的master節(jié)點
image.png
腦裂問題
- split-brain,分布式系統(tǒng)的經(jīng)典網(wǎng)絡問題峦睡,當出現(xiàn)網(wǎng)絡問題翎苫,一個節(jié)點和其他節(jié)點無法連接
- node 2和node 3會重新選舉master
- node 1自己還是作為master,組成一個集群赐俗,同時更新cluster state
- 導致有2個master拉队,維護不同的cluster state,當網(wǎng)絡恢復的時候阻逮,無法選擇正確恢復
image.png
如何避免腦裂問題
- 限定一個選舉條件粱快,設置quorum(仲裁),只有在master eligible節(jié)點數(shù)大于quorum時候叔扼,才能進行選舉
- quorum = (master節(jié)點總數(shù)/2)+1
- 當3個master eligible時事哭,設置discovery.zen.minimum_master_nodes為2,即可避免腦裂
- 從7.0開始瓜富,無需這個配置
- 移除minimum_master_nodes參數(shù)鳍咱,讓elasticsearch自己選擇可以形成仲裁的節(jié)點
- 典型的主節(jié)點選舉現(xiàn)在只需要很短時間就可以完成,集群的伸縮變得更安全与柑,更容易蓄坏,并且可能造成的丟失數(shù)據(jù)的系統(tǒng)配置選項更少了
- 節(jié)點更清楚地記錄它們的狀態(tài),有助于診斷為什么它們不能加入集群或為什么無法選舉出主節(jié)點
配置節(jié)點類型
- 一個節(jié)點默認情況下是一個master eligible丑念,data and ingest node
節(jié)點類型 | 配置參數(shù) | 默認值 |
---|---|---|
data eligible | node.master | true |
data | node.data | true |
ingest | node.ingest | true |
coordinating only | 無 | 設置上面三個參數(shù)全部為false |
machine learning | node.xml | true(需要enable x-pack) |