開発用の最初のElasticsearchクラスターを設定する方法
Elasticsearchはその分散的な性質から、始めるのが難しく感じられるかもしれませんが、ローカル開発用の基本的なクラスターの設定は簡単です。このガイドでは、シンプルなシングルノード設定を選択する場合でも、より実用的なマルチノード環境を選択する場合でも、機能するElasticsearchクラスターを迅速にデプロイおよび設定するために必要な必須の手順を説明します。
この初期設定を理解することは、Elasticsearchの強力な検索・分析機能を使用してデータをシームレスにインデックス化、クエリ、探索するために不可欠です。
本稿では、本番環境への移行を考える前に強固な基盤を確保するために必要な、開発環境のコアな設定側面に焦点を当てます。
前提条件
始める前に、以下の前提条件が満たされていることを確認してください。
- Java Development Kit (JDK): Elasticsearchを実行するには、システムに互換性のあるJDKがインストールされている必要があります。Elasticsearchバージョン7.x以降では、通常JDK 11以降が必要です。
- Elasticsearchのダウンロード: 公式のElasticウェブサイトから、目的のElasticsearchバージョンのバイナリ配布物を入手します。
- システムリソース: 基本的な開発テストの場合、2GBのRAMで十分ですが、マルチノードテストの場合はそれ以上を推奨します。
ステップ1: Elasticsearchのダウンロードと展開
ダウンロードが完了したら(通常は.zipまたは.tar.gzファイル)、クラスターファイルをホストしたいディレクトリ(例: ~/elasticsearch-8.12.0)にアーカイブを展開します。このディレクトリをElasticsearchホームディレクトリと呼びます。
ステップ2: シングルノードクラスターの設定(開発のデフォルト)
デフォルトでは、Elasticsearchを初めて実行すると、シングルノードクラスターとして起動しようとします。しかし、最新のバージョンでは、ローカル開発であっても、特にセキュリティとメモリ設定に関して明示的な設定が必要になることがよくあります。
設定ファイルは、Elasticsearchホーム内のconfig/ディレクトリにあります。
必須設定 (config/elasticsearch.yml)
主要な設定ファイルはelasticsearch.ymlです。ローカルのシングルノード設定では、少なくともクラスター名とノード名を構成する必要があります。
# クラスター設定
cluster.name: dev-cluster
# ノード設定
node.name: node-1
# ネットワーク設定(開発の場合はlocalhostを使用)
network.host: 127.0.0.1
# HTTPポート(デフォルトは9200)
http.port: 9200
# 開発において重要: 最初はセキュリティを無効化(本番環境での使用には注意!)
xpack.security.enabled: false
セキュリティに関する警告: 初期開発設定を簡素化するために
xpack.security.enabledを無効にすることは一般的です。決して公にアクセス可能な環境でこの設定を実行しないでください。最新のElasticsearchバージョン(7.x以降)では、セキュリティが有効なままの場合、初期パスワードを生成するためセットアップコマンドを最初に実行する必要があることがよくあります。
シングルノードの起動
展開したディレクトリのルートに移動し、適切な起動スクリプトを実行します。Linux/macOSの場合:
./bin/elasticsearch
Windowsの場合(PowerShellを使用):
.in\elasticsearch.bat
ログがノードの正常な起動を示すまで待ちます。通常はstartedのようなメッセージが表示されます。
ステップ3: クラスター状態の検証
プロセスが実行されたら、デフォルトのHTTPポート(9200)に対してcurlを使用してクラスターの状態を確認できます。
クラスター健全性の確認
このコマンドはクラスター全体の健全性を確認します:
curl -X GET "http://localhost:9200/_cat/health?v"
期待される出力スニペット:
epoch timestamp cluster status node.total node.data shards prio initialized
1678886400 10:00:00 dev-cluster green 1 1 0 0 1
statusフィールドはgreenであるべきで、これは正常なシングルノードクラスターであることを示します。
ノード情報の確認
ノード情報を確認することもできます:
curl -X GET "http://localhost:9200/_cat/nodes?v"
ステップ4: マルチノードクラスターの設定(現実的なテストのために)
シャーディングの割り当てに関するより現実的な開発やテストのためには、少なくとも2つのノードが必要です。これには、それぞれ異なる設定を持つ複数の独立したElasticsearchインスタンスを実行する必要があります。
ディレクトリ構造
メインの作業領域内にノードごとに別々のディレクトリを作成します(例: es_data/node1、es_data/node2)。基本となるElasticsearch配布物をこれらの各ディレクトリにコピーするか、メインのインストールにリンクさせます。
ノード設定の違い
各ノードについて、一意のconfig/elasticsearch.ymlファイルを作成します:
ノード1の設定 (es_data/node1/config/elasticsearch.yml)
cluster.name: dev-cluster
node.name: node-1
network.host: 127.0.0.1
http.port: 9200
path.data: node1_data # 一意のデータパス
xpack.security.enabled: false
# この行はノード1に他のメンバーを見つける方法を伝えます
cluster.initial_master_nodes: ["node-1", "node-2"]
ノード2の設定 (es_data/node2/config/elasticsearch.yml)
cluster.name: dev-cluster
node.name: node-2
network.host: 127.0.0.1
http.port: 9201 # 異なるHTTPポートを使用する必要があります
path.data: node2_data # 一意のデータパス
xpack.security.enabled: false
# この行はノード2に他のメンバーを見つける方法を伝えます
cluster.initial_master_nodes: ["node-1", "node-2"]
マルチノードクラスターの起動
- ノード1を起動:
es_data/node1に移動し、./bin/elasticsearchを実行します。 - ノード2を起動:
es_data/node2に移動し、./bin/elasticsearchを実行します。
マルチノードクラスターの検証
実行中のいずれかのHTTPポート(例: 9200)に対してAPIを使用し、ノード数を確認します:
curl -X GET "http://localhost:9200/_cat/nodes?v"
期待される出力スニペット:
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1 15 50 0 0.01 0.02 0.01 mdi * node-1
127.0.0.1 16 51 0 0.00 0.01 0.01 mdi - node-2
nameの下に2つのエントリが表示されていれば、マルチノードクラスターは正しく形成されています。
開発環境のベストプラクティス
- 専用のデータパスを使用する: 特にマルチノードセットアップでは、インスタンス間の意図しないデータ汚染を防ぐために、常に
path.dataをノードごとに明示的に設定します。 - エフェメラルポート: ローカルで実行する際の競合を避けるため、各ノードに一意のHTTPポート(
http.port)を使用します。 - メモリロック: 開発においては、ヒープサイズ制限に引っかからないように注意する必要があります。メモリに関連する起動エラーが発生した場合は、
jvm.optionsファイルでJVMヒープサイズを調整する必要があるかもしれません(ただし、基本的なテストではデフォルトで十分なことが多いです)。
次のステップ: データのインデックス作成
クラスターが実行されたら、次の論理的なステップはインデックスとマッピング設定を作成することです。例えば、productsという名前のシンプルなインデックスを作成するには:
curl -X PUT "http://localhost:9200/products?pretty"
この基本的なセットアップにより、クライアントライブラリやKibanaを使用してElasticsearchとの対話を始めることができます。