1. 程式人生 > >Elasticsearch系列教程(一):安裝

Elasticsearch系列教程(一):安裝

Elasticsearch簡介

Elasticsearch是一個高度可擴充套件的開源全文搜尋和分析引擎。它允許您快速,近實時地儲存,搜尋和分析大量資料。它通常用作底層引擎/技術,為具有複雜搜尋功能和要求的應用程式提供支援。

Elasticsearch可用於以下場景:

  • 您執行線上網上商店,允許您的客戶搜尋您銷售的產品。在這種情況下,您可以使用Elasticsearch儲存整個產品目錄和庫存,併為它們提供搜尋和自動填充建議。
  • 您希望收集日誌或交易資料,並且希望分析和挖掘此資料以查詢趨勢,統計資訊,摘要或異常。在這種情況下,您可以使用Logstash(Elasticsearch / Logstash / Kibana堆疊的一部分)來收集,聚合和解析資料,然後讓Logstash將此資料提供給Elasticsearch。一旦資料在Elasticsearch中,您就可以執行搜尋和聚合來挖掘您感興趣的任何資訊。
  • 您執行價格警報平臺,允許精通價格的客戶指定一條規則,例如“我有興趣購買特定的電子產品,如果小工具的價格在下個月內從任何供應商降至X美元以下,我希望收到通知” 。在這種情況下,您可以刮取供應商價格,將其推入Elasticsearch並使用其反向搜尋(Percolator)功能來匹配價格變動與客戶查詢,並最終在發現匹配後將警報推送給客戶。

基本概念

近乎實時(Near Realtime)

Elasticsearch是一個近乎實時的搜尋平臺。這意味著從索引文件到可搜尋文件的時間有一點延遲(通常是一秒)。

叢集(Cluster)

叢集是一個或多個節點(伺服器)的集合,它們共同儲存您的整個資料,並提供跨所有節點的聯合索引和搜尋功能。叢集有唯一名稱標識,預設情況下為“elasticsearch”。此名稱很重要,因為如果節點設定為按名稱加入群集,則該節點只能是叢集的一部分。

確保不要在不同的環境中重用相同的叢集集名稱,否則最終會導致節點加入錯誤的叢集。

節點(Node)

節點是作為叢集一部分的單個伺服器,儲存資料並參與群集的索引和搜尋功能。就像叢集一樣,節點由名稱標識,預設情況下,該名稱是在啟動時分配給節點的隨機通用唯一識別符號(UUID)。如果不需要預設值,可以定義所需的任何節點名稱。此名稱對於管理目的非常重要,您可以在其中識別網路中哪些伺服器與Elasticsearch叢集中的哪些節點相對應。

索引(Index)

索引是具有某些類似特徵的文件集合。例如,您可以擁有客戶資料的索引,產品目錄的另一個索引以及訂單資料的另一個索引。索引由名稱標識(必須全部小寫),此名稱用於在對其中的文件執行索引,搜尋,更新和刪除操作時引用索引。

在單個群集中,您可以根據需要定義任意數量的索引。

文件(Document)

文件是可以編制索引的基本資訊單元。例如,您可以為單個客戶提供文件,為單個產品提供另一個文件,為單個訂單提供另一個文件。該文件以JSON(JavaScript Object Notation)表示,JSON是一種普遍存在的網際網路資料交換格式。

在索引/型別中,您可以根據需要儲存任意數量的文件。請注意,儘管文件實際上駐留在索引中,但實際上必須將文件編入索引/分配給索引中的型別。

分片和副本(Shards & Replicas)

索引可能儲存大量可能超過單個節點的硬體限制的資料。例如,佔用1TB磁碟空間的十億個文件的單個索引可能不適合單個節點的磁碟,或者可能太慢而無法單獨從單個節點提供搜尋請求。

為了解決這個問題,Elasticsearch提供了將索引細分為多個稱為分片的功能。建立索引時,只需定義所需的分片數即可。每個分片本身都是一個功能齊全且獨立的“索引”,可以託管在叢集中的任何節點上。

分片很重要,主要有兩個原因:

  • 它允許您水平拆分/縮放內容量
  • 它允許您跨分片(可能在多個節點上)分佈和並行化操作,從而提高效能/吞吐量 分片的分佈方式以及如何將其文件聚合回搜尋請求的機制完全由Elasticsearch管理,對使用者而言是透明的。

在可以隨時發生故障的網路/雲環境中,強烈建議使用故障轉移機制,以防分片/節點以某種方式離線或因任何原因消失。為此,Elasticsearch允許您將索引的分片的一個或多個副本製作成所謂的副本分片或簡稱副本。

副本集很重要,主要有兩個原因:

  • 它在分片/節點發生故障時提供高可用性。因此,請務必注意,副本分片永遠不會在與從中複製的原始/主分片相同的節點上分配。
  • 它允許您擴充套件搜尋量/吞吐量,因為可以在所有副本上並行執行搜尋。

總而言之,每個索引可以拆分為多個分片。索引也可以複製為零(表示沒有副本)或更多次。複製後,每個索引都將具有主分片(從中複製的原始分片)和副本分片(主分片的副本)。

預設情況下,Elasticsearch中的每個索引都分配了5個主分片和1個副本,這意味著如果群集中至少有兩個節點,則索引將包含5個主分片和另外5個副本分片(1個完整副本),總計為每個索引10個分片。

每個Elasticsearch分片都是Lucene索引。單個Lucene索引中可以包含最大數量的文件。截止LUCENE-5843,限制是2,147,483,519(= Integer.MAX_VALUE - 128)文件。您可以使用_cat/shardsAPI 監控分片大小。

安裝(Installation)

Elasticsearch至少需要Java 8,Java安裝教程請參考JavaPlatform, Standard Edition安裝指導。 在安裝Elasticsearch之前,請先檢查Java版本:

java -version

echo $JAVA_HOME

[[email protected] cusD]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
[[email protected] cusD]# echo $JAVA_HOME
/usr/lib/jdk1.8.0_181

一旦我們設定了Java,我們就可以下載並執行Elasticsearch。二進位制檔案可以www.elastic.co/downloads與過去釋出的所有版本一起提供。對於每個版本,您可以選擇zip或tar存檔,包DEB或RPM包,或Windows MSI安裝包。

Tar 安裝示例

為簡單起見,讓我們使用tar檔案。

我們按如下方式下載Elasticsearch 6.4.1 tar:

然後提取如下:

tar -xvf elasticsearch-6.4.1.tar.gz

然後它會在當前目錄中建立一堆檔案和資料夾。然後我們進入bin目錄,如下所示:

cd elasticsearch-6.4.1/bin

現在我們準備啟動我們的節點和單個叢集:

./elasticsearch

結果報錯!

[[email protected] bin]# ./elasticsearch
[2018-09-27T16:45:56,071][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:140) ~[elasticsearch-6.4.1.jar:6.4.1]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) ~[elasticsearch-6.4.1.jar:6.4.1]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.4.1.jar:6.4.1]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.4.1.jar:6.4.1]
at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.4.1.jar:6.4.1]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.4.1.jar:6.4.1]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) ~[elasticsearch-6.4.1.jar:6.4.1]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:104) ~[elasticsearch-6.4.1.jar:6.4.1]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) ~[elasticsearch-6.4.1.jar:6.4.1]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:326) ~[elasticsearch-6.4.1.jar:6.4.1]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-6.4.1.jar:6.4.1]
... 6 more

因為安全問題elasticsearch 不讓用root使用者直接執行.

授權問題

新增使用者

useradd -m 使用者名稱

passwd 使用者名稱

輸入密碼

授權

chown -R 使用者名稱 es的安裝目錄

切換使用者

su 使用者名稱

切換到es安裝目錄下

./elasticsearch


[[email protected] bin]# useradd -m fan113
[[email protected] bin]# passwd fan113
Changing password for user fan113.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[[email protected] bin]# chrow -R fan113 /cusD/elasticsearch-6.4.1
bash: chrow: command not found
[[email protected] bin]# chown -R fan113 /cusD/elasticsearch-6.4.1
[[email protected] bin]# su fan113
//中間忽略
[[email protected] bin]$ ./elasticsearch
//結果已成功,顯示資訊忽略。

檢測是否安裝成功

[[email protected] ~]# curl http://localhost:9200/?pretty
{
"name" : "f1mValJ",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "ugL60wjJQPaIZw3NRE9aKg",
"version" : {
"number" : "6.4.1",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "e36acdb",
"build_date" : "2018-09-13T22:18:07.696808Z",
"build_snapshot" : false,
"lucene_version" : "7.4.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}

返回上述結果,即為成功。

參考資料

Linux命令大全

Elasticsearch教程

本篇到此結束,感謝觀看