基本概念
基本概念
-
文檔(Document)
-
es是面向文檔的,文檔是所有可搜索數(shù)據(jù)的最小單位
-
文檔會(huì)被序列化為JSON格式,保存在es中
-
每個(gè)文檔都有一個(gè)Unique ID
- 可以自己指定
- 也可以由es自動(dòng)生成
-
示例
{"year": 1995,"@version": "1","genre": ["Adventure", "Animation","Children", "Comedy", "Fantasy"],"id": "1","title": "Toy Story" } -
文檔的元數(shù)據(jù)
{"_index": "movies", // 文檔所在的索引名"_type": "_doc", // 文檔所屬的類型名"_id": "1", // 文檔的uid"_score": 14.69302, // 相關(guān)性打分"_source": { // 文檔的原始json數(shù)據(jù)"year": 1995,"@version": "1", // 文檔的版本信息"genre": ["Adventure", "Animation","Children", "Comedy", "Fantasy"],"id": "1","title": "Toy Story"} }其他:_all整合所有字段內(nèi)容到該字段,已被廢除
-
-
索引(index)
- 索引是文檔的容器,是一類文檔的集合(類似于mongo中的集合)
- Index體現(xiàn)邏輯空間的概念,每個(gè)索引都有自己的Mapping定義,用于定義文檔的字段及類型(類似于表結(jié)構(gòu)schema)
- Shard體現(xiàn)物理空間的概念,索引中的數(shù)據(jù)分散在Shard上
- Mapping和Settings
- Mapping等一文檔字段及類型
- Settings定義不同的數(shù)據(jù)分布
- 其他語義:保存一個(gè)文檔到es中的過程,也叫索引(indexing)
- 索引是文檔的容器,是一類文檔的集合(類似于mongo中的集合)
-
Type
- 7.0開始,一個(gè)Index只能創(chuàng)建一個(gè)Type,也就是_doc
分布式系統(tǒng)
-
高可用性
- 服務(wù)可用性:允許有節(jié)點(diǎn)停止服務(wù)
- 數(shù)據(jù)可用性:部分節(jié)點(diǎn)丟失,不會(huì)丟失數(shù)據(jù)
-
可擴(kuò)展性
- 請求量提升 / 數(shù)據(jù)不斷增長,將數(shù)據(jù)分布到所有節(jié)點(diǎn)上(存儲(chǔ)的水平擴(kuò)展)
-
es的分布式架構(gòu)
-
不同集群通過不同的名字區(qū)分,默認(rèn)是”elasticsearch“
-
可以通過配置文件,或者啟動(dòng)時(shí)指定
-E cluster.name=xxx -
一個(gè)集群可以有一個(gè)或多個(gè)節(jié)點(diǎn)
-
-
-
節(jié)點(diǎn)
-
節(jié)點(diǎn)是一個(gè)Elasticsearch的實(shí)例
- 本質(zhì)是一個(gè)JAVA進(jìn)程
- 一臺(tái)機(jī)器可以運(yùn)行多個(gè)Elasticsearch進(jìn)程,但是生產(chǎn)環(huán)境一般建議一臺(tái)機(jī)器只運(yùn)行一個(gè)Elasticsearch實(shí)例
-
節(jié)點(diǎn)的名字可以通過配置文件或啟動(dòng)時(shí)指定
-E node.name=xxx -
每個(gè)節(jié)點(diǎn)啟動(dòng)之后,會(huì)被分配一個(gè)UID,保存在data目錄下
-
-
Master-eligible Node和Master Node
- 每個(gè)節(jié)點(diǎn)啟動(dòng)后,默認(rèn)就是一個(gè)master-eligible節(jié)點(diǎn)
- master-eligible節(jié)點(diǎn)可以參加選主流程,成為master節(jié)點(diǎn)
- 當(dāng)?shù)匾粋€(gè)節(jié)點(diǎn)啟動(dòng)后,它會(huì)將自己選舉成為master節(jié)點(diǎn)
- 每個(gè)節(jié)點(diǎn)上都保存了集群的狀態(tài),只有master節(jié)點(diǎn)上才能修改集群的狀態(tài)信息(cluster state):
- 所有節(jié)點(diǎn)信息
- 所有的索引(集)以及相關(guān)的Mapping和Setting信息
- 分片的路由信息
-
Data Node 和Coordinating Node
- data節(jié)點(diǎn)負(fù)責(zé)保存分片數(shù)據(jù),是實(shí)現(xiàn)水平擴(kuò)容的基本單位
- coordinating節(jié)點(diǎn)負(fù)責(zé)接受客戶端的請求,將請求分發(fā)到合適的節(jié)點(diǎn),最終把結(jié)果匯集到一起
- 每個(gè)節(jié)點(diǎn)默認(rèn)都起到coordinating節(jié)點(diǎn)的職責(zé)
-
其他節(jié)點(diǎn)類型
- Hot & Warm Node (冷熱節(jié)點(diǎn))
- 熱節(jié)點(diǎn)是配置比較高的節(jié)點(diǎn)data node,用于存儲(chǔ)較新的數(shù)據(jù),冷節(jié)點(diǎn)相反,以此降低集群部署的成本
- Machine Learning Node
- 負(fù)責(zé)跑機(jī)器學(xué)習(xí)的任務(wù),用來做異常檢查
- Hot & Warm Node (冷熱節(jié)點(diǎn))
-
節(jié)點(diǎn)啟動(dòng)時(shí),讀取elasticsearch.yml配置文件,來決定自己承擔(dān)的角色
- master eligible 對應(yīng)的配置項(xiàng)是 node.master,默認(rèn)值是true
- data對應(yīng)的是node.data,默認(rèn)值true
- 一個(gè)節(jié)點(diǎn)可以承擔(dān)多種角色
- 在生產(chǎn)環(huán)境中,推薦設(shè)置單一角色的節(jié)點(diǎn)
-
分片
-
主分片(Primary Shard),用以解決數(shù)據(jù)水平擴(kuò)展的問題。通過主分片,可以將數(shù)據(jù)分布到集群內(nèi)的所有節(jié)點(diǎn)上
- 一個(gè)分片是一個(gè)運(yùn)行Lucene的實(shí)例
- 主分片數(shù)在索引創(chuàng)建時(shí)指定,后續(xù)不允許修改,除非Reindex
-
副本(Replica Shard),用以解決數(shù)據(jù)高可用問題,是主分片的拷貝
- 副本分片數(shù),可以動(dòng)態(tài)調(diào)整
- 增加副本數(shù),還可以一定程度上提高服務(wù)的可用性(吞吐性能)
-
示例1:在一個(gè)3節(jié)點(diǎn)的集群中,blogs索引(集)的分片分布情況
PUT /blogs {"settings": {"number_of_shards": 3, // 主分片數(shù)3"number_of_replicas": 1 // 副本1份} }- Node1
- P1
- R2
- Node2
- P2
- R3
- Node3
- P3
- R1
- Node1
-
示例2:在一個(gè)2節(jié)點(diǎn)的集群中,如果有3個(gè)索引(集)的分片情況
PUT /index1 {"settings": {"number_of_shards": 1, // 主分片數(shù)1"number_of_replicas": 1 // 副本1份} }- Node1
- Index1P1,Index2P1, Index3P1
- Node2
- Index1R1, Index2R1, Index3R1
- Node1
-
示例3: 一個(gè)2節(jié)點(diǎn)的集群中,blog索引在如下設(shè)置下的分片情況
PUT /blogs {"settings": {"number_of_shards": 3, // 主分片數(shù)3"number_of_replicas": 1 // 副本1份} }- Node1
- P1
- R2
- R3
- Node2
- P2
- P3
- R1
- Node1
-
分片的設(shè)定:在生產(chǎn)環(huán)境中,需要提前做好容量的規(guī)劃
- 分片數(shù)設(shè)置過小
- 導(dǎo)致后續(xù)無法增加節(jié)點(diǎn)實(shí)現(xiàn)水平擴(kuò)展
- 單個(gè)分片數(shù)據(jù)量太大,導(dǎo)致數(shù)據(jù)重新分配耗時(shí)
- 分片數(shù)設(shè)置過大
- 影響搜索結(jié)果的相關(guān)性打分,影響統(tǒng)計(jì)結(jié)果的準(zhǔn)確性
- 單個(gè)節(jié)點(diǎn)傻姑娘過多的分片,會(huì)導(dǎo)致資源浪費(fèi),同時(shí)也會(huì)影響性能(7.0開始,默認(rèn)分片數(shù)由5改為1)
- 分片數(shù)設(shè)置過小
-
-
查看集群健康狀態(tài)
GET _cluster/health狀態(tài)說明:
- green:主分片和副本都分配正常
- yellow:主分片分配正常,有副本未能正常分配
- red:有主分片未能正常分配。例如,當(dāng)服務(wù)器磁盤容量操作85%時(shí),去創(chuàng)建一個(gè)新的索引(集)
-
通過cerebro查看集群的分片及詳細(xì)信息
總結(jié)
- 上一篇: [实战演练]腾讯2013年校招软件开发类
- 下一篇: 苹果公司推出新款iMac产品