クラスターのブートストラップ

Elasticsearch クラスターを初めて起動するには、クラスター内の 1 つ以上のマスター候補ノードで初期の マスター候補ノード を明示的に定義する必要があります。これを クラスターのブートストラップ と呼びます。これは、クラスターが初めて起動する際にのみ必要です。新しく起動したノードが稼働中のクラスターに参加する場合、この情報はクラスターの選出されたマスターから取得されます。

初期のマスター候補ノードのセットは、cluster.initial_master_nodes 設定 で定義されます。これは、各マスター候補ノードに対して次のいずれかの項目を含むリストに設定する必要があります:

  • ノードの ノード名
  • node.name が設定されていない場合、ノードのホスト名。node.name はノードのホスト名がデフォルトとなるためです。完全修飾ホスト名またはベアホスト名のいずれかを使用する必要があります システム構成に応じて
  • ノードの トランスポート公開アドレス の IP アドレス。ノードの node.name を使用できない場合に必要です。通常、これは network.host が解決される IP アドレスですが、これをオーバーライドすることも可能です
  • ノードの公開アドレスの IP アドレスとポートを IP:PORT の形式で指定します。ノードの node.name を使用できず、複数のノードが単一の IP アドレスを共有している場合に必要です。

マスター非候補ノードに cluster.initial_master_nodes を設定しないでください。

クラスターが形成された後は、各ノードの設定から cluster.initial_master_nodes 設定を削除し、このクラスターのために再度設定しないでください。既存のクラスターに参加するノードにこの設定を構成しないでください。再起動するノードにこの設定を構成しないでください。フルクラスターの再起動を行う際にこの設定を構成しないでください。

クラスターが形成された後に cluster.initial_master_nodes をそのままにしておくと、将来の誤設定により、既存のクラスターと並行して新しいクラスターがブートストラップされるリスクがあります。この状況からデータを失うことなく回復することはできないかもしれません。

新しいクラスターを作成する最も簡単な方法は、マスター候補ノードの 1 つを選択し、それが単一ノードクラスターにブートストラップされ、他のすべてのノードが参加するようにすることです。この単純なアプローチは、他のマスター候補ノードがクラスターに参加するまで障害に対して耐性がありません。たとえば、ノード名 master-a を持つマスター候補ノードがある場合、次のように構成します(他のすべてのノードの設定から cluster.initial_master_nodes を省略します):

Yaml

  1. cluster.initial_master_nodes: master-a

フォールトトレラントなクラスターのブートストラップには、すべてのマスター候補ノードを使用します。たとえば、クラスターに ノード名 master-amaster-bmaster-c の 3 つのマスター候補ノードがある場合、次のようにすべてを構成します:

Yaml

  1. cluster.initial_master_nodes:
  2. - master-a
  3. - master-b
  4. - master-c

cluster.initial_master_nodes を設定されている各ノードで同じノードのリストに設定する必要があります。そうしないと、ブートストラップ中に単一のクラスターが形成されることが保証されません。cluster.initial_master_nodes が設定されているノード間で異なる場合、複数のクラスターをブートストラップする可能性があります。この状況からデータを失うことなく回復することは通常不可能です。

ノード名の形式は一致する必要があります

cluster.initial_master_nodes リストで使用されるノード名は、ノードの node.name プロパティと正確に一致する必要があります。デフォルトでは、ノード名はマシンのホスト名に設定され、システム構成によっては完全修飾されている場合もそうでない場合もあります。各ノード名が master-a.example.com のような完全修飾ドメイン名である場合、cluster.initial_master_nodes リストでも完全修飾ドメイン名を使用する必要があります。逆に、ノード名がベアホスト名(.example.com サフィックスなし)である場合、cluster.initial_master_nodes リストでもベアホスト名を使用する必要があります。完全修飾名とベアホスト名の混合を使用するか、node.namecluster.initial_master_nodes の間に他の不一致がある場合、クラスターは正常に形成されず、次のようなログメッセージが表示されます。

テキスト

  1. [master-a.example.com] master not discovered yet, this node has
  2. not previously joined a bootstrapped (v7+) cluster, and this
  3. node must discover master-eligible nodes [master-a, master-b] to
  4. bootstrap a cluster: have discovered [{master-b.example.com}{...

このメッセージは、ノード名 master-a.example.commaster-b.example.com、および cluster.initial_master_nodes エントリ master-amaster-b を示しており、これらが正確に一致しないことがこのメッセージから明らかです。

クラスター名の選択

cluster.name 設定により、互いに分離された複数のクラスターを作成できます。ノードは、最初に互いに接続する際にクラスター名に同意していることを確認し、Elasticsearch はすべてのノードが同じクラスター名を持つ場合にのみクラスターを形成します。クラスター名のデフォルト値は elasticsearch ですが、クラスターの論理名を反映するように変更することをお勧めします。

開発モードでの自動ブートストラップ

デフォルトでは、各ノードは最初に起動する際に自動的に単一ノードクラスターにブートストラップされます。次の設定のいずれかが構成されている場合、自動ブートストラップは行われません:

  • discovery.seed_providers
  • discovery.seed_hosts
  • cluster.initial_master_nodes

既存のクラスターに新しいノードを追加するには、discovery.seed_hosts またはその他の関連する発見設定を構成して、新しいノードがクラスター内の既存のマスター候補ノードを発見できるようにします。新しいマルチノードクラスターをブートストラップするには、クラスターのブートストラップに関するセクション に記載されているように cluster.initial_master_nodesdiscovery.seed_hosts またはその他の関連する発見設定を構成します。

単一クラスターの形成

Elasticsearch ノードが既存のクラスターに参加したり、新しいクラスターをブートストラップしたりすると、別のクラスターには参加しません。Elasticsearch は、形成された後に別々のクラスターを統合することはありません。たとえその後、すべてのノードを単一のクラスターに構成しようとしてもです。これは、データ損失のリスクなしにこれらの別々のクラスターを統合する方法がないためです。GET / によって各ノードで報告されるクラスター UUID を確認することで、別々のクラスターが形成されていることを確認できます。

既存のクラスターにノードを追加するつもりだったが、代わりに別の単一ノードクラスターをブートストラップした場合は、再度開始する必要があります:

  • 1. ノードをシャットダウンします。
  • 2. ノードの データフォルダー の内容を削除して完全に消去します。
  • 3. discovery.seed_hosts または discovery.seed_providers およびその他の関連する発見設定を構成します。cluster.initial_master_nodes がどのノードにも設定されていないことを確認してください。
  • 4. ノードを再起動し、既存のクラスターに参加することを確認します。自分自身の単一ノードクラスターを形成しないことを確認します。

新しいマルチノードクラスターを形成するつもりだったが、代わりに単一ノードクラスターのコレクションをブートストラップした場合は、再度開始する必要があります:

  • 1. すべてのノードをシャットダウンします。
  • 2. 各ノードの データフォルダー の内容を削除して完全に消去します。
  • 3. 上記のように cluster.initial_master_nodes を構成します。
  • 4. discovery.seed_hosts または discovery.seed_providers およびその他の関連する発見設定を構成します。
  • 5. すべてのノードを再起動し、単一のクラスターが形成されていることを確認します。
  • 6. 各ノードの設定から cluster.initial_master_nodes を削除します。