
Elastic 的底層是開(kāi)源庫 Lucene。但是,你沒(méi)法直接用 Lucene,必須自己寫(xiě)代碼去調用它的接口。Elastic 是 Lucene 的封裝,提供了 REST API 的操作接口,開(kāi)箱即用。Elastic 的底層是開(kāi)源庫 。但是,你沒(méi)法直接用 Lucene,必須自己寫(xiě)代碼去調用它的接口。Elastic 是 Lucene 的封裝,提供了 REST API 的操作接口,開(kāi)箱即用。
代表一個(gè)集群,集群中有多個(gè)節點(diǎn),其中有一個(gè)為主節點(diǎn),這個(gè)主節點(diǎn)是可以通過(guò)選舉產(chǎn)生的,主從節點(diǎn)是對于集群內部來(lái)說(shuō)的。es的一個(gè)概念就是去中心化,字面上理解就是無(wú)中心節點(diǎn),這是對于集群外部來(lái)說(shuō)的,因為從外部來(lái)看es集群,在邏輯上是個(gè)整體,你與任何一個(gè)節點(diǎn)的通信和與整個(gè)es集群通信是等價(jià)的。
代表索引分片,es可以把一個(gè)完整的索引分成多個(gè)分片,這樣的好處是可以把一個(gè)大的索引拆分成多個(gè),分布到不同的節點(diǎn)上。構成分布式搜索。分片的數量只能在索引創(chuàng )建前指定,并且索引創(chuàng )建后不能更改。
代表索引副本,es可以設置多個(gè)索引的副本,副本的作用一是提高系統的容錯性,當某個(gè)節點(diǎn)某個(gè)分片損壞或丟失時(shí)可以從副本中恢復。二是提高es的查詢(xún)效率,es會(huì )自動(dòng)對搜索請求進(jìn)行負載均衡。
代表數據恢復或叫數據重新分布,es在有節點(diǎn)加入或退出時(shí)會(huì )根據機器的負載對索引分片進(jìn)行重新分配,掛掉的節點(diǎn)重新啟動(dòng)時(shí)也會(huì )進(jìn)行數據恢復。
代表es的一個(gè)數據源,也是其它存儲方式(如:數據庫)同步數據到es的一個(gè)方法。它是以插件方式存在的一個(gè)es服務(wù),通過(guò)讀取river中的數據并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。
代表es索引快照的存儲方式,es默認是先把索引存放到內存中,當內存滿(mǎn)了時(shí)再持久化到本地硬盤(pán)。gateway對索引快照進(jìn)行存儲,當這個(gè)es集群關(guān)閉再重新啟動(dòng)時(shí)就會(huì )從gateway中讀取索引備份數據。es支持多種類(lèi)型的gateway,有本地文件系統(默認),分布式文件系統,Hadoop的HDFS和amazon的s3云存儲服務(wù)。
代表es的自動(dòng)發(fā)現節點(diǎn)機制,es是一個(gè)基于p2p的系統,它先通過(guò)廣播尋找存在的節點(diǎn),再通過(guò)多播協(xié)議來(lái)進(jìn)行節點(diǎn)之間的通信,同時(shí)也支持點(diǎn)對點(diǎn)的交互。
代表es內部節點(diǎn)或集群與客戶(hù)端的交互方式,默認內部是使用tcp協(xié)議進(jìn)行交互,同時(shí)它支持http協(xié)議(json格式)、thrift、servlet、memcached、zeroMQ等的傳輸協(xié)議(通過(guò)插件方式集成)。
采用三臺CentOS7.3部署Elasticsearch集群,部署Elasticsearch集群就不得不提索引分片,以下是索引分片的簡(jiǎn)單介紹。
| 系統 | 節點(diǎn)名 | IP |
|---|---|---|
| CentOS7.3 | els1 | 172.18.68.11 |
| CentOS7.3 | els2 | 172.18.68.12 |
| CentOS7.3 | els3 | 172.18.68.13 |
ES集群中索引可能由多個(gè)分片構成,并且每個(gè)分片可以擁有多個(gè)副本。通過(guò)將一個(gè)單獨的索引分為多個(gè)分片,我們可以處理不能在一個(gè)單一的服務(wù)器上面運行的大型索引,簡(jiǎn)單的說(shuō)就是索引的大小過(guò)大,導致效率問(wèn)題。不能運行的原因可能是內存也可能是存儲。由于每個(gè)分片可以有多個(gè)副本,通過(guò)將副本分配到多個(gè)服務(wù)器,可以提高查詢(xún)的負載能力。
Elasticsearch是基于Java開(kāi)發(fā)是一個(gè)Java程序,運行在Jvm中,所以第一步要安裝JDK
yum install -y java-1.8.0-openjdk-develhttps://artifacts.elastic.co/downloads/elasticsearch/ 是ELasticsearch的官方站點(diǎn),如果需要下載最新的版本,進(jìn)入官網(wǎng)下載即可??梢韵螺d到本地電腦然后再導入CentOS中,也可以直接在CentOS中下載。
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.1.rpm安裝完畢后會(huì )生成很多文件,包括配置文件日志文件等等,下面幾個(gè)是最主要的配置文件路徑
/etc/elasticsearch/elasticsearch.yml # els的配置文件/etc/elasticsearch/jvm.options # JVM相關(guān)的配置,內存大小等等/etc/elasticsearch/log4j2.properties # 日志系統定義/var/lib/elasticsearch # 數據的默認存放位置數據文件會(huì )隨著(zhù)系統的運行飛速增長(cháng),所以默認的日志文件與數據文件的路徑不能滿(mǎn)足我們的需求,那么手動(dòng)創(chuàng )建日志與數據文件路徑,可以使用NFS、可以使用Raid等等方便以后的管理與擴展
mkdir /els/{log,date}chown -R elasticsearch.elasticsearch /els/*集群配置中最重要的兩項是node.name與network.host,每個(gè)節點(diǎn)都必須不通。其中node.name是節點(diǎn)名稱(chēng)主要是在Elasticsearch自己的日志加以區分每一個(gè)節點(diǎn)信息。discovery.zen.ping.unicast.hosts是集群中的節點(diǎn)信息,可以使用IP地址、可以使用主機名(必須可以解析)。
vim /etc/elasticsearchcluster.name: aubin-cluster # 集群名稱(chēng)node.name: els1 # 節點(diǎn)名稱(chēng),僅僅是描述名稱(chēng),用于在日志中區分path.data: /var/lib/elasticsearch # 數據的默認存放路徑path.logs: /var/log/elasticsearch # 日志的默認存放路徑network.host: 192.168.0.1 # 當前節點(diǎn)的IP地址http.port: 9200 # 對外提供服務(wù)的端口,9300為集群服務(wù)的端口discovery.zen.ping.unicast.hosts: ['172.18.68.11', '172.18.68.12','172.18.68.13'] # 集群個(gè)節點(diǎn)IP地址,也可以使用els、els.shuaiguoxia.com等名稱(chēng),需要各節點(diǎn)能夠解析discovery.zen.minimum_master_nodes: 2 # 為了避免腦裂,集群節點(diǎn)數最少為 半數+1由于Elasticsearch是Java開(kāi)發(fā)的,所以可以通過(guò)/etc/elasticsearch/jvm.options配置文件來(lái)設定JVM的相關(guān)設定。如果沒(méi)有特殊需求按默認即可。
不過(guò)其中還是有兩項最重要的-Xmx1g與-Xms1gJVM的最大最小內存。如果太小會(huì )導致Elasticsearch剛剛啟動(dòng)就立刻停止。太大會(huì )拖慢系統本身
vim /etc/elasticsearch/jvm.options-Xms1g # JVM最大、最小使用內存-Xmx1g由于啟動(dòng)Elasticsearch會(huì )自動(dòng)啟動(dòng)daemon-reload所以最后一項可以省略。
systemctl enable elasticsearch.servicesystemctl start elasticsearchsystemctl daemon-reload # 可以省略Elasticsearch直接聽(tīng)過(guò)了http接口,所以直接使用curl命令就可以查看到一些集群相關(guān)的信息。
可以使用curl命令來(lái)獲取集群的相關(guān)的信息,
- _cat代表查看信息
- nodes為查看節點(diǎn)信息,默認會(huì )顯示為一行,所以就用刀了?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 - els2172.18.68.13 25 67 0 0.01 0.02 0.05 mdi * els3 # *號表示為當前節點(diǎn)為主節點(diǎn)的意思172.18.68.11 7 95 0 0.02 0.04 0.05 mdi - els1如果你要想查看更多有關(guān)于集群信息、當前節點(diǎn)統計信息等等,可以使用一下命令來(lái)獲取到所有可以查看的信息。
curl -XGET 'http://172.18.68.11:9200/_cat?pretty' 聯(lián)系客服