念叨了兩天,第一篇安裝教程總算來啦!。好了,廢話不多說,關(guān)于elasticsearch是什么這里我就不做過多介紹了,咱們直接上干貨。
安裝前臺(tái)運(yùn)行
elasticsearch的安裝要說是非常簡(jiǎn)單的,可以說沒有什么安轉(zhuǎn)操作,直接下載相關(guān)文件,運(yùn)行啟動(dòng)命令即可,首先進(jìn)入到下載頁(yè)面,選擇適合自己的版本下載,如下:

有針對(duì)Windows的壓縮包zip,也有msi這種安裝引導(dǎo)程序,有針對(duì)mac和linux的deb以及rpm,讀者根據(jù)自己的操作系統(tǒng)選擇合適的壓縮包下載即可。
在下載頁(yè)還有安裝步驟介紹,如下:

由這段介紹可以看出,下載解壓后直接運(yùn)行bin/elasticsearch (Windows下運(yùn)行binelasticsearch.bat)即可。運(yùn)行成功后,在瀏覽器中訪問http://localhost:9200,查看是否啟動(dòng)成功,啟動(dòng)成功結(jié)果如下:

可以看到,啟動(dòng)后,默認(rèn)的節(jié)點(diǎn)名稱為Huf6FQ-,默認(rèn)的集群名稱為elasticsearch,當(dāng)然,也可以在啟動(dòng)命令中自定義節(jié)點(diǎn)名稱和集群名稱,如下:
代碼語言:Javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1
執(zhí)行結(jié)果如下:

小貼士:
后臺(tái)運(yùn)行
剛剛的啟動(dòng)方式是前臺(tái)運(yùn)行,用戶按下Ctrl+C,運(yùn)行就停止了,這種運(yùn)行方式適合測(cè)試和開發(fā)環(huán)境,生產(chǎn)環(huán)境,直接在后臺(tái)運(yùn)行即可,啟動(dòng)命令如下:
代碼語言:JavaScript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
./elasticsearch -d
如此,使elasticsearch在后臺(tái)運(yùn)行,在后臺(tái)運(yùn)行的elasticsearch可以使用jdk自帶的查看當(dāng)前Java進(jìn)程的工具jps命令查看運(yùn)行狀況,如下:

當(dāng)然也可以直接使用Linux中的命令查看,如下:
代碼語言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
ps aux|grep elasticsearch
不管哪一種查看方式,查看后都可以獲取到elasticsearch的進(jìn)程id,然后通過kill命令可以關(guān)閉elasticsearch,如下:
代碼語言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
kill 8423
操作結(jié)果如下:

配置安裝目錄介紹
elasticsearch下載之后,解壓后,可以看到目錄結(jié)構(gòu)如下:

目錄含義如下:
文件/文件夾
作用
bin
可執(zhí)行文件存放目錄,例如啟動(dòng)文件
config
配置文件存放目錄
data
數(shù)據(jù)存儲(chǔ)目錄
lib
第三方依賴庫(kù)
logs
運(yùn)行日志輸出目錄
modules
依賴模塊目錄
plugins
插件目錄
LICENSE.txt
LICENSE聲明文件
NOTICE.txt
版權(quán)聲明文件
README.textile
框架介紹信息
配置介紹
在config目錄下,主要有如下配置文件:
elasticsearch.keystorejvm.optionsrole_mapping.ymluserselasticsearch.ymllog4j2.propertiesroles.ymlusers_roles
其中,我們經(jīng)常涉及到的有三個(gè),elasticsearch.yml、log4j2.properties以及jvm.options,其中,elasticsearch.yml是elasticsearch的基本配置文件,log4j2是日志輸出配置文件,jvm則是jvm基本參數(shù)配置。這里主要來看看elasticsearch.yml配置文件,如下:
代碼語言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
# 集群配置#配置集群名字,集群名字默認(rèn)為elasticsearch,#elasticsearch會(huì)自動(dòng)發(fā)現(xiàn)在同一網(wǎng)段下的elasticsearch節(jié)點(diǎn)。#讀者在第一次啟動(dòng)elasticsearch時(shí),在瀏覽器中輸入http://localhost:9200,#在返回的數(shù)據(jù)中,就有集群名字,默認(rèn)即為elasticsearch。#cluster.name: my-application# 節(jié)點(diǎn)配置#配置節(jié)點(diǎn)名稱#node.name: node-1#給節(jié)點(diǎn)添加自定義屬性#node.attr.rack: r1# 路徑配置#數(shù)據(jù)存放目錄,默認(rèn)是elasticsearch下的data目錄,可以指定多個(gè)目錄,用,隔開,如:#path.data:/path/data1,/path/data2#path.data: /path/to/data#日志存放目錄,默認(rèn)為elasticsearch下的logs目錄#path.logs: /path/to/logs# 內(nèi)存配置#配置是否鎖住內(nèi)存。當(dāng)jvm開始swapping時(shí),elasticsearch的效率降低,為了避免這種情況,可以設(shè)置為true。#bootstrap.memory_lock: true# 網(wǎng)絡(luò)配置#設(shè)置綁定的ip地址#network.host: 192.168.0.1#配置對(duì)外提供服務(wù)的http端口號(hào)#http.port: 9200# 集群節(jié)點(diǎn)發(fā)現(xiàn)參數(shù)#設(shè)置集群中master節(jié)點(diǎn)的初始列表,通過這個(gè)配置可以發(fā)現(xiàn)新加入的集群的節(jié)點(diǎn)。 #discovery.zen.ping.unicast.hosts: ["host1", "host2"]#保證集群中的節(jié)點(diǎn)可以知道其他n個(gè)有master資格的節(jié)點(diǎn),防止出現(xiàn)split brain,默認(rèn)為1#discovery.zen.minimum_master_nodes: # Gateway#當(dāng)n個(gè)節(jié)點(diǎn)啟動(dòng)后,再開始集群的恢復(fù)#gateway.recover_after_nodes: 3
當(dāng)然這里只是最基本的配置,更多配置讀者可以參考官方文檔。
核心概念
Elasticsearch安裝成功后,在正式啟動(dòng)之前,還需要讀者了解Elasticsearch中幾個(gè)核心概念,掌握這些核心概念,有助于讀者更好的理解Elasticsearch。
NRT
Elasticsearch是一個(gè)接近實(shí)時(shí)(near real time)的搜索平臺(tái),也就是說,從你建立索引,到這個(gè)索引可以被搜索只需要很小的延遲,通常是1秒。
cluster
一個(gè)集群就是由一個(gè)或多個(gè)節(jié)點(diǎn)組織在一起, 這些節(jié)點(diǎn)共同持有全部的索引數(shù)據(jù), 并共同提供索引和搜索功能。 一個(gè)集群由一個(gè)唯一的名字標(biāo)識(shí)(默認(rèn)就是“elasticsearch”,在上文啟動(dòng)過程中,也像讀者展示了如何自定義集群名稱)。 這個(gè)名字很重要, 因?yàn)橐粋€(gè)節(jié)點(diǎn)只能通過指定某個(gè)集群的名字,來加入這個(gè)集群。在生產(chǎn)環(huán)境中顯式地設(shè)定這個(gè)名字是一個(gè)好習(xí)慣,但是使用默認(rèn)值來進(jìn)行測(cè)試/開發(fā)也是不錯(cuò)的。開發(fā)者需要確認(rèn)不要使用相同的集群名字,以避免節(jié)點(diǎn)加入到錯(cuò)誤的集群。需要注意的是,一個(gè)集群中只包含一個(gè)節(jié)點(diǎn)是合法的。另外,你也可以擁有多個(gè)集群,集群以名字區(qū)分。
node
一個(gè)節(jié)點(diǎn)就是集群中的一個(gè)服務(wù),作為集群的一部分,它可以用來存儲(chǔ)數(shù)據(jù),參與集群的索引和搜索功能。和集群類似,一個(gè)節(jié)點(diǎn)也是由一個(gè)名字來標(biāo)識(shí)的,默認(rèn)情況下,這個(gè)名字是一個(gè)隨機(jī)的Universally Unique IDentifier (UUID),這個(gè)名字會(huì)在節(jié)點(diǎn)啟動(dòng)時(shí)分配給節(jié)點(diǎn)。這個(gè)名字對(duì)于節(jié)點(diǎn)管理工作來說很重要,因?yàn)殚_發(fā)者需要確定網(wǎng)絡(luò)中的哪些服務(wù)對(duì)應(yīng)于Elasticsearch集群中的哪些節(jié)點(diǎn)。一個(gè)節(jié)點(diǎn)可以通過配置集群名稱的方式來加入一個(gè)指定的集群。 默認(rèn)情況下,每個(gè)節(jié)點(diǎn)都會(huì)被加入到一個(gè)叫做“elasticsearch”的集群中,這意味著,如果開發(fā)者啟動(dòng)了多個(gè)節(jié)點(diǎn), 并且這些節(jié)點(diǎn)能夠相互發(fā)現(xiàn)彼此,那么這些節(jié)點(diǎn)會(huì)自動(dòng)加入到一個(gè)叫做“elasticsearch”的集群中。在一個(gè)集群里可以擁有任意多個(gè)節(jié)點(diǎn)。而且,如果當(dāng)前網(wǎng)絡(luò)中沒有運(yùn)行任何節(jié)點(diǎn),這時(shí)啟動(dòng)一個(gè)節(jié)點(diǎn),會(huì)默認(rèn)創(chuàng)建并加入一個(gè)叫做“elasticsearch”的單節(jié)點(diǎn)集群。
index
一個(gè)索引就是一個(gè)擁有相似特征的文檔的集合。例如,客戶數(shù)據(jù)可以建立一個(gè)索引,產(chǎn)品目錄可以建立一個(gè)索引,訂單數(shù)據(jù)可以建立一個(gè)索引。一個(gè)索引由一個(gè)名字來標(biāo)識(shí)(必須全部是小寫字母的),并且當(dāng)我們要對(duì)這個(gè)索引中的文檔進(jìn)行索引、搜索、更新和刪除的時(shí)候,都要使用到這個(gè)名字。在一個(gè)集群中,可以創(chuàng)建任意多個(gè)索引。
type
在一個(gè)索引中,你可以定義一種或多種類型。一個(gè)類型是你的索引的一個(gè)邏輯上的分類/分區(qū),其語義完全由你來定。通常,會(huì)為具有一組相同字段的文檔定義一個(gè)類型。比如說,我們假設(shè)你運(yùn)營(yíng)一個(gè)博客平臺(tái) 并且將你所有的數(shù)據(jù)存儲(chǔ)到一個(gè)索引中。在這個(gè)索引中,你可以為用戶數(shù)據(jù)定義一個(gè)類型,為博客數(shù)據(jù)定義另一個(gè)類型,當(dāng)然,也可以為評(píng)論數(shù)據(jù)定義另一個(gè)類型。注意:這是一個(gè)即將過期的概念,在Elasticsearch 6.0.0或更高版本中創(chuàng)建的索引只包含單個(gè)映射類型(type)。在具有多種映射類型的5.x中創(chuàng)建的索引將繼續(xù)像以前一樣在Elasticsearch 6.x中運(yùn)行。映射類型將在Elasticsearch7.0.0中完全刪除。許多人喜歡將index比喻為關(guān)系型數(shù)據(jù)庫(kù)中的database,將type比喻為關(guān)系型數(shù)據(jù)庫(kù)中的table,實(shí)際上這個(gè)比喻非常不貼切。因?yàn)樵陉P(guān)系型數(shù)據(jù)庫(kù)中,表中的字段都是獨(dú)立的,但是在Elasticsearch中,在不同的type中,如果filed具有相同的名字,則這些不同的filed實(shí)際上是由相同的lucene Filed提供支持的,因此這種比喻并不恰當(dāng);另一方面,在同一索引中存儲(chǔ)具有很少或沒有共同字段的不同實(shí)體會(huì)干擾Lucene有效壓縮文檔的能力。
document
一個(gè)文檔是一個(gè)可被索引的基礎(chǔ)信息單元。例如,某一個(gè)客戶的文檔、某一個(gè)產(chǎn)品的一個(gè)文檔、某個(gè)訂單的一個(gè)文檔。文檔以json格式來表示。在一個(gè)index/type里面,可以存儲(chǔ)任意多的文檔。
shards and replicas
一個(gè)索引可以存儲(chǔ)超出單個(gè)節(jié)點(diǎn)硬件限制的大量數(shù)據(jù)。例如,一個(gè)具有10億文檔的索引占據(jù)1TB的磁盤空間,而任一節(jié)點(diǎn)可能沒有這樣大的磁盤空間來存儲(chǔ)或者單個(gè)節(jié)點(diǎn)處理搜索請(qǐng)求,響應(yīng)會(huì)太慢。為了解決這個(gè)問題,Elasticsearch提供了將索引劃分成多片的能力,這些片叫做分片。當(dāng)用戶創(chuàng)建一個(gè)索引的時(shí)候,可以指定分片的數(shù)量(默為5,但是在7.0版本中默認(rèn)會(huì)變?yōu)?)。每個(gè)分片本身也是一個(gè)功能完善并且獨(dú)立的“索引”,這個(gè)“索引” 可以被放置到集群中的任何節(jié)點(diǎn)上。
分片之所以重要,主要有兩方面的原因:
允許水平分割/擴(kuò)展內(nèi)容容量允許在分片(位于多個(gè)節(jié)點(diǎn)上)之上進(jìn)行分布式的、并行的操作,進(jìn)而提高性能/吞吐量
至于一個(gè)分片怎樣分布,它的文檔怎樣聚合回搜索請(qǐng)求,是完全由Elasticsearch管理的,對(duì)于用戶來說,這些都是透明的。在一個(gè)網(wǎng)絡(luò)/云的環(huán)境里,失敗隨時(shí)都可能發(fā)生。在某個(gè)分片/節(jié)點(diǎn)因?yàn)槟承┰蛱幱陔x線狀態(tài)或者消失的情況下,故障轉(zhuǎn)移機(jī)制是非常有用且強(qiáng)烈推薦的。為此, Elasticsearch允許創(chuàng)建分片的一份或多份拷貝,這些拷貝叫做復(fù)制分片,或者直接叫復(fù)制。
復(fù)制之所以重要,有兩個(gè)主要原因:
在分片/節(jié)點(diǎn)失敗的情況下,復(fù)制提供了高可用性。復(fù)制分片不與原/主要分片置于同一節(jié)點(diǎn)上是非常重要的。因?yàn)樗阉骺梢栽谒械膹?fù)制上并行運(yùn)行,復(fù)制可以擴(kuò)展你的搜索量/吞吐量
總之,每個(gè)索引可以被分成多個(gè)分片,一個(gè)索引也可以被復(fù)制0次或多次。一旦復(fù)制了,每個(gè)索引就有了主分片和復(fù)制分片。分片和復(fù)制的數(shù)量可以在索引創(chuàng)建的時(shí)候指定。在索引創(chuàng)建之后,可以在任何時(shí)候動(dòng)態(tài)地改變復(fù)制的數(shù)量,但是不能再改變分片的數(shù)量。在Elasticsearch7.0版本之前,默認(rèn)情況下,Elasticsearch中的每個(gè)索引分配5個(gè)主分片和1個(gè)復(fù)制。這意味著,如果你的集群中至少有兩個(gè)節(jié)點(diǎn),你的索引將會(huì)有5個(gè)主分片和另外5個(gè)復(fù)制分片(1個(gè)完全拷貝),這樣每個(gè)索引總共就有10個(gè)分片(根據(jù)官方文檔,在7.0版本上,默認(rèn)的分片數(shù)量會(huì)有所變化)。
好了,今天的介紹就先到這里。