Elasticsearchクラスター設定:ステップバイステップ構成ガイド

安全なノードロール、ディスカバリー設定、ネットワーキング、ヒープサイズ、ヘルスチェックを備えたElasticsearchクラスターを構成します。

Elasticsearchクラスター設定:ステップバイステップ構成ガイド

Elasticsearchクラスターのセットアップは、主にいくつかの初期選択を正しく行うことにかかっています。ノード名、ディスカバリー、ロール、ネットワーキング、メモリです。これらの基本が間違っていると、クラスターが不安定に形成されたり、誤ったインターフェースで公開されたり、ノード再起動時に問題が発生したりする可能性があります。

このガイドでは、Elasticsearchを実際のワークロードの背後に配置する前に確認すべきコア設定について説明します。例ではelasticsearch.ymlを使用し、小規模な3ノードクラスターを想定していますが、スケールアウトする場合も同じチェックが適用されます。

前提条件

設定に入る前に、以下の準備が整っていることを確認してください。

  • Javaランタイム: 多くのElasticsearchディストリビューションにはバンドルされたJDKが含まれています。独自のJavaランタイムを提供する場合は、Elasticsearchバージョンのサポートマトリックスを確認してください。
    java -version
    
  • システムリソース: Elasticsearchノードに十分なRAM、CPU、ディスク容量を割り当てます。正確な要件は、データ量とクエリの複雑さによって異なります。
  • ネットワークアクセス: ノードが設定されたトランスポートポート(デフォルトは9300)で相互に通信できることを確認します。

インストール

このガイドは設定に焦点を当てていますが、成功するセットアップは正しいインストールから始まります。Elasticsearchは、パッケージマネージャー(apt、yum)、アーカイブのダウンロード、またはDockerを使用してインストールできます。オペレーティングシステムやデプロイ方法に固有の詳細なインストール手順については、公式Elasticsearchドキュメントを参照してください。

コア設定ファイル

Elasticsearchの主要な設定ファイルはelasticsearch.ymlで、通常はElasticsearchインストールのconfig/ディレクトリにあります。このファイル内の主要な設定がクラスターの動作を決定します。

クラスター設定:主要な設定ディレクティブ

1. クラスター名(cluster.name

この設定はクラスターを一意に識別します。同じクラスター内のすべてのノードは、同じcluster.nameを共有する必要があります。設定されていない場合、デフォルトはelasticsearchです。

  • 重要性: ノードが正しいクラスターを検出して参加するために不可欠です。同じネットワーク内の異なるクラスターには、異なる名前を付ける必要があります。
  • 例(elasticsearch.yml):
    cluster.name: my-production-cluster
    

2. ノードロール(node.roles

Elasticsearchノードには、リソース割り当てとパフォーマンスを最適化するために特定のロールを割り当てることができます。一般的なロールには、masterdataingestmlがあります。小規模なクラスターの場合、単一のノードが複数のロールを持つことができます。

  • マスター候補ノード: インデックスの作成/削除、ノードの追跡、シャードの割り当てなど、クラスター全体のアクションを担当します。安定性のために、本番環境では専用のマスターノードを持つことをお勧めします。
    node.roles: [ master ]
    
  • データノード: データを保存し、インデックス作成や検索などのデータ関連操作を実行します。パフォーマンスには専用のデータノードが重要です。
    node.roles: [ data ]
    
  • インジェストノード: インデックス作成前にドキュメントを前処理するために使用されます(例:インジェストパイプラインの使用)。
    node.roles: [ ingest ]
    
  • 機械学習ノード: 異常検出やその他のタスクのために機械学習機能を実行します。
    node.roles: [ ml ]
    
  • コーディネート専用ノード: 検索や一括リクエストを処理しますが、データを保存したり、マスター選出に参加したりしません。データノードやマスターノードから重いクエリ負荷をオフロードするのに役立ちます。
    node.roles: []
    

ベストプラクティス: 本番環境では、フォールトトレランスとパフォーマンスを向上させるために、ノードを特定のロールに専念させます(例:マスターノードとデータノードを分離)。小規模なセットアップでは、ノードが複合ロールを持つことができます。

3. ネットワーク設定(network.hosthttp.porttransport.port

これらの設定は、Elasticsearchノードがどのように通信するかを制御します。

  • network.host ノードがバインドするIPアドレスまたはホスト名。マルチノードクラスターの場合、他のノードから到達可能なIPアドレスに設定します。0.0.0.0を使用すると、利用可能なすべてのネットワークインターフェースにバインドします。
    network.host: 192.168.1.100
    # または
    network.host: _site_
    # または
    network.host: 0.0.0.0
    
  • http.port HTTP REST APIのポート(デフォルト:9200)。
    http.port: 9200
    
  • transport.port ノード間通信のポート(デフォルト:9300)。
    transport.port: 9300
    

警告: ファイアウォールルールに注意して、ノードがtransport.portで通信できることを確認してください。

4. ディスカバリー設定(discovery.seed_hostscluster.initial_master_nodes

これらの設定は、ノードがクラスターを見つけて参加するために重要です。

  • discovery.seed_hosts 新しいノードがクラスターを発見するために接続できる、クラスター内の他のノードのIPアドレスまたはホスト名のリスト。
    discovery.seed_hosts:
      - "host1:9300"
      - "host2:9300"
      - "192.168.1.101:9300"
    
  • cluster.initial_master_nodes 新しいクラスターをブートストラップするためだけに使用されるマスター候補ノード名のリスト。クラスターが形成された後は、この設定を削除します。古いブートストラップ設定を残しておくと、後の再構築や偶発的なクラスター形成時に混乱を引き起こす可能性があります。
    cluster.initial_master_nodes:
      - "node-1"
      - "node-2"
      - "node-3"
    

ヒント: クラウド環境や動的なネットワークでは、DNSやクラウドプロバイダーのディスカバリーメカニズムなどのサービスを使用することを検討してください。

マルチノードクラスターの設定

マルチノードクラスターを設定するには、各ノードのelasticsearch.ymlファイルを構成します。以下を確認してください。

  1. すべてのノードで**cluster.name**が同一であること。
  2. 各ノードに一意の**node.name**があること(例:node-1node-2)。
  3. **network.host**が他のノードから到達可能なIPアドレスに設定されていること。
  4. **discovery.seed_hosts**に、マスター候補ノードのクォーラム以上のアドレスがリストされていること。
  5. **cluster.initial_master_nodes**には、最初のクラスターブートストラップ時にのみ、初期マスター候補ノードの名前が含まれていること。

node-1の例:

cluster.name: my-production-cluster
node.name: node-1
node.roles: [ master, data ]
network.host: 192.168.1.100
http.port: 9200
transport.port: 9300
discovery.seed_hosts:
  - "192.168.1.100:9300"
  - "192.168.1.101:9300"
  - "192.168.1.102:9300"
cluster.initial_master_nodes:
  - "node-1"
  - "node-2"
  - "node-3"

node-2の例(同様に、node.name: node-2):

cluster.name: my-production-cluster
node.name: node-2
node.roles: [ master, data ]
network.host: 192.168.1.101
http.port: 9200
transport.port: 9300
discovery.seed_hosts:
  - "192.168.1.100:9300"
  - "192.168.1.101:9300"
  - "192.168.1.102:9300"
cluster.initial_master_nodes:
  - "node-1"
  - "node-2"
  - "node-3"

5. ヒープサイズ(jvm.options

Elasticsearchは大量のメモリを使用します。Java仮想マシン(JVM)のヒープサイズは、jvm.optionsファイル(通常はconfig/ディレクトリ内)で設定します。ヒープサイズの変更によるパフォーマンスの問題を避けるために、最小ヒープサイズと最大ヒープサイズを同じ値に設定することをお勧めします。

  • ベストプラクティス: ヒープサイズはシステムRAMの約半分以下に設定し、ファイルシステムキャッシュ用にメモリを残します。特大のヒープは避けてください。多くのデプロイメントは、圧縮通常オブジェクトポインタのしきい値(一般的には約30 GB台前半ですが、JVMによって異なります)を下回っています。

例(jvm.options):

-Xms4g
-Xmx4g

これにより、初期ヒープサイズと最大ヒープサイズの両方が4ギガバイトに設定されます。

6. シャード割り当てとレプリケーション(cluster.routing.*

これらの設定は、シャードがノード間でどのように分散および複製されるかを制御します。

  • cluster.routing.allocation.disk.watermark.lowhighflood_stage:ディスク容量が不足しているディスクへのシャード割り当てを防ぐためのしきい値。
  • cluster.routing.allocation.enable シャード割り当てを制御します(例:allprimariesnew_primariesnone)。

例:

cluster.routing.allocation.disk.watermark.low: "85%"
cluster.routing.allocation.disk.watermark.high: "90%"
cluster.routing.allocation.disk.watermark.flood_stage: "95%"

クラスターヘルスの確認

ノードが起動したら、クラスターヘルスAPIを使用してクラスターの健全性とステータスを確認できます。

curl -X GET "localhost:9200/_cluster/health?pretty"

主な出力フィールド:

  • status green(すべてのシャードが割り当て済み)、yellow(一部のレプリカが未割り当て)、red(一部のプライマリシャードが未割り当て)。
  • number_of_nodes クラスター内のノードの総数。
  • number_of_data_nodes データノードとして指定されたノードの数。
  • active_shardsrelocating_shardsinitializing_shardsunassigned_shards

ヒント: greenステータスを目指してください。yellowステータスは、データは安全ですが(プライマリシャードは割り当て済み)、高可用性のために十分なレプリカがない可能性があることを示します。redステータスはデータが危険にさらされており、即時の対応が必要です。

次のステップ

Elasticsearchクラスターのセットアップが成功したら、通常は次の手順に進みます。

  • インデックス作成: データの保存方法と整理方法を定義します。
  • マッピング: フィールドのデータ型を指定して、ドキュメントのスキーマを定義します。
  • アナライザー: 効果的な全文検索のためにテキスト分析を構成します。
  • セキュリティ: 認証と認可を実装します。

このガイドは、安定したパフォーマンスの高いElasticsearchクラスターのための基本的な基盤を提供します。特定のワークロードに基づいた継続的な監視とチューニングが、長期的な成功の鍵です。