Elasticsearch インストール手順を徹底解説
はじめに
Elasticsearch は、Elastic 社によって開発された、分散型のRESTful検索・分析エンジンです。大量のデータをリアルタイムに保存、検索、分析する能力に長けており、ログ分析、全文検索、セキュリティインテリジェンス、ビジネス分析など、幅広いユースケースで活用されています。Elasticsearch は、しばしば Kibana(データ可視化)、Logstash(データ収集・加工)、Beats(軽量データシッパー)といったコンポーネントと組み合わせて使用され、「Elastic Stack」(かつては ELK Stack と呼ばれていました)の中核をなしています。
この強力なエンジンを使い始める第一歩は、正しくインストールすることです。Elasticsearch は様々な環境にインストール可能ですが、それぞれの環境で推奨される方法や注意点が存在します。本記事では、Elasticsearch のインストール方法について、複数のアプローチを徹底的に解説します。前提条件から始まり、主要なインストール方法、インストール後の基本的な設定、起動・停止、動作確認、そして一般的なトラブルシューティングまで、網羅的に説明します。
この記事を読むことで、以下のことができるようになります。
- Elasticsearch をインストールするためのシステム要件を理解する。
- 推奨されるインストール方法(パッケージマネージャー、アーカイブファイル、Docker)の中から、環境に合った方法を選択し、手順を実行できる。
- インストール後の基本的な設定(メモリ、ネットワーク、セキュリティなど)を適用できる。
- インストールした Elasticsearch を起動・停止し、基本的な動作確認ができる。
- インストール中に発生しうる一般的な問題に対処できる。
さあ、Elasticsearch の世界へ飛び込む準備をしましょう!
1. Elasticsearch インストールの前提条件
Elasticsearch をインストールする前に、システムが以下の要件を満たしていることを確認することが重要です。これらの要件は、Elasticsearch の安定した動作とパフォーマンスを保証するために必要不可欠です。
1.1 Java (JVM)
Elasticsearch は Java Virtual Machine (JVM) 上で動作します。したがって、互換性のある Java Development Kit (JDK) または Java Runtime Environment (JRE) がシステムにインストールされている必要があります。Elastic 社は OpenJDK を推奨しており、Elasticsearch には互換性のある OpenJDK ディストリビューションが同梱されています。そのため、多くの場合は別途 Java をインストールする必要はありません。しかし、システムのデフォルト Java を使用する場合や、特定の JDK を指定したい場合は、互換性のあるバージョン(通常、Elasticsearch のリリースノートやドキュメントで指定されています)を事前にインストールしておく必要があります。
推奨: Elasticsearch に同梱されている OpenJDK を使用するのが最も簡単で推奨される方法です。別途インストールが必要な場合は、Elasticsearch のバージョンに対応した OpenJDK 8 または OpenJDK 11 以降を使用します。
1.2 メモリ (RAM)
Elasticsearch はメモリを多用するアプリケーションです。特に JVM ヒープ領域に十分なメモリを割り当てることが、パフォーマンスにとって極めて重要です。公式ドキュメントでは、システムメモリの半分、ただし 32GB を超えない範囲 で JVM ヒープサイズを設定することが推奨されています。残りの半分は、OS がファイルシステムキャッシュとして使用するために確保しておきます。ファイルシステムキャッシュは、OS が頻繁にアクセスされるデータをディスクからメモリにキャッシュするために使用され、検索パフォーマンスに大きく貢献します。
- 推奨ヒープサイズ: システムメモリの半分(最大 32GB)
- 最小推奨メモリ: ノードあたり 4GB 以上
ヒープサイズが小さすぎると、ガベージコレクションの負荷が増大し、パフォーマンスが低下します。一方、ヒープサイズが大きすぎると、大規模なガベージコレクションが長時間停止を引き起こす可能性があります。また、32GB を超えると、JVM のポインタ圧縮が機能しなくなり、メモリ効率が悪化する可能性があります。
重要な注意: スワップ領域(Swap Space)の使用は絶対に避けるべきです。スワップが発生すると、Elasticsearch のパフォーマンスが劇的に低下し、クラスタの安定性も損なわれます。システムでスワップが有効になっている場合は、無効化することを強く推奨します。
1.3 ディスク容量
Elasticsearch はインデックスデータやトランザクションログ(Translog)、クラスタ状態などのデータをディスクに保存します。必要なディスク容量は、インデックスするデータの量、レプリカシャードの数、インデックス設定(例: コーデック、圧縮設定)、および保持するデータ量によって大きく異なります。
- データパス: インデックスデータ、Shards
- ログパス: Elasticsearch のログファイル
- Translog: 操作ログ(データの永続化と回復に使用)
十分なディスク容量を確保することはもちろん、ディスクI/O性能もElasticsearchのパフォーマンスに大きな影響を与えます。SSD の使用が強く推奨されます。
1.4 オペレーティングシステム (OS) 設定
いくつかの OS レベルの設定が、Elasticsearch の安定性とパフォーマンスに影響します。
vm.max_map_count
の増加: Elasticsearch は、大量のメモリマッピングファイルを使用します。特に Lucene(Elasticsearch の内部で使用される検索ライブラリ)が多くのファイルを開くため、デフォルトのvm.max_map_count
の値(通常 65530)では不足することがあります。Elasticsearch の推奨値は 262144 以上 です。この設定は、/etc/sysctl.conf
ファイルを編集することで永続化できます。
bash
# /etc/sysctl.conf に追記
vm.max_map_count = 262144
設定を反映するには、sysctl -p
コマンドを実行するか、システムを再起動します。- ファイルディスクリプタ数の上限増加: Elasticsearch は、ファイルやネットワーク接続のために多数のファイルディスクリプタを使用します。デフォルトの上限値では不足し、”Too many open files” のエラーが発生する可能性があります。推奨される上限値は 65536 以上 です。この設定は、
/etc/security/limits.conf
ファイルを編集することでユーザー単位で設定できます。
bash
# /etc/security/limits.conf に追記 (elasticsearch ユーザーの場合)
elasticsearch - nofile 65536
elasticsearch - nproc 4096 # プロセス数も増やしておくのが一般的
変更を反映するには、ユーザーがログインし直すか、システムを再起動する必要がある場合があります。systemd を使用している場合は、サービスユニットファイルで上限値を設定することもできます。 - スワップの無効化: 前述の通り、スワップはパフォーマンス劣化の主な原因となるため、無効化することを強く推奨します。
/etc/fstab
から swap エントリをコメントアウトし、swapoff -a
コマンドで一時的に無効化します。 - ロックメモリ: JVM ヒープがスワップアウトされるのを防ぐために、Elasticsearch プロセスにメモリをロックする権限を与えることができます。これは
/etc/security/limits.conf
または systemd ユニットファイルで設定します。
bash
# /etc/security/limits.conf に追記 (elasticsearch ユーザーの場合)
elasticsearch - memlock unlimited
ただし、システム全体で使用できるメモリ量を超えてメモリをロックしようとすると、サービスの起動に失敗する可能性があるため、注意が必要です。
1.5 ネットワーク
Elasticsearch はノード間通信やクライアントからのアクセスにネットワークを使用します。ファイアウォール設定で、以下のポートが開放されていることを確認する必要があります。
- 9200/tcp: REST API 用(クライアントからのアクセス、Kibana との連携など)
- 9300/tcp: ノード間通信用(クラスタ内のノード間でのデータ転送、ディスカバリなど)
本番環境では、セキュリティ上の理由から 9200 ポートへのアクセスを信頼できるネットワークやホストに限定し、9300 ポートはクラスタ内のノード間でのみ通信できるようにファイアウォールを設定することが強く推奨されます。
これらの前提条件を満たしているか確認・設定した上で、Elasticsearch のインストールに進みます。
2. Elasticsearch のインストール方法
Elasticsearch にはいくつかの主要なインストール方法があります。どの方法を選択するかは、使用する OS、運用ポリシー、コンテナ化の利用などによって異なります。
主要なインストール方法:
- 公式ダウンロード (tar.gz または zip): ソースコードからビルドされたバイナリをダウンロードし、手動で配置・設定する方法です。最も汎用的で、特定のディレクトリにインストールしたい場合や、システム全体の設定に影響を与えたくない場合に適しています。
- パッケージマネージャー (APT/YUM/DNF): Debian/Ubuntu (APT)、RHEL/CentOS/Fedora (YUM/DNF) などのディストリビューションで、システムパッケージとしてインストールする方法です。依存関係の管理やアップデートが容易で、システムサービスとしての管理が標準化されているため、Linux 環境で最も推奨される方法です。
- Docker イメージ: Docker コンテナとして Elasticsearch を実行する方法です。環境の分離、移植性、デプロイの容易さなどの利点があります。開発環境やテスト環境だけでなく、コンテナオーケストレーションプラットフォーム(Kubernetes など)を使用する本番環境でも広く利用されています。
- Windows Installer (MSI): Windows 環境で GUI またはコマンドラインから簡単にインストールする方法です。
- Homebrew (macOS): macOS 環境で Homebrew パッケージマネージャーを使用してインストールする方法です。
本記事では、特によく使われる「公式ダウンロード (tar.gz)」、「パッケージマネージャー (APT, YUM/DNF)」、そして「Docker イメージ」について詳細に解説します。
3. 公式ダウンロードからのインストール (Linux/macOS)
この方法は、ダウンロードしたアーカイブファイル (.tar.gz for Linux/macOS, .zip for Windows) を任意の場所に展開して使用します。システム全体にインストールするのではなく、特定のユーザーのホームディレクトリや /opt
ディレクトリなどにインストールしたい場合に便利です。
ここでは Linux 環境を想定し、.tar.gz ファイルを使った手順を説明します。macOS もほぼ同様です。
3.1 ファイルのダウンロード
Elasticsearch のダウンロードページ (https://www.elastic.co/jp/downloads/elasticsearch) から、最新の安定版の .tar.gz ファイルの URL を取得します。または、wget
や curl
コマンドでダウンロードします。
“`bash
例: 8.x バージョンのダウンロード
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.x.x-linux-x86_64.tar.gz
ファイルの整合性を確認するために SHA512 チェックサムもダウンロード
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.x.x-linux-x86_64.tar.gz.sha512
チェックサムの確認 (任意だが推奨)
shasum -a 512 -c elasticsearch-8.x.x-linux-x86_64.tar.gz.sha512
“`
ダウンロードしたファイル名やバージョン番号は、ダウンロードページで最新のものを確認してください。
3.2 ファイルの展開
ダウンロードした tar.gz ファイルを、インストールしたいディレクトリに展開します。ここでは /usr/local
に展開する例を示します。
“`bash
任意のディレクトリに移動 (例: /usr/local)
cd /usr/local
tar.gz ファイルを展開
tar -xzf /path/to/elasticsearch-8.x.x-linux-x86_64.tar.gz
展開されたディレクトリの名前を変更 (任意だがバージョン管理しやすい)
mv elasticsearch-8.x.x elasticsearch-8
シンボリックリンクを作成 (任意だが、バージョンアップ時に便利)
ln -s elasticsearch-8 elasticsearch
展開されたディレクトリに移動
cd elasticsearch
“`
これで /usr/local/elasticsearch
ディレクトリに Elasticsearch のファイルが配置されました。このディレクトリを $ES_HOME
と呼びます。
ディレクトリ構造は以下のようになります。
$ES_HOME/
├── bin/ # 実行可能ファイル (elasticsearch, elasticsearch-plugin など)
├── config/ # 設定ファイル (elasticsearch.yml, jvm.options, log4j2.properties)
├── jdk/ # 同梱されている OpenJDK
├── lib/ # ライブラリファイル
├── modules/ # 標準モジュール
├── plugins/ # インストールされたプラグイン
└── README.textile
3.3 設定ファイルの編集
設定ファイルは $ES_HOME/config
ディレクトリにあります。最低限、以下のファイルを編集する必要があります。
elasticsearch.yml
: 主要な設定ファイルjvm.options
: JVM の起動オプション(ヒープサイズなど)
elasticsearch.yml
の編集
必須ではありませんが、クラスタ名、ノード名、ネットワーク設定などを設定するのが一般的です。
“`bash
設定ファイルを開く
nano config/elasticsearch.yml
“`
以下の設定項目を確認・編集します。コメントアウトされている行は #
を削除して有効にします。
“`yaml
======================== Elasticsearch Configuration =========================
NOTE: Elasticsearch comes with several recommended options, see
https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html
for more information on selecting the most appropriate options.
———————————- Cluster ———————————–
Use a descriptive name for your cluster:
cluster.name: my-application-cluster # クラスタ名 (必須: 複数のノードで同じ名前にする)
———————————— Node ————————————
Use a descriptive name for the node:
node.name: node-1 # ノード名 (必須: クラスタ内でユニークにする)
Add custom attributes to the node:
node.attr.rack: 42
———————————– Paths ————————————
Path to store the data of your Elasticsearch indices:
path.data: /path/to/data
Path to store the logs of your Elasticsearch nodes:
path.logs: /path/to/logs
データおよびログの保存パスを指定 (必須: デフォルトは $ES_HOME/data と $ES_HOME/logs だが、本番環境では別の永続ストレージを推奨)
path.data: /var/lib/elasticsearch/data # 例: /var/lib/elasticsearch/data
path.logs: /var/log/elasticsearch # 例: /var/log/elasticsearch
———————————– Network ———————————-
Set the bind address specifically (IPv4 or IPv6):
network.host: 0.0.0.0 # Elasticsearch がListenするIPアドレス (重要: 0.0.0.0 は全てのNIC、localhost はローカルのみ)
network.host: localhost # 開発/テスト環境でローカルからのみアクセスする場合
Set a custom port for HTTP:
http.port: 9200 # HTTP API ポート
Set a custom port for TCP and discovery:
transport.port: 9300 # ノード間通信ポート
For more complex network configuration, please see the reference documentation.
———————————- Discovery ———————————
Pass an initial list of hosts to perform discovery against:
discovery.seed_hosts: [“host1”, “host2:9300”] # クラスタ内のノードのリスト (重要: クラスタを組む場合必須)
discovery.seed_hosts: [“192.168.1.10”, “192.168.1.11”] # 例
Bootstrap the cluster using an initial set of master-eligible nodes:
cluster.initial_master_nodes: [“node-1”, “node-2”] # 初回起動時のマスターノード候補リスト (重要: 初回クラスタ構築時必須)
cluster.initial_master_nodes: [“node-1”] # シングルノードの場合
——————————— X-Pack Settings ——————————
X-Pack Security を有効にするか (通常、本番環境では有効化を推奨)
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true # ノード間通信のSSL有効化 (security.enabled が true なら推奨)
xpack.security.http.ssl.enabled: true # HTTP通信のSSL有効化 (security.enabled が true なら推奨)
X-Pack monitoring を有効にするか
xpack.monitoring.collection.enabled: true
“`
重要な設定項目について補足します。
cluster.name
: 同じクラスタに属する全てのノードで同じ名前を設定します。異なるクラスタ名を持つノードは互いに認識しません。node.name
: クラスタ内の各ノードにユニークな名前をつけます。ログなどでノードを識別しやすくなります。path.data
: インデックスデータが保存されるディレクトリです。デフォルトは$ES_HOME/data
ですが、Elasticsearch のバージョンアップ時にディレクトリを削除しないように、/var/lib/elasticsearch/data
のような別の永続的なストレージパスを指定することを強く推奨します。path.logs
: ログファイルが保存されるディレクトリです。同様に、/var/log/elasticsearch
のような別のパスを指定することを推奨します。network.host
: この設定は非常に重要です。localhost
または127.0.0.1
: ローカルホストからのみアクセス可能になります。開発/テスト環境以外では非推奨です。0.0.0.0
: 全てのネットワークインターフェースで Listen します。他のマシンからアクセスできるようになります。本番環境では、特定のIPアドレスまたはホスト名に制限することを強く推奨します。- 特定の IP アドレスやホスト名: そのアドレス/ホスト名で Listen します。
http.port
: HTTP REST API が使用するポートです。デフォルトは 9200 です。transport.port
: ノード間通信やディスカバリが使用するポートです。デフォルトは 9300 です。discovery.seed_hosts
: 新しいノードがクラスタに参加する際に、どのノードに接続すれば他のノードを見つけられるかを指定します。クラスタを組む場合は、既存ノードのリストをここに指定します。IPアドレスまたはホスト名を指定できます。cluster.initial_master_nodes
: 新規クラスタを最初に起動する際に、マスターノードとして認識されるノードのnode.name
のリストを指定します。これにより、スプリットブレイン問題を回避し、クラスタの初期ブートストラップを安全に行います。クラスタが一度起動して状態を保存した後(data
ディレクトリに保存)、この設定は無視されます。シングルノードの場合は自身のnode.name
を指定します。xpack.security.enabled
: セキュリティ機能を有効にするか設定します。Elasticsearch 8.x 以降ではデフォルトで有効になっていますが、古いバージョンや特定のインストール方法では手動で有効にする必要があります。本番環境では必ず有効化してください。有効化すると、ユーザー認証(elastic ユーザーなど)や TLS/SSL 通信が必要になります。
jvm.options
の編集 (ヒープサイズ設定)
jvm.options
ファイルで JVM の起動オプションを設定します。特にヒープサイズ (-Xms
, -Xmx
) は重要な設定です。
“`bash
JVM オプションファイルを開く
nano config/jvm.options
“`
以下の行を探し、システムの搭載メモリに合わせて -Xms
と -Xmx
の値を設定します。両方の値は同じに設定することが推奨されます。
“`
G1GCの設定(デフォルトで有効)
他のGCを使用する場合は設定変更
JVM memory settings
The following settings are commented out because they are set automatically
based on the container memory limit. If not running in a container, the
following settings will not be set and you should uncomment them.
See https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#set-jvm-heap-size
-Xms4g # 最小ヒープサイズ (例: 4GB)
-Xmx4g # 最大ヒープサイズ (例: 4GB)
Dockerなどコンテナ環境では自動設定される場合があるため、コンテナ外で手動設定する場合はコメントアウトを解除する。
“`
コメントにもあるように、Docker 環境などでは自動的に設定される場合がありますが、手動インストールの場合は自分で設定が必要です。例えば、システムに 8GB のメモリがある場合、4g
に設定します。
3.4 必要なディレクトリの作成と権限設定
path.data
と path.logs
でデフォルト以外のパスを指定した場合、これらのディレクトリを手動で作成し、Elasticsearch を実行するユーザー(通常は elasticsearch
ユーザー)に書き込み権限を与える必要があります。
“`bash
例: /var/lib/elasticsearch/data と /var/log/elasticsearch を指定した場合
sudo mkdir -p /var/lib/elasticsearch/data
sudo mkdir -p /var/log/elasticsearch
Elasticsearch を実行するユーザーを作成 (存在しない場合)
例: CentOS/RHEL では /usr/share/elasticsearch/bin/elasticsearch-users で作成できる
または手動でユーザーを作成: sudo useradd elasticsearch
作成したディレクトリの所有者を elasticsearch ユーザーに変更
sudo chown -R elasticsearch:elasticsearch /var/lib/elasticsearch
sudo chown -R elasticsearch:elasticsearch /var/log/elasticsearch
インストールディレクトリの所有者も変更 (必要に応じて)
sudo chown -R elasticsearch:elasticsearch /usr/local/elasticsearch
“`
本番環境では、Elasticsearch を root
ユーザーで実行することは絶対に避けるべきです。セキュリティ上のリスクが高まります。elasticsearch
という名前の専用ユーザーを作成し、そのユーザーでサービスを実行するように設定してください。
3.5 systemd サービスとしての登録
手動でインストールした Elasticsearch をシステムの起動時に自動起動させたり、systemctl
コマンドで管理したりするためには、systemd ユニットファイルを作成するのが便利です。
“`bash
systemd ユニットファイルを /etc/systemd/system/ ディレクトリに作成
sudo nano /etc/systemd/system/elasticsearch.service
“`
以下のような内容でユニットファイルを記述します。User
, Group
, ExecStart
, PIDFile
などのパスは、実際のインストール場所や設定に合わせて修正してください。特に ExecStart
は、elasticsearch
実行ファイルへのフルパスを指定します。
“`systemd
[Unit]
Description=Elasticsearch
Documentation=https://www.elastic.co/guide/
Wants=network-online.target
After=network-online.target
[Service]
User=elasticsearch # Elasticsearch を実行するユーザー
Group=elasticsearch # Elasticsearch を実行するグループ
Environment=ES_HOME=/usr/local/elasticsearch # $ES_HOME のパス
EnvironmentFile=-/etc/sysconfig/elasticsearch # 環境変数を読み込むファイル (CentOS/RHELなど、任意)
PIDFile=/var/run/elasticsearch/elasticsearch.pid # PID ファイルのパス
Working directory for Elasticsearch.
WorkingDirectory=/usr/local/elasticsearch
Byte limits
See elasticsearch.yml and jvm.options
LimitMEMLOCK=infinity # メモリロック無制限 (memlock unlimited と同じ)
LimitNOFILE=65536 # ファイルディスクリプタ上限
LimitNPROC=4096 # プロセス数上限
LimitAS=infinity # アドレス空間上限 (通常 infinity)
ExecStart will run the elasticsearch command
ExecStart=/usr/local/elasticsearch/bin/elasticsearch -p ${PIDFile} –quiet
Standard output and standard error logging
StandardOutput=journald
StandardError=journald
Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536 # すでに Service セクションで定義
Specifies the maximum number of processes
LimitNPROC=4096 # すでに Service セクションで定義
Specifies the maximum amount of locked-in memory
LimitMEMLOCK=infinity # すでに Service セクションで定義
Disable swapping for Elasticsearch
Note: For versions 6.0 and later, this setting is deprecated.
Use vm.swappiness = 1 or the memlock setting instead.
If you still need to use it, set bootstrap.memory_lock: true in elasticsearch.yml
and uncomment this line.
In most cases, setting vm.swappiness=1 and LimitMEMLOCK=infinity in the service
file is sufficient.
ExecStartPre=/usr/local/elasticsearch/bin/elasticsearch-systemd-pre-exec
Restart if the main process exits too quickly with a status code of 0 or 1.
This ensures that if Elasticsearch exits due to bootstrapping checks failing
it does not enter an inactive state.
Other exit codes are not restarted as they usually indicate a configuration error.
Restart=on-failure
How long to wait before attempting a restart
RestartSec=10
The time, in seconds, to wait for the service to stop
TimeoutStopSec=120
[Install]
WantedBy=multi-user.target
“`
ユニットファイルを保存したら、systemd に設定を再読み込みさせ、サービスを有効化して起動します。
bash
sudo systemctl daemon-reload # systemd 設定を再読み込み
sudo systemctl enable elasticsearch # 起動時に自動起動するように設定
sudo systemctl start elasticsearch # サービスを起動
サービスのステータスは以下のコマンドで確認できます。
bash
sudo systemctl status elasticsearch
エラーが発生していないか確認してください。ログは journalctl -u elasticsearch
コマンドでも確認できます。
Windows の場合 (.zip)
Windows の場合は、.zip ファイルをダウンロードし、任意のディレクトリに展開します。elasticsearch.bat
を実行することでフォアグラウンドで起動できます。サービスのインストールは bin/elasticsearch-service.bat
コマンドを使用します。
“`powershell
ダウンロード、展開
例: C:\elasticsearch に展開
Expand-Archive -Path C:\path\to\elasticsearch-8.x.x-windows-x86_64.zip -DestinationPath C:\
設定ファイルの編集 (C:\elasticsearch\elasticsearch-8.x.x\config\elasticsearch.yml)
PowerShell でサービスのインストール (管理者として実行)
C:\elasticsearch\elasticsearch-8.x.x\bin\elasticsearch-service install
サービスの起動
Start-Service elasticsearch
“`
詳細については、公式ドキュメントを参照してください。
4. パッケージマネージャーを使ったインストール (APT/YUM/DNF)
Linux 環境では、Elasticsearch の公式リポジトリを追加し、パッケージマネージャー(APT for Debian/Ubuntu, YUM/DNF for RHEL/CentOS/Fedora)を使ってインストールするのが最も一般的で推奨される方法です。この方法の利点は、依存関係の解決、簡単なアップデート、そして標準化されたシステムサービス管理です。
4.1 Elastic Stack リポジトリの追加
まず、Elastic Stack の公式リポジトリをシステムに追加します。
Debian/Ubuntu (APT)
-
Elasticsearch の GPG キーをインポートします。
“`bash
# リポジトリ設定のためのパッケージをインストール (必要に応じて)
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-common-properties -yGPG キーのインポート
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elastic-8.x | sudo gpg –dearmor -o /usr/share/keyrings/elastic-keyring.gpg
2. Elastic リポジトリの定義を追加します。
bash
echo “deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/apt stable main” | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
“`
バージョン番号 (8.x) はインストールしたい Elastic Stack のバージョンに合わせて変更してください。 -
APT パッケージリストを更新します。
bash
sudo apt-get update
RHEL/CentOS/Fedora (YUM/DNF)
-
Elasticsearch の GPG キーをインポートします。
bash
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elastic-8.x
バージョン番号 (8.x) はインストールしたい Elastic Stack のバージョンに合わせて変更してください。 -
Elastic リポジトリの定義を追加します。
/etc/yum.repos.d/elasticsearch.repo
という名前でファイルを作成し、以下の内容を記述します。
ini
[elasticsearch-8.x]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/yum/os-release-8.x
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elastic-8.x
enabled=1
autorefresh=1
type=rpm-md
バージョン番号 (8.x) はインストールしたい Elastic Stack のバージョンに合わせて変更してください。baseurl
のos-release
部分は、使用しているディストリビューション(centos
,rhel
など)に合わせて調整が必要な場合がありますが、通常はos-release
で問題ありません。 -
YUM/DNF キャッシュを更新します。
“`bash
# CentOS/RHEL 7 以前 (YUM)
sudo yum makecacheCentOS/RHEL 8 以降, Fedora (DNF)
sudo dnf makecache
“`
4.2 Elasticsearch パッケージのインストール
リポジトリを追加したら、パッケージマネージャーを使って Elasticsearch をインストールします。
Debian/Ubuntu (APT)
bash
sudo apt-get install elasticsearch
RHEL/CentOS/Fedora (YUM/DNF)
“`bash
CentOS/RHEL 7 以前 (YUM)
sudo yum install elasticsearch
CentOS/RHEL 8 以降, Fedora (DNF)
sudo dnf install elasticsearch
“`
これで Elasticsearch がシステムにインストールされます。インストールディレクトリは /usr/share/elasticsearch
、設定ファイルは /etc/elasticsearch
、データディレクトリは /var/lib/elasticsearch
、ログディレクトリは /var/log/elasticsearch
になります。また、elasticsearch
という名前のシステムユーザーが自動的に作成されます。
4.3 設定ファイルの編集
設定ファイルは /etc/elasticsearch/
ディレクトリにあります。編集方法は公式ダウンロード版と同様ですが、ファイルの場所が異なります。
elasticsearch.yml
の編集
bash
sudo nano /etc/elasticsearch/elasticsearch.yml
公式ダウンロード版と同様に、cluster.name
, node.name
, network.host
, http.port
, transport.port
, discovery.seed_hosts
, cluster.initial_master_nodes
, path.data
, path.logs
, xpack.security.enabled
などの設定項目を確認・編集します。
パッケージインストールの場合、path.data
と path.logs
はデフォルトで /var/lib/elasticsearch
と /var/log/elasticsearch
に設定されていることが多く、これらは永続的な場所なので特別な理由がなければ変更する必要はありません。
jvm.options
の編集 (ヒープサイズ設定)
bash
sudo nano /etc/elasticsearch/jvm.options
こちらも公式ダウンロード版と同様に -Xms
と -Xmx
の値を適切に設定します。
4.4 systemd によるサービスの管理
パッケージマネージャーでインストールした場合、Elasticsearch は systemd または SysVinit サービスとして自動的に登録されます。systemd を使用している場合、以下のコマンドでサービスを管理できます。
“`bash
起動時に自動起動するように設定
sudo systemctl enable elasticsearch
サービスを起動
sudo systemctl start elasticsearch
サービスのステータス確認
sudo systemctl status elasticsearch
サービスを停止
sudo systemctl stop elasticsearch
サービスを再起動
sudo systemctl restart elasticsearch
サービスのログ確認
journalctl -u elasticsearch -f
“`
サービスの起動に失敗した場合は、sudo systemctl status elasticsearch
コマンドの出力や、journalctl -u elasticsearch
コマンドでログを確認し、原因を特定してください。一般的な原因としては、Java の問題、メモリ設定の問題、ファイルディスクリプタや vm.max_map_count
の上限設定、設定ファイルの記述ミス、ポートの競合、ファイアウォールなどが考えられます。
5. Docker を使ったインストール
Docker を使用すると、ホストシステムに直接影響を与えることなく、Elasticsearch をコンテナとして分離された環境で実行できます。これは開発環境やテスト環境で手軽に試すのに便利ですが、本番環境でもコンテナオーケストレーション(Kubernetes, Docker Swarm など)と組み合わせて広く利用されています。
5.1 Docker と Docker Compose のインストール
Docker および Docker Compose がシステムにインストールされている必要があります。インストール方法は OS によって異なるため、公式ドキュメントを参照してください。
- Docker Engine: https://docs.docker.com/engine/install/
- Docker Compose: https://docs.docker.com/compose/install/
5.2 単一ノードの起動 (Docker CLI)
Docker コマンドラインインターフェース (CLI) を使って、単一ノードの Elasticsearch を起動できます。
“`bash
永続化用のボリュームを作成 (データ保存のため)
docker volume create elasticsearch-data
Elasticsearch コンテナを起動
docker run -d \
–name elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e “discovery.type=single-node” \
-e “xpack.security.enabled=false” \ # 開発/テスト用にセキュリティ無効化 (本番では非推奨)
-v elasticsearch-data:/usr/share/elasticsearch/data \
elasticsearch:8.x.x # 使用したいバージョンを指定
“`
-d
: デタッチドモードでコンテナをバックグラウンドで実行します。--name elasticsearch
: コンテナにelasticsearch
という名前をつけます。-p 9200:9200 -p 9300:9300
: ホストの 9200 ポートと 9300 ポートをコンテナにマップします。-e "discovery.type=single-node"
: シングルノード構成であることを指定します。-e "xpack.security.enabled=false"
: セキュリティ機能を無効化します。これは開発/テスト環境でのみ推奨されます。本番環境では有効化し、初期セットアップが必要です。-v elasticsearch-data:/usr/share/elasticsearch/data
: ホスト上のelasticsearch-data
という名前付きボリュームを、コンテナ内の/usr/share/elasticsearch/data
にマウントし、データを永続化します。この設定は必須です。elasticsearch:8.x.x
: 使用する Elasticsearch イメージとそのバージョンを指定します。
セキュリティを有効にする場合 (xpack.security.enabled=true
)
Elasticsearch 8.x 以降はデフォルトでセキュリティが有効です。single-node
モードで起動すると、初期パスワードや Enrollment Token が自動的に生成されます。コンテナ起動時のログに表示されるので、それらを控えてください。
“`bash
docker run -d \
–name elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e “discovery.type=single-node” \
-v elasticsearch-data:/usr/share/elasticsearch/data \
elasticsearch:8.x.x
コンテナのログを確認して初期パスワードなどを取得
docker logs elasticsearch
“`
ログの中に以下のような情報が表示されます。
“`
…
-> Elasticsearch security features have been automatically configured!
-> Authentication is enabled and you have a trimmed set of users:
elastic – superuser
kibana_system – superuser
-> Request server credentials for the ‘elastic’ user with the password setup tool.
-> Generate an enrollment token for Kibana with ‘bin/elasticsearch-create-enrollment-token -s kibana’.
-> Generate an enrollment token for Beats with ‘bin/elasticsearch-create-enrollment-token -s beats’.
-> The password setup tool can be run at any time to configure users.
-> See the documentation for further instructions.
…
-> Password for the elastic user (generated temporarily): YOUR_GENERATED_PASSWORD
…
“`
YOUR_GENERATED_PASSWORD
が elastic ユーザーの初期パスワードです。これを控えておいてください。
後からパスワードを設定・リセットしたい場合は、コンテナ内で elasticsearch-reset-password
コマンドを実行します。
bash
docker exec -it elasticsearch /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -i
5.3 複数ノードクラスタの起動 (Docker Compose)
Docker Compose を使うと、複数ノードで構成される Elasticsearch クラスタを簡単に定義・起動できます。
docker-compose.yml
ファイルを作成します。
“`yaml
version: ‘3.8’
services:
elasticsearch1:
image: elasticsearch:8.x.x # 使用したいバージョンを指定
container_name: elasticsearch1
environment:
– node.name=elasticsearch1
– cluster.name=docker-cluster
– discovery.seed_hosts=elasticsearch1,elasticsearch2 # クラスタ内の他のノードを指定
– cluster.initial_master_nodes=elasticsearch1,elasticsearch2 # 初回起動時のマスター候補を指定
– bootstrap.memory_lock=true # メモリロックを有効化
– “ES_JAVA_OPTS=-Xms2g -Xmx2g” # JVM ヒープサイズを設定 (システムのメモリに合わせて調整)
– xpack.security.enabled=true # セキュリティ有効化 (本番環境では必須)
– xpack.security.transport.ssl.enabled=true
– xpack.security.http.ssl.enabled=true
ulimits:
memlock:
soft: -1
hard: -1
volumes:
– esdata1:/usr/share/elasticsearch/data # データ永続化ボリューム
ports:
– 9200:9200 # HTTP ポート (最初のノードのみホストに公開することが多い)
– 9300:9300 # Transport ポート (全てのノード間で通信が必要)
networks:
– elastic
elasticsearch2:
image: elasticsearch:8.x.x
container_name: elasticsearch2
environment:
– node.name=elasticsearch2
– cluster.name=docker-cluster
– discovery.seed_hosts=elasticsearch1,elasticsearch2
– cluster.initial_master_nodes=elasticsearch1,elasticsearch2
– bootstrap.memory_lock=true
– “ES_JAVA_OPTS=-Xms2g -Xmx2g”
– xpack.security.enabled=true
– xpack.security.transport.ssl.enabled=true
– xpack.security.http.ssl.enabled=true
ulimits:
memlock:
soft: -1
hard: -1
volumes:
– esdata2:/usr/share/elasticsearch/data
ports:
# – 9201:9200 # 必要に応じて別のポートでホストに公開
– 9301:9300 # 各ノードの Transport ポートはホストにマップするか、Docker ネットワーク内で通信させる
networks:
– elastic
depends_on:
– elasticsearch1 # 起動順序を指定 (任意だが推奨)
永続化用ボリューム
volumes:
esdata1:
driver: local
esdata2:
driver: local
内部通信用ネットワーク
networks:
elastic:
driver: bridge # または overlay (Swarmの場合)
“`
この docker-compose.yml
ファイルの解説:
services
: 実行するコンテナサービスを定義します。elasticsearch1
,elasticsearch2
: 各 Elasticsearch ノードのサービス名です。image: elasticsearch:8.x.x
: 使用する Elasticsearch イメージを指定します。container_name
: Docker コンテナに名前をつけます。environment
: コンテナ内で Elasticsearch の設定を環境変数で渡します。環境変数名はES_JAVA_OPTS
を除き、通常の設定項目名 (.
を_
に置き換えて大文字にしたもの、例えばcluster.name
はCLUSTER_NAME
) に対応します。node.name
: ノード名cluster.name
: クラスタ名discovery.seed_hosts
: ディスカバリに使用するノードリスト。サービス名 (elasticsearch1
,elasticsearch2
) を指定すると、Docker ネットワークの DNS で名前解決されます。cluster.initial_master_nodes
: 初回起動時のマスター候補リスト。ここでもサービス名を指定します。bootstrap.memory_lock=true
: メモリロック設定。ulimits
と合わせて使用します。ES_JAVA_OPTS
: JVM オプション。-Xms
と-Xmx
でヒープサイズを設定します。システムのメモリ容量に合わせて調整してください。xpack.security.enabled
: セキュリティ設定。
ulimits
: コンテナのリソース制限を設定します。memlock
を-1
に設定することでメモリロックを有効化します。volumes
: データ永続化のためのボリュームを定義・マウントします。esdata1
,esdata2
という名前付きボリュームをコンテナ内のデータパス (/usr/share/elasticsearch/data
) にマウントしています。ports
: ポートマッピングです。elasticsearch1
はホストの 9200/9300 をマップしていますが、elasticsearch2
は 9200 をマップしていません(必要に応じて追加)。9300 はノード間通信に必要です。networks
: コンテナ間で通信するためのネットワークを定義・参加させます。elastic
という名前のカスタムネットワークを作成しています。これにより、discovery.seed_hosts
でサービス名による名前解決が可能になります。depends_on
: サービスの依存関係を指定します。elasticsearch2
はelasticsearch1
の後に起動するように設定しています(必須ではありませんが、クラスタ初期化に役立つことがあります)。volumes
(最下部): 名前付きボリュームの実体を定義します。networks
(最下部): カスタムネットワークを定義します。
docker-compose.yml
ファイルを作成したら、以下のコマンドでクラスタを起動します。
bash
docker-compose up -d
サービスを停止するには:
bash
docker-compose down
セキュリティ有効時の初期設定
Docker Compose でセキュリティを有効にしてクラスタを起動した場合、elasticsearch1
コンテナのログに初期パスワードや Enrollment Token が表示されます。
bash
docker logs elasticsearch1
ログに表示される初期パスワードや Enrollment Token を使って、elastic ユーザーのパスワードを設定したり、Kibana をクラスタに接続したりします。パスワード設定ツールは、実行中のコンテナ内で実行できます。
“`bash
docker-compose exec elasticsearch1 /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
または auto オプションで自動生成
docker-compose exec elasticsearch1 /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
“`
対話モード (interactive
) を選択すると、各ユーザー(elastic, kibana_system, remote_monitoring_user など)のパスワードを設定できます。
6. インストール後の基本的な設定
インストール方法に関わらず、Elasticsearch を本番環境で運用する際には、いくつかの重要な設定を確認・変更する必要があります。
6.1 elasticsearch.yml
での重要設定の再確認
前述した設定項目以外にも、運用の安定性やパフォーマンスに関わる設定があります。
- Node Roles: ノードの役割(マスター候補、データノード、インジェストノード、MLノードなど)を明確に設定します。大規模クラスタでは役割を分けることが一般的です。
yaml
node.roles: [ master, data, ingest ] # マスター候補、データ、インジェストの役割を持つノード (デフォルト)
# node.roles: [ master ] # マスター候補のみ (データは保存しない)
# node.roles: [ data ] # データノードのみ (マスターにはなれない) - Discovery Settings: クラスタのディスカバリ設定は非常に重要です。
discovery.seed_hosts
以外にも、ネットワークの問題やクラスタの安定性に関わる設定があります。discovery.zen.ping_timeout
: ノードが他のノードからの応答を待つタイムアウト時間。ネットワークが不安定な場合やノード数が多い場合に調整が必要なことがあります。cluster.publish.timeout
: マスターノードがクラスタ状態の変更を他のノードに公開する際のタイムアウト。
- Shard Allocation Settings: シャードの割り当てに関する設定です。ディスク容量不足を防ぐための閾値設定などがあります。
cluster.routing.allocation.disk.threshold_enabled
: ディスク閾値によるシャード割り当て制限を有効化するか。cluster.routing.allocation.disk.watermark.low
: ディスク使用率がこの値を超えると、同じノードに新しいシャードが割り当てられなくなります (デフォルト 85%)。cluster.routing.allocation.disk.watermark.high
: ディスク使用率がこの値を超えると、そのノード上のシャードが他のノードに移動され始めます (デフォルト 90%)。cluster.routing.allocation.disk.watermark.flood_stage
: ディスク使用率がこの値を超えると、そのノードへの新しいインデックス書き込みがブロックされます (デフォルト 95%)。
- Indexing Buffer: インデックス中に使用されるメモリバッファのサイズ。大量のデータをインデックスする場合に調整します。
indices.memory.index.buffer_size
: デフォルトは 10% (JVM ヒープサイズの 10%)。
これらの設定は、Elasticsearch の稼働中に Cluster Update Settings API を使って動的に変更できるものもあります。
6.2 JVM ヒープサイズの再確認
jvm.options
で設定したヒープサイズが適切か、システムのメモリ使用状況を見ながら確認してください。前述の通り、システムメモリの半分(ただし 32GB 上限)が推奨値です。設定後、Elasticsearch を再起動する必要があります。
6.3 メモリロックの有効化
スワップを無効化した上で、JVM ヒープがスワップアウトされるのを防ぐためにメモリロック(bootstrap.memory_lock: true
)を有効にすることを検討してください。
elasticsearch.yml
でbootstrap.memory_lock: true
を設定します。- Elasticsearch を実行するユーザーにメモリロックの権限を与えます。
- systemd を使用している場合: ユニットファイルに
LimitMEMLOCK=infinity
を追加します。(パッケージインストールや systemd ユニットファイルを作成した場合、通常は自動で設定されています) limits.conf
を使用している場合:/etc/security/limits.conf
にelasticsearch - memlock unlimited
を追加します。
- systemd を使用している場合: ユニットファイルに
- 変更を反映するために、Elasticsearch サービスを再起動します。権限設定(
limits.conf
の場合)によっては、システム再起動が必要な場合もあります。
サービス起動後に、_nodes?filter_path=**.memory_lock
API を実行して、memory_lock
が true
になっているか確認できます。
bash
curl -X GET "localhost:9200/_nodes?filter_path=**.memory_lock&pretty" -u elastic:password --cacert /path/to/ca.crt # セキュリティ有効時
curl -X GET "localhost:9200/_nodes?filter_path=**.memory_lock&pretty" # セキュリティ無効時
6.4 セキュリティ設定 (X-Pack Security)
Elasticsearch 8.x 以降ではデフォルトでセキュリティが有効になっています。インストール直後は elastic
ユーザーが自動生成され、一時パスワードがログに出力されます。このパスワードを使って初期設定や管理を行います。
- パスワード設定:
elasticsearch-setup-passwords
ツールを使って、各ビルトインユーザー(elastic, kibana_system など)のパスワードを設定またはリセットします。- アーカイブ版:
$ES_HOME/bin/elasticsearch-setup-passwords interactive
- パッケージ版:
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
- Docker:
docker exec -it <container_name> /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
- アーカイブ版:
-
TLS/SSL 設定: 本番環境では、ノード間通信 (Transport Layer) およびクライアントとの通信 (HTTP Layer) に TLS/SSL を有効にして暗号化することが強く推奨されます。公式には Elastic が提供する Certutil や CA Utility ツールを使用して認証局 (CA) と証明書を生成し、設定ファイル (
elasticsearch.yml
) で指定します。
“`yaml
# elasticsearch.yml でのTLS/SSL設定例
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.certificate_authorities: [ “/etc/elasticsearch/certs/ca/ca.crt” ]
xpack.security.transport.ssl.certificate: /etc/elasticsearch/certs/instance/node.crt
xpack.security.transport.ssl.key: /etc/elasticsearch/certs/instance/node.keyxpack.security.http.ssl.enabled: true
xpack.security.http.ssl.verification_mode: certificate # または full (クライアント証明書認証の場合)
xpack.security.http.ssl.certificate_authorities: [ “/etc/elasticsearch/certs/ca/ca.crt” ]
xpack.security.http.ssl.certificate: /etc/elasticsearch/certs/instance/node.crt
xpack.security.http.ssl.key: /etc/elasticsearch/certs/instance/node.key
``
elastic` ユーザーは管理者権限を持っています。本番環境では、必要な権限のみを持つユーザーやロールを作成し、運用に使用することが一般的です。これは Kibana の Security 管理 UI または API を使用して行います。
証明書や鍵ファイルのパスは実際の場所に合わせます。
* **ユーザーとロール:** デフォルトの
セキュリティ設定は非常に重要であり、設定ミスはデータ漏洩や不正アクセスにつながる可能性があります。本番運用前に、公式ドキュメントの X-Pack Security の章を熟読し、正しく設定してください。
7. 起動と停止
インストール方法によって、Elasticsearch の起動・停止方法は異なります。
- 公式ダウンロード (tar.gz/zip):
- フォアグラウンド起動:
$ES_HOME/bin/elasticsearch
(Linux/macOS),$ES_HOME\bin\elasticsearch.bat
(Windows) - デーモン起動:
$ES_HOME/bin/elasticsearch -d
(Linux/macOS) - サービスとして起動/停止 (systemd):
sudo systemctl start elasticsearch
,sudo systemctl stop elasticsearch
- サービスとして起動/停止 (Windows Service):
Start-Service elasticsearch
,Stop-Service elasticsearch
- フォアグラウンド起動:
- パッケージマネージャー (APT/YUM/DNF):
- systemd を使用:
sudo systemctl start elasticsearch
,sudo systemctl stop elasticsearch
,sudo systemctl restart elasticsearch
- systemd を使用:
- Docker:
- Docker CLI:
docker start <container_name>
,docker stop <container_name>
- Docker Compose:
docker-compose up -d
,docker-compose down
- Docker CLI:
起動時にエラーが発生しないか、ログを確認することが重要です。
8. 動作確認
Elasticsearch が正常に起動したかを確認するには、HTTP REST API にアクセスするのが最も簡単な方法です。デフォルトでは 9200 ポートで Listen しています。
8.1 curl
コマンドを使った確認
ターミナルから curl
コマンドを使って、Elasticsearch の基本情報やクラスタの状態を取得できます。
“`bash
セキュリティが無効な場合 (開発/テスト環境など)
curl -X GET “localhost:9200/”
“`
成功すれば、Elasticsearch のバージョン情報などを含む JSON レスポンスが返ってきます。
json
{
"name" : "node-1",
"cluster_name" : "my-application-cluster",
"cluster_uuid" : "...",
"version" : {
"number" : "8.x.x",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "...",
"build_date" : "...",
"build_snapshot" : false,
"lucene_version" : "...",
"minimum_wire_compatibility_version" : "...",
"minimum_index_compatibility_version" : "..."
},
"tagline" : "You Know, for Search"
}
セキュリティが有効な場合 (8.x 以降のデフォルトなど)
セキュリティが有効な場合、認証情報と、TLS/SSL を使用している場合は CA 証明書を指定する必要があります。
“`bash
パスワード認証とHTTPS
elastic ユーザーと設定したパスワードを使用
–cacert オプションで CA 証明書のパスを指定 (自己署名証明書の場合など)
curl -X GET “https://localhost:9200/” -u elastic:YOUR_PASSWORD –cacert /path/to/ca.crt
証明書パスがわからない場合や一時的に無効化したい場合 (–insecure は非推奨)
curl -X GET “https://localhost:9200/” -u elastic:YOUR_PASSWORD –insecure
“`
以下の API も、クラスタの状態確認によく使われます。
- クラスタヘルス:
GET /_cat/health?v
bash
curl -X GET "localhost:9200/_cat/health?v" -u elastic:YOUR_PASSWORD --cacert /path/to/ca.crt
# 出力例: epoch timestamp cluster status index docs.count docs.deleted active_shards relocating_shards active_primary_shards initializing_shards unassigned_shards pending_tasks max_task_wait_time active_gid_shards
# 1678886400 10:00:00 my-application-cluster green 0 0 0 0 0 0 0 0 0 - 0
status
がgreen
(正常)、yellow
(レプリカ不足など)、またはred
(プライマリシャードが失われているなど) を示します。シングルノード構成で、まだデータがない状態であればgreen
になるはずです。 - ノード情報:
GET /_cat/nodes?v
bash
curl -X GET "localhost:9200/_cat/nodes?v" -u elastic:YOUR_PASSWORD --cacert /path/to/ca.crt
# 出力例: ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
# 127.0.0.1 15 50 10 0.10 0.15 0.12 dilm * node-1 - インデックス情報:
GET /_cat/indices?v
(データ投入後に使用)
bash
curl -X GET "localhost:9200/_cat/indices?v" -u elastic:YOUR_PASSWORD --cacert /path/to/ca.crt
# 出力例: health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
# green open my-index ... 1 1 10000 0 10mb 5mb
これらのコマンドで正常なレスポンスが得られれば、Elasticsearch は起動しています。
8.2 Kibana を使った確認 (任意)
Elasticsearch をGUIで操作したり、データを可視化したりするには、Kibana のインストールと連携が推奨されます。Kibana のインストール手順は Elasticsearch とは異なりますが、同じ Elastic Stack の一部として提供されています。
Kibana をインストールし、設定ファイル (kibana.yml
) で Elasticsearch の接続先を指定(elasticsearch.hosts
)します。セキュリティが有効な場合は、認証設定も行います。
Kibana を起動後、ブラウザで Kibana にアクセスし、Dev Tools コンソールで上記の curl
コマンドと同じ感覚で API を実行できます(例: GET /_cat/health?v
)。
9. トラブルシューティング
Elasticsearch のインストールや起動中に発生しうる一般的な問題とその解決策をいくつか紹介します。
- “max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]”
- 原因: Elasticsearch プロセスが使用できるファイルディスクリプタ数の上限が不足しています。
- 解決策: 前提条件の章で説明したように、
/etc/security/limits.conf
または systemd ユニットファイルでnofile
の上限値を 65536 以上に設定してください。
- “max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]”
- 原因:
vm.max_map_count
の値が不足しています。Lucene がメモリマッピングファイルを使用するために必要です。 - 解決策: 前提条件の章で説明したように、
/etc/sysctl.conf
でvm.max_map_count = 262144
を設定し、sysctl -p
で反映してください。
- 原因:
- Java 関連のエラー (“Unsupported major.minor version”, “Could not find or load main class”)
- 原因: Elasticsearch が使用できる互換性のある Java が見つからない、またはバージョンが合いません。
- 解決策: Elasticsearch に同梱されている OpenJDK を使用しているか確認してください。もしシステムの Java を使用している場合は、Elasticsearch のバージョンに対応した OpenJDK 8 以降がインストールされ、環境変数
JAVA_HOME
が正しく設定されているか確認してください。
- メモリ関連のエラー (“OutOfMemoryError”, “cannot allocate … bytes”, “gc overhead limit exceeded”)
- 原因: JVM ヒープサイズが小さすぎるか、システムに十分な空きメモリがありません。
- 解決策:
jvm.options
で-Xms
と-Xmx
の値を適切に(システムメモリの半分まで)増やしてください。また、システムに十分な空き物理メモリがあるか確認し、スワップが発生していないことを確認してください。
- クラスタリング関連のエラー (“failed to find any master-eligible nodes”, “timed out waiting for incoming connections”, “no valid master node discovered”)
- 原因: ノード間で正常に通信できていません。ファイアウォール、ネットワーク設定 (
network.host
,transport.port
)、またはディスカバリ設定 (discovery.seed_hosts
,cluster.initial_master_nodes
) の問題が考えられます。 - 解決策:
- ファイアウォールで 9300 ポートがノード間で開放されているか確認します。
elasticsearch.yml
のnetwork.host
が適切に設定されているか確認します(localhost
以外に設定されているかなど)。discovery.seed_hosts
にクラスタ内の他のノードの正確な IP アドレスまたはホスト名とポートが指定されているか確認します。- 新規クラスタ構築の場合は、
cluster.initial_master_nodes
に初期マスター候補ノードのnode.name
が正しく指定されているか確認します。
- 原因: ノード間で正常に通信できていません。ファイアウォール、ネットワーク設定 (
- セキュリティ関連のエラー (“AuthenticationException”, “no valid credentials provided”, “PKIX path building failed”)
- 原因: セキュリティが有効になっており、認証または証明書に問題があります。
- 解決策:
- HTTP API にアクセスする際に、正しいユーザー名とパスワードを指定しているか確認します (
-u user:password
オプション)。 - TLS/SSL が有効な場合、クライアント(curl など)が使用している CA 証明書が、Elasticsearch が使用している CA 証明書と一致しているか確認します。自己署名証明書の場合は
-k
(--insecure
) オプションで一時的に検証を無効にするか、--cacert
オプションで証明書パスを指定します。 - Kibana と連携する場合は、
kibana.yml
でelasticsearch.hosts
や認証情報が正しく設定されているか確認します。
- HTTP API にアクセスする際に、正しいユーザー名とパスワードを指定しているか確認します (
- 権限関連のエラー (“Permission denied”)
- 原因: Elasticsearch プロセスを実行しているユーザーが、データディレクトリ (
path.data
) やログディレクトリ (path.logs
) への書き込み権限を持っていません。 - 解決策:
chown
コマンドなどで、該当ディレクトリの所有者を Elasticsearch 実行ユーザーに変更し、適切な書き込み権限を与えてください。
- 原因: Elasticsearch プロセスを実行しているユーザーが、データディレクトリ (
これらの問題の解決には、Elasticsearch のログファイル(/var/log/elasticsearch/
または $ES_HOME/logs/
)を詳しく確認することが最も重要です。ログにはエラーメッセージや原因特定のためのヒントが含まれています。
10. まとめ
本記事では、Elasticsearch のインストールについて、前提条件から始まり、公式ダウンロード、パッケージマネージャー、Docker といった主要な方法、インストール後の基本的な設定、起動・停止、動作確認、トラブルシューティングまでを詳細に解説しました。
Elasticsearch のインストール方法は環境や目的に応じて様々ですが、どの方法を選択するにしても、Java の要件、メモリ設定(特にヒープサイズとスワップの無効化)、OS レベルの設定(vm.max_map_count
, ファイルディスクリプタ)、そしてセキュリティ設定は非常に重要です。これらの適切な設定が、Elasticsearch の安定したパフォーマンスと安全な運用に繋がります。
インストールと基本的な設定が完了したら、次はデータの投入、インデックスの設計、Kibana を使ったデータの可視化や分析、そして本番運用に向けたチューニングや監視に進んでいきます。
Elasticsearch は非常に強力で柔軟なツールです。この解説が、Elasticsearch の世界へ踏み出す一助となれば幸いです。Elastic Stack のドキュメントは非常に充実していますので、さらに高度な設定や機能について知りたい場合は、公式ドキュメントを参照することを強く推奨します。
これで、Elasticsearch のインストール手順に関する詳細な解説記事は完了です。