Elastic 的底層是開源庫 Lucene。可是,你無法直接用 Lucene,必須本身寫代碼去調用它的接口。Elastic 是 Lucene 的封裝,提供了 REST API 的操做接口,開箱即用。Elastic 的底層是開源庫 。可是,你無法直接用 Lucene,必須本身寫代碼去調用它的接口。Elastic 是 Lucene 的封裝,提供了 REST API 的操做接口,開箱即用。java
表明一個集羣,集羣中有多個節點,其中有一個爲主節點,這個主節點是能夠經過選舉產生的,主從節點是對於集羣內部來講的。es的一個概念就是去中心化,字面上理解就是無中心節點,這是對於集羣外部來講的,由於從外部來看es集羣,在邏輯上是個總體,你與任何一個節點的通訊和與整個es集羣通訊是等價的。node
表明索引分片,es能夠把一個完整的索引分紅多個分片,這樣的好處是能夠把一個大的索引拆分紅多個,分佈到不一樣的節點上。構成分佈式搜索。分片的數量只能在索引建立前指定,而且索引建立後不能更改。數據庫
表明索引副本,es能夠設置多個索引的副本,副本的做用一是提升系統的容錯性,當某個節點某個分片損壞或丟失時能夠從副本中恢復。二是提升es的查詢效率,es會自動對搜索請求進行負載均衡。json
表明數據恢復或叫數據從新分佈,es在有節點加入或退出時會根據機器的負載對索引分片進行從新分配,掛掉的節點從新啓動時也會進行數據恢復。vim
表明es的一個數據源,也是其它存儲方式(如:數據庫)同步數據到es的一個方法。它是以插件方式存在的一個es服務,經過讀取river中的數據並把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。服務器
表明es索引快照的存儲方式,es默認是先把索引存放到內存中,當內存滿了時再持久化到本地硬盤。gateway對索引快照進行存儲,當這個es集羣關閉再從新啓動時就會從gateway中讀取索引備份數據。es支持多種類型的gateway,有本地文件系統(默認),分佈式文件系統,Hadoop的HDFS和amazon的s3雲存儲服務。負載均衡
表明es的自動發現節點機制,es是一個基於p2p的系統,它先經過廣播尋找存在的節點,再經過多播協議來進行節點之間的通訊,同時也支持點對點的交互。curl
表明es內部節點或集羣與客戶端的交互方式,默認內部是使用tcp協議進行交互,同時它支持http協議(json格式)、thrift、servlet、memcached、zeroMQ等的傳輸協議(經過插件方式集成)。jvm
採用三臺CentOS7.3部署Elasticsearch集羣,部署Elasticsearch集羣就不得不提索引分片,如下是索引分片的簡單介紹。elasticsearch
系統 | 節點名 | IP |
---|---|---|
CentOS7.3 | els1 | 172.18.68.11 |
CentOS7.3 | els2 | 172.18.68.12 |
CentOS7.3 | els3 | 172.18.68.13 |
ES集羣中索引可能由多個分片構成,而且每一個分片能夠擁有多個副本。經過將一個單獨的索引分爲多個分片,咱們能夠處理不能在一個單一的服務器上面運行的大型索引,簡單的說就是索引的大小過大,致使效率問題。不能運行的緣由多是內存也多是存儲。因爲每一個分片能夠有多個副本,經過將副本分配到多個服務器,能夠提升查詢的負載能力。
Elasticsearch是基於Java開發是一個Java程序,運行在Jvm中,因此第一步要安裝JDK
yum install -y java-1.8.0-openjdk-devel
https://artifacts.elastic.co/downloads/elasticsearch/ 是ELasticsearch的官方站點,若是須要下載最新的版本,進入官網下載便可。能夠下載到本地電腦而後再導入CentOS中,也能夠直接在CentOS中下載。
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.1.rpm
安裝完畢後會生成不少文件,包括配置文件日誌文件等等,下面幾個是最主要的配置文件路徑
/etc/elasticsearch/elasticsearch.yml # els的配置文件 /etc/elasticsearch/jvm.options # JVM相關的配置,內存大小等等 /etc/elasticsearch/log4j2.properties # 日誌系統定義 /var/lib/elasticsearch # 數據的默認存放位置
數據文件會隨着系統的運行飛速增加,因此默認的日誌文件與數據文件的路徑不能知足咱們的需求,那麼手動建立日誌與數據文件路徑,可使用NFS、可使用Raid等等方便之後的管理與擴展
mkdir /els/{log,date} chown -R elasticsearch.elasticsearch /els/*
集羣配置中最重要的兩項是node.name
與network.host
,每一個節點都必須不通。其中node.name
是節點名稱主要是在Elasticsearch本身的日誌加以區分每個節點信息。
discovery.zen.ping.unicast.hosts
是集羣中的節點信息,可使用IP地址、可使用主機名(必須能夠解析)。
vim /etc/elasticsearch cluster.name: aubin-cluster # 集羣名稱 node.name: els1 # 節點名稱,僅僅是描述名稱,用於在日誌中區分 path.data: /var/lib/elasticsearch # 數據的默認存放路徑 path.logs: /var/log/elasticsearch # 日誌的默認存放路徑 network.host: 192.168.0.1 # 當前節點的IP地址 http.port: 9200 # 對外提供服務的端口,9300爲集羣服務的端口 discovery.zen.ping.unicast.hosts: ["172.18.68.11", "172.18.68.12","172.18.68.13"] # 集羣個節點IP地址,也可使用els、els.shuaiguoxia.com等名稱,須要各節點可以解析 discovery.zen.minimum_master_nodes: 2 # 爲了不腦裂,集羣節點數最少爲 半數+1
因爲Elasticsearch是Java開發的,因此能夠經過/etc/elasticsearch/jvm.options
配置文件來設定JVM的相關設定。若是沒有特殊需求按默認便可。
不過其中仍是有兩項最重要的-Xmx1g
與-Xms1g
JVM的最大最小內存。若是過小會致使Elasticsearch剛剛啓動就馬上中止。太大會拖慢系統自己
vim /etc/elasticsearch/jvm.options -Xms1g # JVM最大、最小使用內存 -Xmx1g
因爲啓動Elasticsearch會自動啓動daemon-reload因此最後一項能夠省略。
systemctl enable elasticsearch.service systemctl start elasticsearch systemctl daemon-reload # 能夠省略
Elasticsearch直接聽過了http接口,因此直接使用curl命令就能夠查看到一些集羣相關的信息。
可使用curl命令來獲取集羣的相關的信息,
- _cat表明查看信息
- nodes爲查看節點信息,默認會顯示爲一行,因此就用刀了?preety讓信息更有好的顯示
- ?preety讓輸出信息更友好的顯示
curl -XGET 'http://172.18.68.11:9200/_cat/nodes?pretty' 172.18.68.12 18 68 0 0.07 0.06 0.05 mdi - els2 172.18.68.13 25 67 0 0.01 0.02 0.05 mdi * els3 # *號表示爲當前節點爲主節點的意思 172.18.68.11 7 95 0 0.02 0.04 0.05 mdi - els1
若是你要想查看更多有關於集羣信息、當前節點統計信息等等,可使用一下命令來獲取到全部能夠查看的信息。
curl -XGET 'http://172.18.68.11:9200/_cat?pretty'