(1)大概說:索引是ES中存儲數(shù)據(jù)的基本單位,ES中用索引存儲數(shù)據(jù)烤蜕,索引是拆分成多個shard分片進行分布式存儲的封孙,存儲在多個機器上
(2)詳細說:分片
Elasticsearch 也是會對數(shù)據(jù)進行切分,同時每一個分片會保存多個副本讽营,其原因是為了保證分布式環(huán)境下的高可用虎忌,同時也擴大了存儲空間僚匆。es也是master-slave架構(gòu)宙址,在 es 中,節(jié)點是對等的届榄,節(jié)點間會通過自己的一些規(guī)則選取集群的 Master莉兰,Master 會負責(zé)集群狀態(tài)信息的改變挑围,并同步給其他節(jié)點。值得注意的是糖荒,只有建立索引和類型需要經(jīng)過 Master杉辙,數(shù)據(jù)的寫入有一個簡單的 Routing 規(guī)則,可以 Route 到集群中的任意節(jié)點捶朵,所以數(shù)據(jù)寫入壓力是分散在整個集群的蜘矢。
具體就是你先建立一個索引,這個索引可以拆分成多個分片(shard)泉孩,每個分片(shard)存儲部分?jǐn)?shù)據(jù)硼端。每個分片(shard) 有一個主分片(primary shard),負責(zé)寫入數(shù)據(jù)寓搬,還有幾個復(fù)制分片(replica shard)珍昨。ES客戶端在主分片(primary shard)寫入數(shù)據(jù)之后,會將數(shù)據(jù)同步到其他幾個復(fù)制分片(replica shard)上去句喷。ES客戶端取數(shù)據(jù)的時候就會在主分片或者復(fù)制分片中去讀镣典。(類似Kafka)
通過這個復(fù)制replica 方案實現(xiàn)高可用:每個分片(shard)的數(shù)據(jù)有多個備份,如果某個機器宕機了唾琼,沒關(guān)系兄春,還有別的數(shù)據(jù)副本在別的機器上。
1-ES 集群多個節(jié)點锡溯,會自動選舉一個節(jié)點為 master 節(jié)點赶舆,這個 master 節(jié)點其實就是干一些管理的工作的哑姚,比如維護索引元數(shù)據(jù)、負責(zé)切換 主分片(primary shard) 和 復(fù)制分片(replica shard)身份等芜茵。要是 master 節(jié)點宕機了叙量,那么會重新選舉一個節(jié)點為 master 節(jié)點。
2-如果某個非 master 節(jié)點宕機了九串,那么此節(jié)點上的 primary shard 就沒了绞佩,那么master 會讓 primary shard 對應(yīng)的 replica shard(注在其他機器上的replica)切換為 primary shard。如果宕機的機器修復(fù)了猪钮,能讓集群恢復(fù)正常品山,但修復(fù)后的節(jié)點也不再是 primary shard,而是 replica shard烤低。(上述就是 ElasticSearch 作為一個分布式搜索引擎最基本的架構(gòu)設(shè)計)
(3)分布式搜索:
一個集群有多個節(jié)點(服務(wù)器)組成肘交,多個節(jié)點參與搜索功能。協(xié)調(diào)節(jié)點將搜索的請求轉(zhuǎn)發(fā)給所有分片shard對應(yīng)的primary shard 或replica shard拂玻,每一個分片shard 將自己搜索的結(jié)果(其實也就是一些唯一標(biāo)識)酸些,返回給協(xié)調(diào)節(jié)點,有協(xié)調(diào)節(jié)點進行數(shù)據(jù)的合并檐蚜,排序魄懂,分頁等操作,產(chǎn)出最后的結(jié)果闯第。