-
Cluster 和 Node
Cluster 是對外提供搜索服務(wù)的集群,組成這個 Cluster 的各個節(jié)點叫做 Node。節(jié)點 Node 是 Elasticsearch 運行的實例;集群 Cluster 是一組有著同樣 cluster.name 的節(jié)點,它們協(xié)同工作,互相分享數(shù)據(jù),提供了故障轉(zhuǎn)移和擴展的功能。Node 又可分為 IndexNode(提供讀寫)、DataNode(只提供數(shù)據(jù)存儲和訪問,負(fù)載均衡)等。節(jié)點之間是對等關(guān)系的(去中心化),而弱化的 Master 節(jié)點只不過多了維護集群狀態(tài)的功能。每個節(jié)點上面的集群狀態(tài)數(shù)據(jù)都是實時同步的。如果 Master 節(jié)點出故障,按照預(yù)定的程序,其他一臺 Node 機器會被選舉成為新的 Master。
-
Shards
Elasticsearch 將一個完整的索引分成若干部分,每個部分就是一個 Shards,每個 Shard 實際上就是一個基于 Lucene 的索引。Shards 存儲在相同或不同的 Node 上;Shards 的數(shù)量一般在索引創(chuàng)建前指定,且索引創(chuàng)建后不能更改(其初始配置也是可以修改的)。檢索時,Elasticsearch 會將查詢發(fā)送到不同的 Shards 上并將返回結(jié)果合并,這個過程對用戶來說是透明的。
-
Replicas
Replicas 是索引的冗余備份,可用于防止數(shù)據(jù)丟失或用來做負(fù)載均衡。一般地,Elasticsearch 會自動對搜索請求進行負(fù)載均衡。
-
Recovery
在有節(jié)點加入或退出集群 Cluster 或故障節(jié)點重新啟動時,Elasticsearch 會根據(jù)機器的負(fù)載情況,對索引分片 Shards 進行重新分配。
-
River
River 是一個運行在 Elasticsearch 集群內(nèi)部的插件,主要用來從外部獲取異構(gòu)數(shù)據(jù),然后在 Elasticsearch 里創(chuàng)建索引。常見的有 RabbitMQ river Plugin、Twitter river Plugin、Wikipedia river Plugin 、MongoDB river Plugin 、JDBC river Plugin等。
-
Gateway
Gateway 是Elasticsearch 索引數(shù)據(jù)快照的存儲方式,當(dāng) es 集群關(guān)閉再重新啟動時,就會從 Gateway 中讀取索引快照。es 支持多種類型的 Gateway,有本地文件系統(tǒng)(像普通的 Lucene 索引一樣,這也是默認(rèn)方式)、分布式文件系統(tǒng)(如 freeds)、Hadoop 的 HDFS 和 Amazon 的 S3 云存儲服務(wù)等。
Gateway 與 workDir的區(qū)別:Gateway 存儲完整的索引數(shù)據(jù),workDir 對外提供相應(yīng)查詢操作;Gateway 可以是本地文件系統(tǒng)、共享文件系統(tǒng)或 HDFS 等云存儲,workDir 可以是內(nèi)存、本地文件系統(tǒng)或者兩者結(jié)合;Gateway 被假設(shè)是可靠的,持久化的數(shù)據(jù)存儲,workDir 被假設(shè)是不安全的運行環(huán)境,數(shù)據(jù)允許丟失。
-
Discovery.zen
Discovery.zen 代表 es 的自動發(fā)現(xiàn)節(jié)點機制。Zen 用來實現(xiàn)節(jié)點自動發(fā)現(xiàn)和 Master 節(jié)點選舉,Master 節(jié)瞇負(fù)責(zé)處理節(jié)點的加入和退出以及分片 Shard 的重新分配。Master 不是固定不變的,當(dāng)前 Master 出故障后,其他節(jié)點自動選舉產(chǎn)生新的 Master。只有當(dāng)節(jié)點準(zhǔn)備就緒以后,該節(jié)點才會被通知可以被使用。在 config/elasticsearch.yml 中可以進行相應(yīng)參數(shù)的設(shè)置。
es 是一個基于 P2P 的系統(tǒng),它通過廣播機制尋找存在的節(jié)點,再通過多播協(xié)議來進行節(jié)點間的通信,同時也支持點對點的交互。因此,需要節(jié)點發(fā)現(xiàn)與 Master 選舉機制。
-
Transport
Transport 代表 es 內(nèi)部節(jié)點或集群與客戶端的交互方式,默認(rèn)內(nèi)部是使用 TCP 協(xié)議進行交互,同時它支持 HTTP 協(xié)議(JSON 格式)、Thrift、Servlet、Memcached、ZeroMQ 等的傳輸協(xié)議(通過插件方式集成)
-
Index、Type、Document、Field
- Index 是 es 存儲數(shù)據(jù)的地方,可以快速高效地對索引中的數(shù)據(jù)進行全文索引,類似于 RDBMS 數(shù)據(jù)中的 Database。
- Type 類似于 Database 中的 Table,用來存放具體數(shù)據(jù),在 Index 下一般會有多個存放數(shù)據(jù)的 Type。
- Document 是類似關(guān)系數(shù)據(jù)庫中的一行數(shù)據(jù),在一個 Type 里的每一個 Document 都有一個唯一的 ID 作為區(qū)分,這里與 RDBMS 不同的是,Document 不需要有固定的結(jié)構(gòu),不同文檔可以具有不同的字段集合;
- Field 類似關(guān)系數(shù)據(jù)庫的某一列,是 es 數(shù)據(jù)存儲的最小單位。
關(guān)系型數(shù)據(jù)庫 | Elasticsearch
---|---
數(shù)據(jù)庫 Database | 索引 Index,支持全文檢索
表 Table | 類型 Type
數(shù)據(jù)行 Row | 文檔 Document,但不需要固定結(jié)構(gòu),不同文檔可以具有不同字段集合
數(shù)據(jù)列 Column | 字段 Field
模型 Schema | 映像 Mapping
-
Mapping
Mapping 定義索引下 Type 的字段處理規(guī)則,如索引如何建立、索引數(shù)據(jù)類型、是否保存原始索引 JSON 文檔、是否壓縮原始 JSON 文檔、是否需要分詞處理、如何進行分詞處理等。一般地,一個索引文件下能存儲不同映像(Mapping)的類型文件(Types)。Mapping 也可通過語句刪除,此時對應(yīng)的類型文件下所有數(shù)據(jù)也會被刪除。