ウェブサイト検索

Rocky Linux 9 に Elasticsearch をインストールして構成する方法


序章

Elasticsearch は、データをリアルタイムで分散検索および分析するためのプラットフォームです。その使いやすさ、強力な機能、およびスケーラビリティにより、人気のある選択肢です。

この記事では、Elasticsearch 8.x をインストールし、ユースケースに合わせて構成し、インストールを保護し、Elasticsearch サーバーで作業を開始する方法について説明します。

前提条件

このチュートリアルに従う前に、次のものが必要です。

  • root 以外の sudo ユーザーでセットアップされた 2 GB の RAM と 2 つの CPU を備えた Rocky Linux 9 サーバー。これは、Rocky Linux 9 での初期サーバー セットアップに従うことで実現できます

Elasticsearch はデフォルトで約 1 GB の RAM を割り当てるため、要件が比較的高くなる可能性があるため、メモリに制約のある環境ではスワップを有効にする必要がある場合があることに注意してください。 Elasticsearch サーバーが必要とする CPU、RAM、およびストレージの量は、生成するレコードの数によって異なります。

ステップ1-Elasticsearchのインストールと構成

Elasticsearch をインストールする前に、使用可能なテキスト エディターがインストールされていることを確認する必要があります。 Rocky Linux 9 に付属するデフォルトのテキスト エディターは vi です。 vi は非常に強力なテキスト エディターですが、使用経験のないユーザーにとってはややわかりにくいかもしれません。 nano などのより使いやすいエディターをインストールして、Rocky Linux 9 サーバー上の構成ファイルの編集を容易にすることができます。

  1. sudo dnf install nano -y

これで、Elasticsearch のインストールに進むことができます。 Elasticsearch コンポーネントは、Rocky のデフォルト パッケージ リポジトリでは利用できません。代わりに、Elasticsearch プロジェクトによって管理されているリポジトリから参加できます。

システムをパッケージのなりすましから保護するために、すべてのパッケージは Elasticsearch 署名キーで署名されています。キーを使用して認証されたパッケージは、パッケージ マネージャーによって信頼されていると見なされます。このステップでは、Elasticsearch 公開 GPG キーをインポートし、Elasticsearch をインストールするために Elastic パッケージ ソース リストを追加します。

まず、rpm パッケージ ツールを使用して、elastic.co からキーをインポートします。

  1. rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

次に、nano またはお好みのテキスト エディターを使用して、/etc/yum.repos.d/ ディレクトリに elasticsearch.repo というファイルを作成します。 、パッケージ マネージャーが Elasticsearch リポジトリに接続できるようにします。

  1. sudo nano /etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

ファイルの gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch 部分は、Elasticsearch パッケージのリポジトリとファイルの情報を確認するためにダウンロードしたキーを使用するようパッケージ マネージャーに指示します。

ファイルを保存して閉じます。 nano を使用している場合は、Ctrl+X を使用して保存して終了し、プロンプトが表示されたら Y を押してから Enter を押します。

最後に、dnf パッケージ マネージャーを使用して Elasticsearch をインストールします。

  1. sudo dnf install --enablerepo=elasticsearch elasticsearch

インストールを確認するプロンプトが表示されたら、y を押します。

Elasticsearch インストール出力の一部には、Security autoconfiguration information が含まれている必要があり、最も重要なのは、自動生成された Elasticsearch 管理者パスワードです。

Output
--------------------------- Security autoconfiguration information ------------------------------ Authentication and authorization are enabled. TLS for the transport and HTTP layers is enabled and configured. The generated password for the elastic built-in superuser is : CH77_qG8ji8QCxwUCr3w

このパスワードは、このチュートリアルの後半で使用するため、メモしておいてください。他の Elasticsearch ユーザーを作成する際に必要になります。 Elasticsearch がインストールされ、構成する準備が整いました。

ステップ2-Elasticsearchの構成

Elasticsearch を構成するには、ほとんどの構成オプションが保存されているメイン構成ファイル elasticsearch.yml を編集します。このファイルは /etc/elasticsearch ディレクトリにあります。

nano またはお気に入りのテキスト エディターを使用して、Elasticsearch の構成ファイルを開きます。

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

注: Elasticsearch の構成ファイルは YAML 形式であるため、インデント構文を維持する必要があります。このファイルを編集するときは、余分なスペースを追加しないでください。

elasticsearch.yml ファイルは、クラスター、ノード、パス、メモリ、ネットワーク、検出、およびゲートウェイの構成オプションを提供します。これらのオプションのほとんどはファイルで事前構成されていますが、必要に応じて変更できます。この単一サーバー構成では、ネットワーク ホストの設定のみを調整します。

Elasticsearch は、ポート 9200 であらゆる場所からのトラフィックをリッスンします。これは、Elasticsearch がデフォルトで認証を要求するようになったため、Elasticsearch 8.x では以前のバージョンほど大きな問題ではありません。それでも、部外者が [REST API] (https://en.wikipedia.org/wiki/Representational_state_transfer) を介してデータを読み取ったり、Elasticsearch クラスターをシャットダウンしたりできないように、Elasticsearch インスタンスへの外部アクセスを制限する必要がある可能性が高くなります。アクセスを制限するには、network.host を指定している行を見つけ、行頭の # を削除して コメント解除 し、その行を置き換えます。 localhost の値なので、次のようになります。

. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or 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の保護

Elasticsearch は、HTTP API にアクセスできる人なら誰でも制御できます。 Elasticsearch が localhost でのみリッスンするように構成済みであり、Elasticsearch 8 以降ではデフォルトで管理者パスワードが設定されているため、これは必ずしもセキュリティ リスクではありません。

HTTP API へのリモート アクセスを許可する必要がある場合は、firewalld を使用してネットワークへの露出を制限できます。ポート 9200 を開くか制限するファイアウォール プロファイルを作成する前提条件の手順に従っている場合、このファイアウォールは既に有効になっているはずです。

追加の保護に投資したい場合は、Elasticsearch が市販の Shield プラグインを購入できます。

ステップ4-Elasticsearchのテスト

ここまでで、Elasticsearch はポート 9200 で実行されているはずです。curl を使用して localhost:9200 に標準の HTTP GET リクエストを送信することでテストできます。 Elasticsearch 8.x の時点で、Elasticsearch API はデフォルトで HTTPS 認証を必要とするため、--cacert 引数を使用して、提供された証明書をリクエストに含めることができます。最後に、-u elastic 引数を含めて、デフォルトの管理者ユーザー名 elastic を指定します。

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200

インストール時に受け取った管理者パスワードを入力するよう求められます。認証後、次の応答を受け取る必要があります。

Output
{ "name" : "elasticrocky", "cluster_name" : "elasticsearch", "cluster_uuid" : "_hb4dLuuR-ipiloXHT_AMw", "version" : { "number" : "8.5.3", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "4ed5ee9afac63de92ec98f404ccbed7d3ba9584e", "build_date" : "2022-12-05T18:22:22.226119656Z", "build_snapshot" : false, "lucene_version" : "9.4.2", "minimum_wire_compatibility_version" : "7.17.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "You Know, for Search" }

上記のような応答を受け取った場合、Elasticsearch は正常に動作しています。そうでない場合は、インストール手順に正しく従い、Elasticsearch が完全に開始するまでの時間を確保してください。

Elasticsearch のより完全なチェックを実行するには、 _nodes エンドポイントをクエリしてみて、クエリの最後に ?pretty を追加して、人間が判読できるテキスト形式を取得します。

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200/_nodes?pretty
[secondary label Output]
{
  "_nodes" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "cluster_name" : "elasticsearch",
  "nodes" : {
    "7TgeSgV2Tma0quqd6Mw6hQ" : {
…

このようにして、ノード、クラスター、アプリケーション パス、モジュールなどの現在のすべての設定を確認できます。

ステップ5-Elasticsearchの使用

Elasticsearch の使用を開始するには、まずデータを追加しましょう。 Elasticsearch は、通常の CRUD コマンド (作成、読み取り、更新、および削除) に応答する RESTful API を使用します。 API にデータを送信するには、再び curl を使用しますが、今回は GET リクエストではなく PUT リクエストを作成します。 -X PUT を指定し、-d を使用してコマンド ラインに JSON 形式のデータを含めます。

次のように最初のエントリを追加できます。

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic -X PUT "https://localhost:9200/test/_doc/1?pretty" -k -H 'Content-Type: application/json' -d '{"counter" : 1, "tags" : ["red"]}'

次の応答を受け取る必要があります。

Output
{ "_index" : "test", "_id" : "1", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }

cURL を使用して、HTTP PUT 要求を Elasticsearch サーバーに送信しました。リクエストの URI は /test/_doc/1 で、いくつかのパラメーターが含まれていました。

  • test は Elasticsearch のデータのインデックスです。
  • _doc はタイプです。
  • 1 は、上記のインデックスとタイプの下にあるエントリの ID です。

この最初のエントリは、HTTP GET 要求で取得できます。

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic -X GET "https://localhost:9200/test/_doc/1?pretty" -k -H 'Content-Type: application/json'

これは結果の出力になるはずです:

Output
{ "_index" : "test", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "counter" : 1, "tags" : [ "red" ] } }

既存のエントリを変更するには、HTTP PUT 要求を使用できます。

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic -X PUT "https://localhost:9200/test/_doc/1?pretty" -k -H 'Content-Type: application/json' -d '{"counter" : 1, "tags" : ["blue"]}'

Elasticsearch は、次のように変更が成功したことを確認する必要があります。

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

上記の例では、最初のエントリの message を \Hello, People! に変更しました。これにより、バージョン番号が自動的に 2 に増加しました。

上記のリクエストに余分な引数 pretty があることに気付いたかもしれません。各データ フィールドを新しい行に書き込むことができるように、書式設定を追加します。 pretty がない場合、Elasticsearch の出力は改行やインデントなしで返されます。これは API 通信では問題ありませんが、コマンド ライン出力では読みにくくなります。

Elasticsearch にデータを追加してクエリを実行しました。その他の操作については、API ドキュメントを確認してください。

結論

これで、Elasticsearch をインストールして構成し、使用を開始しました。 Elasticsearch の機能をさらに詳しく調べるには、Elasticsearch の公式ドキュメントを参照してください。