Elastic 的底層是開源庫 Lucene。但是沪铭,你沒法直接用 Lucene壮池,必須自己寫代碼去調用它的接口。Elastic 是 Lucene 的封裝杀怠,提供了 REST API 的操作接口椰憋,開箱即用。Elastic 的底層是開源庫 赔退。但是橙依,你沒法直接用 Lucene,必須自己寫代碼去調用它的接口硕旗。Elastic 是 Lucene 的封裝窗骑,提供了 REST API 的操作接口,開箱即用漆枚。
一创译、ES中的基本概念
cluster
代表一個集群,集群中有多個節(jié)點墙基,其中有一個為主節(jié)點软族,這個主節(jié)點是可以通過選舉產生的,主從節(jié)點是對于集群內部來說的碘橘。es的一個概念就是去中心化互订,字面上理解就是無中心節(jié)點,這是對于集群外部來說的痘拆,因為從外部來看es集群仰禽,在邏輯上是個整體,你與任何一個節(jié)點的通信和與整個es集群通信是等價的。
shards
代表索引分片吐葵,es可以把一個完整的索引分成多個分片规揪,這樣的好處是可以把一個大的索引拆分成多個,分布到不同的節(jié)點上温峭。構成分布式搜索猛铅。分片的數量只能在索引創(chuàng)建前指定凤藏,并且索引創(chuàng)建后不能更改奸忽。
replicas
代表索引副本,es可以設置多個索引的副本揖庄,副本的作用一是提高系統的容錯性栗菜,當某個節(jié)點某個分片損壞或丟失時可以從副本中恢復。二是提高es的查詢效率蹄梢,es會自動對搜索請求進行負載均衡疙筹。
recovery
代表數據恢復或叫數據重新分布,es在有節(jié)點加入或退出時會根據機器的負載對索引分片進行重新分配禁炒,掛掉的節(jié)點重新啟動時也會進行數據恢復而咆。
river
代表es的一個數據源,也是其它存儲方式(如:數據庫)同步數據到es的一個方法幕袱。它是以插件方式存在的一個es服務暴备,通過讀取river中的數據并把它索引到es中,官方的river有couchDB的凹蜂,RabbitMQ的馍驯,Twitter的,Wikipedia的玛痊。
gateway
代表es索引快照的存儲方式汰瘫,es默認是先把索引存放到內存中,當內存滿了時再持久化到本地硬盤擂煞。gateway對索引快照進行存儲混弥,當這個es集群關閉再重新啟動時就會從gateway中讀取索引備份數據。es支持多種類型的gateway对省,有本地文件系統(默認)蝗拿,分布式文件系統,Hadoop的HDFS和amazon的s3云存儲服務蒿涎。
discovery.zen
代表es的自動發(fā)現節(jié)點機制哀托,es是一個基于p2p的系統,它先通過廣播尋找存在的節(jié)點劳秋,再通過多播協議來進行節(jié)點之間的通信仓手,同時也支持點對點的交互胖齐。
Transport
代表es內部節(jié)點或集群與客戶端的交互方式,默認內部是使用tcp協議進行交互嗽冒,同時它支持http協議(json格式)呀伙、thrift、servlet添坊、memcached剿另、zeroMQ等的傳輸協議(通過插件方式集成)。
二贬蛙、部署環(huán)境
采用三臺CentOS7.3部署Elasticsearch集群雨女,部署Elasticsearch集群就不得不提索引分片,以下是索引分片的簡單介紹速客。
ES集群中索引可能由多個分片構成戚篙,并且每個分片可以擁有多個副本五鲫。通過將一個單獨的索引分為多個分片溺职,我們可以處理不能在一個單一的服務器上面運行的大型索引,簡單的說就是索引的大小過大位喂,導致效率問題浪耘。不能運行的原因可能是內存也可能是存儲。由于每個分片可以有多個副本塑崖,通過將副本分配到多個服務器七冲,可以提高查詢的負載能力。
三规婆、部署Elasticsearch集群
1.安裝JDK
Elasticsearch是基于Java開發(fā)是一個Java程序澜躺,運行在Jvm中,所以第一步要安裝JDK
yum install -y java-1.8.0-openjdk-devel
2.下載elasticsearch
https://artifacts.elastic.co/downloads/elasticsearch/是ELasticsearch的官方站點抒蚜,如果需要下載最新的版本掘鄙,進入官網下載即可∥怂瑁可以下載到本地電腦然后再導入CentOS中操漠,也可以直接在CentOS中下載。
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.1.rpm
3.配置目錄
安裝完畢后會生成很多文件饿这,包括配置文件日志文件等等浊伙,下面幾個是最主要的配置文件路徑
/etc/elasticsearch/elasticsearch.yml # els的配置文件
/etc/elasticsearch/jvm.options # JVM相關的配置,內存大小等等
/etc/elasticsearch/log4j2.properties # 日志系統定義
/var/lib/elasticsearch # 數據的默認存放位置
4.創(chuàng)建用于存放數據與日志的目錄
數據文件會隨著系統的運行飛速增長长捧,所以默認的日志文件與數據文件的路徑不能滿足我們的需求嚣鄙,那么手動創(chuàng)建日志與數據文件路徑,可以使用NFS串结、可以使用Raid等等方便以后的管理與擴展
mkdir /els/{log,date}
chown -R elasticsearch.elasticsearch /els/*
5.集群配置
集群配置中最重要的兩項是node.name
與network.host
哑子,每個節(jié)點都必須不通廓八。其中node.name
是節(jié)點名稱主要是在Elasticsearch自己的日志加以區(qū)分每一個節(jié)點信息。
discovery.zen.ping.unicast.hosts
是集群中的節(jié)點信息赵抢,可以使用IP地址剧蹂、可以使用主機名(必須可以解析)。
vim /etc/elasticsearch
cluster.name: aubin-cluster # 集群名稱
node.name: els1 # 節(jié)點名稱烦却,僅僅是描述名稱宠叼,用于在日志中區(qū)分
path.data: /var/lib/elasticsearch # 數據的默認存放路徑
path.logs: /var/log/elasticsearch # 日志的默認存放路徑
network.host: 192.168.0.1 # 當前節(jié)點的IP地址
http.port: 9200 # 對外提供服務的端口,9300為集群服務的端口
discovery.zen.ping.unicast.hosts: ["172.18.68.11", "172.18.68.12","172.18.68.13"]
# 集群個節(jié)點IP地址其爵,也可以使用els冒冬、els.shuaiguoxia.com等名稱,需要各節(jié)點能夠解析
discovery.zen.minimum_master_nodes: 2 # 為了避免腦裂摩渺,集群節(jié)點數最少為 半數+1
6.JVM配置
由于Elasticsearch是Java開發(fā)的简烤,所以可以通過/etc/elasticsearch/jvm.options
配置文件來設定JVM的相關設定。如果沒有特殊需求按默認即可摇幻。
不過其中還是有兩項最重要的-Xmx1g
與-Xms1g
JVM的最大最小內存横侦。如果太小會導致Elasticsearch剛剛啟動就立刻停止。太大會拖慢系統本身
vim /etc/elasticsearch/jvm.options
-Xms1g # JVM最大绰姻、最小使用內存
-Xmx1g
7.啟動Elasticsearch
由于啟動Elasticsearch會自動啟動daemon-reload所以最后一項可以省略枉侧。
systemctl enable elasticsearch.service
systemctl start elasticsearch
systemctl daemon-reload # 可以省略
8.測試
Elasticsearch直接聽過了http接口,所以直接使用curl命令就可以查看到一些集群相關的信息狂芋。
可以使用curl命令來獲取集群的相關的信息榨馁,
- _cat代表查看信息
- nodes為查看節(jié)點信息,默認會顯示為一行帜矾,所以就用刀了?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 # *號表示為當前節(jié)點為主節(jié)點的意思
172.18.68.11 7 95 0 0.02 0.04 0.05 mdi - els1
如果你要想查看更多有關于集群信息翼虫、當前節(jié)點統計信息等等,可以使用一下命令來獲取到所有可以查看的信息屡萤。
curl -XGET 'http://172.18.68.11:9200/_cat?pretty'