Elasticsearch集群的概念(cluster)
在一個分布式系統里面,可以通過多個elasticsearch運行實例組成一個集群,這個集群里面有一個節點叫做主節點(master),elasticsearch是去中心化的,所以這里的主節點是動態選舉出來的,不存在單點故障。
在同一個子網內,只需要在每個節點上設置相同的集群名,elasticsearch就會自動的把這些集群名相同的節點組成一個集群。節點和節點之間通訊以及節點之間的數據分配和平衡全部由elasticsearch自動管理。
在外部看來elasticsearch就是一個整體。
Elasticsearch 節點(node)
每一個運行實例稱為一個節點,每一個運行實例既可以在同一機器上,也可以在不同的機器上。
所謂運行實例,就是一個服務器進程,在測試環境中可以在一台服務器上運行多個服務器進程,在生產環境中建議每台服務器運行一個服務器進程。
Elasticsearch索引(index)
Elasticsearch里的索引概念是名詞而不是動詞,在elasticsearch里它支持多個索引。
優點類似於關系數據庫里面每一個服務器可以支持多個數據庫是一個道理,在每一索引下面又可以支持多種類型,這又類似於關系數據庫里面的一個數據庫可以有多張表一樣。
但是本質上和關系數據庫還是有很大的區別,我們這里暫時可以這么理解。
Elasticsearch 分片(shards)
Elasticsearch 它會把一個索引分解為多個小的索引,每一個小的索引就叫做分片。
分片之后就可以把各個分片分配到不同的節點中去。
Elasticsearch副本(replicas)
Elasticsearch的每一個分片都可以有0到多個副本,而每一個副本也都是分片的完整拷貝,好處是可以用它來增加速度的同時也提高了系統的容錯性。
一旦Elasticsearch的某個節點數據損壞或則服務不可用的時候,那么這個時就可以用其他節點來代替壞掉的節點,以達到高考用的目的。
Elasticsearch 的recovery概念
Elasticsearch 的recovery代表的是數據恢復或者叫做數據重新分布。
elasticsearch 當有節點加入或退出時時它會根據機器的負載對索引分片進行重新分配,當掛掉的節點再次重新啟動的時候也會進行數據恢復。
Elasticsearch river
Elasticsearch river 代表的是一個數據源,這也是其它存儲方式(比如:數據庫)同步數據到 elasticsearch 的一個方法。
它是以插件方式存在的一個 elasticsearch 服務,通過讀取 river 中的數據並把它索引到 elasticsearch 當中去,官方的 river 有 couchDB、RabbitMQ、Twitter、Wikipedia。
Elasticsearch 的 gateway 概念
gateway 代表 elasticsearch 索引的持久化存儲方式,elasticsearch 默認是先把索引存放到內存中去,當內存滿了的時候再持久化到硬盤里。
當這個 elasticsearch 集群關閉或者再次重新啟動時就會從 gateway 中讀取索引數據。
elasticsearch 支持多種類型的 gateway,有本地文件系統(默認),分布式文件系統,Hadoop 的 HDFS 和 amazon 的 s3 雲存儲服務。
Elasticsearch的discovery.zen概念
discovery.zen代表 elasticsearch 的自動節點發現機制,而且 elasticsearch還是一個基於 p2p 的系統。
首先它它會通過以廣播的方式去尋找存在的節點,然后再通過多播協議來進行節點之間的通信,於此同時也支持點對點的交互操作。
Elasticsearch里Transport的概念
Transport代表 elasticsearch 內部的節點或者集群與客戶端之間的交互方式。
默認的內部是使用 tcp 協議來進行交互的,同時它支持 http 協議(json格式)、thrift、servlet、memcached、zeroMQ等多種的傳輸協議(通過插件方式集成)。
Elasticsearch分布式搜索引擎架構圖
說完Elasticsearch的幾個基本概念后,給大伙上一張 Elasticsearch分布式搜索引擎的總體框架圖:
ElasticSearch是基於Lucene開發的分布式搜索框架,包含如下特性:
- 分布式索引、搜索。
- 索引自動分片、負載均衡。
- 自動發現機器、組建集群。
- 支持Restful 風格接口。
- 配置簡單等。