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

有針對Windows的壓縮包zip,也有msi這種安裝引導程序,有針對mac和linux的deb以及rpm,讀者根據自己的操作系統選擇合適的壓縮包下載即可。
在下載頁還有安裝步驟介紹,如下:

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

可以看到,啟動后,默認的節點名稱為Huf6FQ-,默認的集群名稱為elasticsearch,當然,也可以在啟動命令中自定義節點名稱和集群名稱,如下:
代碼語言:Javascript代碼運行次數:0運行復制
./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1
執行結果如下:

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

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

配置安裝目錄介紹
elasticsearch下載之后,解壓后,可以看到目錄結構如下:

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