在Ubuntu 22.04上安裝和配置Elasticsearch

A previous version of this article was written by Toli.

介紹

Elasticsearch 是一個用於分佈式搜索和實時數據分析的平台。由於其易用性、強大的功能和可擴展性,它是一個受歡迎的選擇。

本文將指導您安裝Elasticsearch,為您的用例配置它,保護您的安裝,並開始使用您的Elasticsearch服務器。

先決條件

在遵循本教程之前,您將需要:

本教程將使用運行Elasticsearch所需的最小CPU和RAM量。請注意,您的Elasticsearch服務器所需的CPU、RAM和存儲量取決於您預期的日誌量。

步驟1 — 安裝和配置Elasticsearch

在Ubuntu的預設套件庫中並沒有Elasticsearch組件。但是,您可以在添加Elastic的套件源清單後,使用APT進行安裝。

所有的套件都使用Elasticsearch簽名密鑰進行簽名,以保護您的系統免受套件欺騙。使用該密鑰驗證的套件將被您的套件管理器視為受信任的。在此步驟中,您將導入Elasticsearch的公共GPG密鑰並添加Elastic套件源清單,以安裝Elasticsearch。

首先,使用cURL,這是一個用於通過URL傳輸數據的命令行工具,將Elasticsearch的公共GPG密鑰導入APT。請注意,我們使用參數-fsSL來消除所有進度和可能的錯誤(除了服務器故障),並允許cURL在重定向後對新位置進行請求。將輸出通過管道傳輸到gpg --dearmor命令,該命令將密鑰轉換為apt可以用來驗證下載套件的格式。

  1. curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg

接下來,將Elastic套件源添加到sources.list.d目錄中,其中apt將搜索新的源:

  1. echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

文件中的[signed-by=/usr/share/keyrings/elastic.gpg]部分指示apt使用您下載的密鑰來驗證Elasticsearch套件的存儲庫和文件信息。

接下來,更新您的軟件包列表,以便APT將讀取新的Elastic源:

  1. sudo apt update

然後使用以下命令安裝Elasticsearch:

  1. sudo apt install elasticsearch

當提示確認安裝時,請按Y。如果提示您重新啟動任何服務,請按ENTER 接受默認並繼續。Elasticsearch現在已安裝並準備進行配置。

步驟2 — 配置Elasticsearch

為了配置Elasticsearch,我們將編輯其主配置文件elasticsearch.yml,其中存儲了大部分的配置選項。此文件位於/etc/elasticsearch目錄中。

使用您偏好的文本編輯器編輯Elasticsearch的配置文件。這裡,我們將使用nano

  1. sudo nano /etc/elasticsearch/elasticsearch.yml

注意: Elasticsearch的配置文件是YAML格式,這意味著我們需要保持縮排格式。在編輯此文件時,請確保不要添加任何額外的空格。

elasticsearch.yml文件提供了集群、節點、路徑、記憶體、網絡、發現和閘道器的配置選項。這些選項中大多數已在文件中預配置,但您可以根據需要更改它們。對於我們單台服務器配置的演示目的,我們只會調整網絡主機的設置。

Elasticsearch 在端口 9200 上监听来自任何地方的流量。您会希望限制外部访问您的 Elasticsearch 实例,以防止外部人员通过其 [REST API] (https://en.wikipedia.org/wiki/Representational_state_transfer) 读取您的数据或关闭您的 Elasticsearch 集群。为了限制访问并因此提高安全性,请找到指定 network.host 的行,取消注释,并将其值替换为 localhost,使其如下所示:

/etc/elasticsearch/elasticsearch.yml
. . .
# ---------------------------------- 网络 -----------------------------------
#
# 将绑定地址设置为特定 IP(IPv4 或 IPv6):
#
network.host: localhost
. . .

我们已指定 localhost,以便 Elasticsearch 在所有接口和绑定的 IP 上监听。如果您只想它在特定接口上监听,可以在 localhost 的位置指定其 IP。保存并关闭 elasticsearch.yml。如果您使用 nano,可以按 CTRL+X,然后按 Y,最后按 ENTER

这些是您可以开始使用 Elasticsearch 的最低设置。现在您可以第一次启动 Elasticsearch。

使用 systemctl 启动 Elasticsearch 服务。给 Elasticsearch 一些时间来启动。否则,您可能会收到关于无法连接的错误。

  1. sudo systemctl start elasticsearch

接下来,运行以下命令以在每次服务器启动时启用 Elasticsearch 启动:

  1. sudo systemctl enable elasticsearch

启用了 Elasticsearch 的自动启动后,让我们继续下一步,讨论安全性。

步驟 3 — 保護 Elasticsearch

默認情況下,任何可以訪問 HTTP API 的人都可以控制 Elasticsearch。這並不總是一個安全風險,因為 Elasticsearch 僅在回環介面(即 127.0.0.1)上聽取,這只能在本地訪問。因此,無法進行公共訪問,只要所有伺服器用戶都是受信任的,安全性可能不是一個主要關注點。

如果您需要允許對 HTTP API 的遠程訪問,可以使用 Ubuntu 的默認防火牆 UFW 限制網絡曝光。如果您按照先決條件 使用 Ubuntu 22.04 的初始伺服器設置 教程中的步驟進行了操作,則此防火牆應已啟用。

我們現在將配置防火牆,以允許對受信任的遠程主機(通常是您在單伺服器設置中使用的伺服器,例如198.51.100.0)的默認 Elasticsearch HTTP API 端口(TCP 9200)的訪問。要允許訪問,請輸入以下命令:

  1. sudo ufw allow from 198.51.100.0 to any port 9200

完成後,您可以使用以下命令啟用 UFW:

  1. sudo ufw enable

最後,使用以下命令檢查 UFW 的狀態:

  1. sudo ufw status

如果您已正確指定規則,應該會收到以下類似的輸出:

Output
Status: active To Action From -- ------ ---- 9200 ALLOW 198.51.100.0 22 ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6)

現在,UFW 應該已啟用並設置以保護 Elasticsearch 的端口 9200。

如果您想要投資於額外的保護,Elasticsearch提供了商業版Shield插件供購買。

到目前為止,Elasticsearch應該正在端口9200上運行。您可以使用cURL和GET請求來進行測試。

  1. curl -X GET 'http://localhost:9200'

您應該會收到以下回應:

Output
{ "name" : "elastic-22", "cluster_name" : "elasticsearch", "cluster_uuid" : "DEKKt_95QL6HLaqS9OkPdQ", "version" : { "number" : "7.17.1", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "e5acb99f822233d62d6444ce45a4543dc1c8059a", "build_date" : "2022-02-23T22:20:54.153567231Z", "build_snapshot" : false, "lucene_version" : "8.11.1", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }

如果您收到類似上述的回應,則表示Elasticsearch正常運行。如果沒有,請確保您已經正確遵循了安裝說明,並且已允許Elasticsearch充分啟動的時間。

要對Elasticsearch進行更全面的檢查,請執行以下命令:

  1. curl -X GET 'http://localhost:9200/_nodes?pretty'

在上述命令的輸出中,您可以驗證節點、集群、應用程序路徑、模塊等的所有當前設置。

要開始使用Elasticsearch,首先讓我們添加一些數據。Elasticsearch使用RESTful API,它對通常的CRUD命令作出反應:創建(create)、讀取(read)、更新(update)和刪除(delete)。為了使用它,我們將再次使用cURL命令。

你可以像這樣添加你的第一個條目:

  1. curl -XPOST -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

你應該會收到以下回應:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}

使用 cURL,我們已經向 Elasticsearch 伺服器發送了 HTTP POST 請求。請求的 URI 是 /tutorial/helloworld/1,帶有幾個參數:

  • tutorial 是 Elasticsearch 中數據的索引。
  • helloworld 是類型。
  • 1 是上述索引和類型下我們條目的 ID。

你可以使用 HTTP GET 請求檢索這個第一個條目。

  1. curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1'

應該會得到以下結果:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}

要修改現有的條目,可以使用 HTTP PUT 請求。

  1. curl -X PUT -H "Content-Type: application/json" 'localhost:9200/tutorial/helloworld/1?pretty' -d '
  2. {
  3. "message": "Hello, People!"
  4. }'

Elasticsearch 應該會確認成功修改,如下所示:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "result" : "updated", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }

在上面的示例中,我們將第一個條目的 message 修改為 “Hello, People!”。這樣,版本號已自動增加為 2

你可能已經注意到上面請求中的額外參數 pretty。它啟用了人類可讀的格式,這樣你就可以將每個數據字段寫在新的一行上。在檢索數據時,你也可以“美化”你的結果,以獲得更可讀的輸出,只需輸入以下命令:

  1. curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1?pretty'

現在,回應將被格式化以供人類解析:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "_seq_no" : 1, "_primary_term" : 1, "found" : true, "_source" : { "message" : "Hello, People!" } } }

我們現在已經在 Elasticsearch 中添加並查詢了數據。要了解其他操作,請查閱API 文檔

結論

您現在已安裝、配置並開始使用 Elasticsearch。要進一步探索 Elasticsearch 的功能,請參考官方 Elasticsearch 文檔

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsearch-on-ubuntu-22-04