如何理解ES是分布式瞒津、可伸縮、高可用
- ES 是基于Lucene實(shí)現(xiàn)的分布式搜索引擎来氧,其目的是擴(kuò)展單機(jī)性能問(wèn)題
- ES 可以橫向或者縱向擴(kuò)展诫给,一般都選擇橫向擴(kuò)展,這樣性價(jià)比更好啦扬,當(dāng)集群需要擴(kuò)展時(shí)只要添加相應(yīng)機(jī)器中狂,ES會(huì)自動(dòng)進(jìn)行集群感知
- ES 是節(jié)點(diǎn)對(duì)等分布式架構(gòu),當(dāng)前Master 節(jié)點(diǎn)出現(xiàn)宕機(jī)扑毡,集群中任何一個(gè)節(jié)點(diǎn)都可以充當(dāng)Master節(jié)點(diǎn)胃榕,保證服務(wù)可用
面向文檔和面向?qū)ο笥惺裁磪^(qū)別
ES 是面向文檔搜索引擎,文檔的重要特性就是易于擴(kuò)展的維護(hù)瞄摊,面向文檔一般是Json格式勋又,而面向?qū)ο蟮奶攸c(diǎn)是耦合性低,各對(duì)象之間的耦合性盡可能低泉褐,對(duì)象內(nèi)部?jī)?nèi)聚性盡可能高,所以面向?qū)ο笤诒硎疽眯蔚膶?duì)象時(shí)需要關(guān)聯(lián)鸟蜡,表示形式比較復(fù)雜膜赃,而文檔就相對(duì)簡(jiǎn)潔,比如:
# 面向?qū)ο?public class Employee(){
private String dep;
private String level;
private PersonInfo info;
}
public class Person(){
private String name;
private String age;
private String gender;
}
# 面向文檔
{
dep:"",
"level":"",
"info":{
"name":"",
"age":"",
"gender":""
}
}
ES shard和replica機(jī)制
- 一個(gè)index 可以包括多個(gè)shard
- 每一個(gè)shard就是一個(gè)lucene實(shí)例揉忘,可以提供請(qǐng)求和處理數(shù)據(jù)能力
- 節(jié)點(diǎn)發(fā)生變化跳座,ES會(huì)自動(dòng)在集群中平衡shard
- 每個(gè)document 只能存在于一個(gè)primary shard中
- replica shard 是 primary shard 的副本,負(fù)責(zé)對(duì)primary shard 容錯(cuò)泣矛,讀取負(fù)載
- primary shard 在index 創(chuàng)建時(shí)就一定確定疲眷,不可修改,但是replica shard的數(shù)量可以動(dòng)態(tài)調(diào)整
- primary shard 和其對(duì)應(yīng)的 replica shard 不可以再同一臺(tái)機(jī)器中您朽,否則就失去了replica 意義狂丝。