解析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(分片)
- 每個shard(分片)都是一個最小工作單元,承載部分數(shù)據(jù),每個shard(分片)都是一個lucene實例,有完整的建立索引和處理請求的能力。
- 增減節(jié)點時,shard會目動在nodes中負載均衡。
- primary shard和replica shard,每個document^寶只存在于某一個primary shard以及其對應(yīng)的replica shard中,不可能存在于多個primary shard中
- replica shard是primary shard的副本,負責容錯 和 讀請求負載
- primary shard的數(shù)量在創(chuàng)建素引的時候就固定了,replica shard的數(shù)量可以隨時修改
- primary shard的默認數(shù)量是5, replica默認是 1, 默 認 有 10個shard, 5個primary shard, 5個replica shard
- 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宕機?)
- 3個節(jié)點,6個shard(3個主,每個主1個從),最多接受一個node宕機
(死了一主一從。死的主還有活的從,死的從還有活的主) - 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
- 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
- index:
說明了一個文檔存儲在哪個索引中
同一個索引下存放的是相似的文檔(文檔的field多數(shù)是相同的)
索引名必需是小寫的,不能以下劃線開頭,不能包括逗號 - _type:
表示文檔屬子索引中的哪個類型 (ES7.0.0已棄用)
一個索引下只能有一個type
類型名可以是大寫也可以是小寫的,不能以下劃線開頭,不能包括逗號 - _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"}
}
