- es支持集群模式,是一個分布式系統(tǒng),其好處主要有兩個:
? - 增大系統(tǒng)容量,如內(nèi)存、磁盤、使得es集群可以支持PB級別的數(shù)據(jù)
? - 提高系統(tǒng)的可用性,即使部分節(jié)點停止服務(wù),整個集群依然可以正常服務(wù) - es集群由多個es示例組成
? - 不同的集群通過集群名來區(qū)分,可通過cluster.name 進(jìn)行修改,默認(rèn)為elasricsearch
? - 每個es實例本質(zhì)是一個JVM進(jìn)程,且有自己的名字,通過node.name進(jìn)行修改 -
Cluster State
es集群相關(guān)的數(shù)據(jù)稱為 cluster state(集群狀態(tài)),主要記錄信息如下:
? - 節(jié)點信息,比如節(jié)點的名稱、連接地址等
? - 索引信息,比如索引名稱、配置等 -
Cluster Health
通過如下api可以查看集群的健康狀況,包括以下三種:
? - green:健康狀態(tài),指所有的主副分片都正常分配
? - yellow:指所有的主分片都正常分配,但是有副本分片未正常分配
? - red:有主分片未分配
查看健康狀態(tài) API響應(yīng)
Master Node
? - 可以修改cluster state 的節(jié)點稱為 master 節(jié)點,一個集群只能有一個Master Node - cluster state 存儲在每個節(jié)點上,master 維護(hù)最新版本并同步給其他節(jié)點
? - master節(jié)點是通過集群中所有節(jié)點選舉產(chǎn)生,可以被選舉的節(jié)點稱為master-eligible節(jié)點,配置為:node.master: trueCoordinating Node
處理請求的節(jié)點為 coordinating 節(jié)點,該節(jié)點為所有節(jié)點的默認(rèn)角色,不能取消
? - 路由請求到正確的節(jié)點處理,比如創(chuàng)建索引的請求到master 節(jié)點Data Node
存儲數(shù)據(jù)的節(jié)點為 data節(jié)點,默認(rèn)節(jié)點都是 data 類型,相關(guān)配置為:node.data: true提高系統(tǒng)的可用性
1. 服務(wù)的可用性
? - 2個節(jié)點的情況下,允許其中一個節(jié)點停止服務(wù)
2. 數(shù)據(jù)的可用性
? - 引入副本(replication)解決
? - 每個節(jié)點上都有完備的數(shù)據(jù)增大系統(tǒng)的容量
- 如何將數(shù)據(jù)分布于所有的節(jié)點上?
? - 引入分片(Shard) 解決問題 -
分片是es支持PB級數(shù)據(jù)的基石
下圖是3個節(jié)點的集群中test_index 的分片分布情況,創(chuàng)建時我們指定了3個分片和1個副本
? - 分片存儲了部分?jǐn)?shù)據(jù),可以分布于任意節(jié)點上
? - 分片數(shù)在索引創(chuàng)建時指定且后續(xù)不允許修改,默認(rèn)為 5 個
? - 分片有主分片和副本分片之分,以實現(xiàn)數(shù)據(jù)的高可用
? - 副本分片的數(shù)據(jù)由主分片同步,可以有多個,從而提高讀取的吞吐量
創(chuàng)建索引
-
分片數(shù)設(shè)置注意事項
分片數(shù)的設(shè)定很重要,需要提前規(guī)劃好
? - 過小會導(dǎo)致后續(xù)無法通過增加節(jié)點實現(xiàn)水平擴(kuò)容
? - 過大會導(dǎo)致一個節(jié)點上分布過多的分片,造成資源浪費,同時會影響查詢性能 -
故障轉(zhuǎn)移
集群由3個節(jié)點組成,如下圖所示,此時的集群狀態(tài)是 greenCluster-1
node1 所在的機(jī)器宕機(jī)導(dǎo)致服務(wù)終止,此時集群會如何處理?Cluster-2
-
node2 和 node3 發(fā)現(xiàn) node1 無法響應(yīng)一段時間后會發(fā)起master選舉,比如這里選擇 node2 為 master 節(jié)點,此時由于主分片P0下線,集群狀態(tài)變?yōu)镽ed Cluster-3
-
node2 發(fā)現(xiàn)主分片P0未分配,將R0提升為主分片。此時由于所有的主分片都正常分配,集群的狀態(tài)變?yōu)閅ellowCluster-4
-
node2 為 P0和P1生成新的副本,集群狀態(tài)變?yōu)榫G色Cluster-5
-
集群文檔創(chuàng)建的流程創(chuàng)建流程
-
集群文檔讀取的流程讀取流程
-
腦裂問題
腦裂問題(split-brain),是分布式系統(tǒng)中經(jīng)典的網(wǎng)絡(luò)問題,如下圖所示:3個節(jié)點組成的集群,突然node1的網(wǎng)絡(luò)和其他兩個節(jié)點中斷。腦裂node2與node3會重新選舉master,比如node2成為了新的master,此時會更新cluster state, 同時node1自己組成集群后,也會更新cluster state,此時同一個集群有兩個master,而且維護(hù)不同的cluster state ,網(wǎng)絡(luò)恢復(fù)后無法選擇正確的master。腦裂
解決方案
解決方案為僅在可選舉master-eligible節(jié)點數(shù)大于等于quorum時才可以進(jìn)行master選舉
? - quorum = master-eligible/2 + 1,例如3個節(jié)點時,quorum 為 2
? - 設(shè)定 discovery.zen.minimum_master_nodes 為 quorum 即可避免腦裂問題。腦裂












