elasticsearch安裝與配置

唸叨了兩天,第一篇安裝教程總算來啦!。好了,廢話不多說,關於elasticsearch是什麼這裏我就不做過多介紹了,咱們直接上乾貨。

安裝

前臺運行

elasticsearch的安裝要說是非常簡單的,可以說沒有什麼安轉操作,直接下載相關文件,運行啓動命令即可,首先進入到下載頁面,選擇適合自己的版本下載,如下:

圖片描述

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

在下載頁還有安裝步驟介紹,如下:

圖片描述

由這段介紹可以看出,下載解壓後直接運行bin/elasticsearch (Windows下運行binelasticsearch.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版本上,默認的分片數量會有所變化)。

好了,今天的介紹就先到這裏。

圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章