ElasticSearch第13節(jié) ElasticSearch原理

解析es的分布式架構(gòu)

1.1 分布式架構(gòu)的透明隱藏特性

ElasticSearch是一個分布式系統(tǒng),隱藏了復(fù)雜的處理機制
分片機制:
我們不用關(guān)心數(shù)據(jù)是按照什么機制分片的、最后放入到哪個分片中
分片的副本:
集群發(fā)現(xiàn)機制(cluster discovery):新節(jié)點自動發(fā)現(xiàn)集群自動加入
shard負載均衡:比如現(xiàn)在有10shard,隼群中有3個節(jié)點,es會進行均衡地分配,以保持每個節(jié)點均衡的負載請求。
請求路由

1.2擴容期

垂直擴容:構(gòu)置新機器,替換已有機器
水平擴容:直接增加機器

1.3 rebalance

塯加成減少節(jié)點時會目動均衡

1.4 master節(jié)點

主節(jié)點的主要職責是和集群相關(guān)的內(nèi)容,如創(chuàng)建或刪除索引,跟蹤哪些節(jié)點是集群的一部分,并決定哪些分配分配給相關(guān)節(jié)點。穩(wěn)定的主節(jié)點對集群的健康是很重要的。

1.5 節(jié)點對等

每個節(jié)點都能接收請求,每個節(jié)點接收到請求后都能把該請求路由到有相關(guān)數(shù)據(jù)的其它節(jié)點上,接收原始請求的節(jié)點負責采集數(shù)據(jù)并返回給客戶端。


2分片和副本機制

1 . index(索引)包含多個shard(分片)

  1. 每個shard(分片)都是一個最小工作單元,承載部分數(shù)據(jù),每個shard(分片)都是一個lucene實例,有完整的建立索引和處理請求的能力。
  2. 增減節(jié)點時,shard會目動在nodes中負載均衡。
  3. primary shard和replica shard,每個document^寶只存在于某一個primary shard以及其對應(yīng)的replica shard中,不可能存在于多個primary shard中
  4. replica shard是primary shard的副本,負責容錯 和 讀請求負載
  5. primary shard的數(shù)量在創(chuàng)建素引的時候就固定了,replica shard的數(shù)量可以隨時修改
  6. primary shard的默認數(shù)量是5, replica默認是 1, 默 認 有 10個shard, 5個primary shard, 5個replica shard
  7. primary shard不能和目己的replica shard放在同一令節(jié)點上(否則節(jié)點宕機,primary shard和副本都丟失,起不到容錯的作用,但是可以和其他
    primary shard 的 replica shard放在同一個節(jié)點上。
3. 單節(jié)點環(huán)境下創(chuàng)建索引分析

集群可以正常工作,但是一旦出現(xiàn)節(jié)點宕機,數(shù)據(jù)全部丟失,而且集群不可用,無法接收任何請求。如果每一個索引的主分片和副本分配都能夠進行很好的分配,那么久是green

//
#3個主分片,一個副本分片,一個ES節(jié)點
put lib4
{
  "settings":{
    "index":{
      "number_of_shards":3,
      "number_of_replicas":1
    }
  }
}
#primary_shard1 primary_shard2 primary_shard3 在一個ES節(jié)點上
#但是由于primary_shard 和 replica_shard不能在同一個分片上,所以副本分片不能成功創(chuàng)建。

#查看ES監(jiān)控狀況:yellow是警告色,黃色也不影響存儲,只不過沒有副本了
GET /_cat/health
1560754932 07:02:12 elasticsearch yellow 1 1 21 21 0 0 6 0 - 77.8%
4. 兩個節(jié)點環(huán)境下創(chuàng)建索引分析

將3個primary shard分配到一個node上去,另外3個replica shard分配到另一個節(jié)點上。

node1 : p1  p2   p3
node2 : r1  r2   r3
5. 將2個及節(jié)點再擴容至3個節(jié)點
# primary_shard:1, replicat
node1 : p1  p3
node2 : p2  r2
node3 : p3  r1
6. 擴容的極限

每個es節(jié)點上運行一個分片(3主3從 = 6)

7. 新增節(jié)點超出擴容的極限?

增加副本數(shù)

8. 容錯性(能容忍多少臺node宕機?)
  1. 3個節(jié)點,6個shard(3個主,每個主1個從),最多接受一個node宕機
    (死了一主一從。死的主還有活的從,死的從還有活的主)
  2. 3個節(jié)點,9個shard(3個主,每個主2個從)最多接受2個node宕機
9. 容錯性

3節(jié)點9shard,(3個主,每個主2個從)。3個節(jié)點中有一個是master節(jié)點

1)宕機一個節(jié)點,節(jié)點包含primary_shard,GET /_cat/health red

  1. ES將丟失primary_shard的一個副本shard轉(zhuǎn)變?yōu)閜rimary_shard,此時所有的primary_shard都是活躍的,但是GET /_cat/health 是yellow,因為副本丟失。
    3)宕機的節(jié)點重啟,master會將每個primary_shard上的數(shù)據(jù)拷貝一份副本來。此時所有的primary_shard和replicate_shard都在線,GET /_cat/health 是green

二、 文檔的核心元數(shù)據(jù)

primary shard和replica shard都是Active status

  1. index:
    說明了一個文檔存儲在哪個索引中
    同一個索引下存放的是相似的文檔(文檔的field多數(shù)是相同的)
    索引名必需是小寫的,不能以下劃線開頭,不能包括逗號
  2. _type:
    表示文檔屬子索引中的哪個類型 (ES7.0.0已棄用)
    一個索引下只能有一個type
    類型名可以是大寫也可以是小寫的,不能以下劃線開頭,不能包括逗號
  3. _id:
    文檔的唯一標識和索引,和索引、類型組合在一起唯一標識了一個文檔
    可以手動指定值,也可以甶es來生成這個值

3.8文擋id生成方式

1.手動指走
put /index/type/66
通常是把其它系統(tǒng)的已有數(shù)據(jù)導(dǎo)入到es時
2.由es生成id值
post /index/type
es生成的id長度為20個字節(jié),使用的是base64編碼,URL安全,使用的是GUID算法, 分布式下并發(fā)生成id值時不會沖突。

3.9 _source元數(shù)據(jù)分析

其實就是我們添加文檔時request body中的內(nèi)容
指定返回的結(jié)果中含有哪些字段:
get /index/type/1?_source=name,id,sex

3.10改變文檔內(nèi)容原理解析:PUT POST

//
#根據(jù)id獲取文檔
GET /myindex/_doc/article2
#全部替換文檔內(nèi)容
PUT /myindex/_doc/article2
{
    "post_date" : "2019-06-10",
    "tile" : "xixi",
    "content" : "I like html",
    "id" : 120,
    "age" : 20,
    "test" : [
      "html",
      "good"
    ],
    "intrest" : "xi huan tingyinyue,cooking,running"
}
#部分替換(更新)文檔內(nèi)容
POST /myindex/_update/article2
{
  "doc": {"tile" : "hello world2"}
}
put post對比
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容