初めてのElasticsearchクラスタを開発用にセットアップする方法
ローカルにElasticsearch開発用クラスタをセットアップし、健全性を確認し、シングルノードおよびマルチノード設定でよくあるミスを回避します。
初めてのElasticsearchクラスタを開発用にセットアップする方法
初めてのElasticsearchクラスタをセットアップする際は、安全な開発設定を選択し、ノードが意図したクラスタに実際に参加したことを確認することが重要です。シングルノード設定は基本的なインデックス作成や検索テストに十分であり、ローカルでのマルチノード設定はディスカバリやシャード割り当ての学習に役立ちます。
ここではローカル開発に焦点を当てています。これらの緩い設定を公開または本番クラスタで再利用しないでください。
前提条件
始める前に、以下の前提条件を満たしていることを確認してください。
- Javaランタイム: 最近のElasticsearchディストリビューションにはバンドルされたJDKが含まれています。バンドルされていないパッケージやディストリビューションを使用する場合は、そのElasticsearchリリースで必要なJavaバージョンをインストールしてください。
- 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を使用する場合:
.\bin\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
transport.port: 9300
path.data: node1_data # 一意のデータパス
xpack.security.enabled: false
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301"]
# この行はノード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ポートを使用する必要があります
transport.port: 9301 # 異なるトランスポートポートを使用する必要があります
path.data: node2_data # 一意のデータパス
xpack.security.enabled: false
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301"]
# この行はノード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)とトランスポートポート(transport.port)を使用して、競合を防ぎます。 - メモリロック: 開発では、ヒープサイズの制限に達していないことを確認してください。メモリ関連の起動エラーが発生した場合は、
jvm.optionsファイルでJVMヒープサイズを調整する必要があるかもしれません(ただし、デフォルト値は基本的なテストには通常十分です)。
次のステップ: データのインデックス作成
クラスタが実行されているので、次の論理的なステップはインデックスを作成し、マッピング設定を行うことです。例えば、productsという名前のシンプルなインデックスを作成するには:
curl -X PUT "http://localhost:9200/products?pretty"
この基本的なセットアップにより、クライアントライブラリやKibanaを使用してElasticsearchとの対話を開始できます。