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