elasticsearch安裝與配置
唸叨了兩天,第一篇安裝教程總算來啦!。好了,廢話不多說,關於elasticsearch是什麼這裡我就不做過多介紹了,咱們直接上乾貨。
安裝
前臺執行
elasticsearch的安裝要說是非常簡單的,可以說沒有什麼安轉操作,直接下載相關檔案,執行啟動命令即可,首先進入到下載頁面,選擇適合自己的版本下載,如下:
有針對Windows的壓縮包zip,也有msi這種安裝載入程式,有針對mac和linux的deb以及rpm,讀者根據自己的作業系統選擇合適的壓縮包下載即可。
在下載頁還有安裝步驟介紹,如下:
由這段介紹可以看出,下載解壓後直接執行bin/elasticsearch (Windows下執行bin\elasticsearch.bat)即可。執行成功後,在瀏覽器中訪問http://localhost:9200,檢視是否啟動成功,啟動成功結果如下:
可以看到,啟動後,預設的節點名稱為Huf6FQ-,預設的叢集名稱為elasticsearch,當然,也可以在啟動命令中自定義節點名稱和叢集名稱,如下:
./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1
執行結果如下:
小貼士:
elasticsearch的執行基於Java,因此,電腦上需要安裝Java環境,推薦Java版本為1.8.0_131及以上。
後臺執行
剛剛的啟動方式是前臺執行,使用者按下Ctrl+C,執行就停止了,這種執行方式適合測試和開發環境,生產環境,直接在後臺執行即可,啟動命令如下:
./elasticsearch -d
如此,使elasticsearch在後臺執行,在後臺執行的elasticsearch可以使用jdk自帶的檢視當前Java程序的工具jps命令檢視執行狀況,如下:
當然也可以直接使用Linux中的命令檢視,如下:
ps aux|grep elasticsearch
不管哪一種檢視方式,檢視後都可以獲取到elasticsearch的程序id,然後通過kill命令可以關閉elasticsearch,如下:
kill 8423
操作結果如下:
配置
安裝目錄介紹
elasticsearch下載之後,解壓後,可以看到目錄結構如下:
目錄含義如下:
檔案/資料夾 | 作用 |
---|---|
bin | 可執行檔案存放目錄,例如啟動檔案 |
config | 配置檔案存放目錄 |
data | 資料儲存目錄 |
lib | 第三方依賴庫 |
logs | 執行日誌輸出目錄 |
modules | 依賴模組目錄 |
plugins | 外掛目錄 |
LICENSE.txt | LICENSE宣告檔案 |
NOTICE.txt | 版權宣告檔案 |
README.textile | 框架介紹資訊 |
配置介紹
在config目錄下,主要有如下配置檔案:
- elasticsearch.keystore
- jvm.options
- role_mapping.yml
- users
- elasticsearch.yml
- log4j2.properties
- roles.yml
- users_roles
其中,我們經常涉及到的有三個,elasticsearch.yml、log4j2.properties以及jvm.options,其中,elasticsearch.yml是elasticsearch的基本配置檔案,log4j2是日誌輸出配置檔案,jvm則是jvm基本引數配置。這裡主要來看看elasticsearch.yml配置檔案,如下:
# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
# Before you set out to tweak and tune the configuration, make sure you
# understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- 叢集配置 -----------------------------------
#
# Use a descriptive name for your cluster:
#配置叢集名字,叢集名字預設為elasticsearch,
#elasticsearch會自動發現在同一網段下的elasticsearch節點。
#讀者在第一次啟動elasticsearch時,在瀏覽器中輸入http://localhost:9200,
#在返回的資料中,就有叢集名字,預設即為elasticsearch。
#cluster.name: my-application
#
# ------------------------------------ 節點配置 ------------------------------------
#
# Use a descriptive name for the node:
#配置節點名稱
#node.name: node-1
#
# Add custom attributes to the node:
#給節點新增自定義屬性
#node.attr.rack: r1
#
# ----------------------------------- 路徑配置 ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#資料存放目錄,預設是elasticsearch下的data目錄,可以指定多個目錄,用,隔開,如:
#path.data:/path/data1,/path/data2
#path.data: /path/to/data
#
# Path to log files:
#日誌存放目錄,預設為elasticsearch下的logs目錄
#path.logs: /path/to/logs
#
# ----------------------------------- 記憶體配置 -----------------------------------
#
# Lock the memory on startup:
#配置是否鎖住記憶體。當jvm開始swapping時,elasticsearch的效率降低,為了避免這種情況,可以設定為true。
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- 網路配置 -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#設定繫結的ip地址
#network.host: 192.168.0.1
#
# Set a custom port for HTTP:
#配置對外提供服務的http埠號
#http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- 叢集節點發現引數 ----------------------------------
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#設定叢集中master節點的初始列表,通過這個配置可以發現新加入的叢集的節點。
#discovery.zen.ping.unicast.hosts: ["host1", "host2"]
#
# Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1):
#保證叢集中的節點可以知道其他n個有master資格的節點,防止出現split brain,預設為1
#discovery.zen.minimum_master_nodes:
#
# For more information, consult the zen discovery module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#當n個節點啟動後,再開始叢集的恢復
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
當然這裡只是最基本的配置,更多配置讀者可以參考官方文件。
核心概念
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版本上,預設的分片數量會有所變化)。
好了,今天的介紹就先到這裡。