発見
発見は、クラスター形成モジュールがクラスターを形成するために他のノードを見つけるプロセスです。このプロセスは、Elasticsearchノードを起動したとき、またはノードがマスターノードが失敗したと信じたときに実行され、マスターノードが見つかるか、新しいマスターノードが選出されるまで続きます。
このプロセスは、1つ以上のシードホストプロバイダーからのシードアドレスのリストと、最後に知られているクラスターに存在したマスターノード候補のアドレスから始まります。このプロセスは2つのフェーズで動作します。最初に、各ノードはシードアドレスをプローブし、各アドレスに接続して接続されているノードを特定し、それがマスターノード候補であることを確認しようとします。次に、成功した場合、リモートノードに自分の知っているすべてのマスターノード候補のリストを共有し、リモートノードはそのノードの候補を返します。ノードは、発見したすべての新しいノードをプローブし、それらの候補を要求し、などを続けます。
ノードがマスターノード候補でない場合、選出されたマスターノードを発見するまでこの発見プロセスを続けます。選出されたマスターノードが発見されない場合、ノードはdiscovery.find_peers_interval
の後に再試行し、デフォルトは1s
です。
ノードがマスターノード候補である場合、選出されたマスターノードを発見するか、選挙を完了するために十分なマスターレスのマスターノード候補を発見するまでこの発見プロセスを続けます。これらのいずれかが十分に早く発生しない場合、ノードはdiscovery.find_peers_interval
の後に再試行し、デフォルトは1s
です。
マスターが選出されると、通常は意図的に停止されるまで選出されたマスターとして残ります。また、障害検出がクラスターを故障と判断した場合、マスターとしての役割を停止することもあります。ノードが選出されたマスターでなくなると、再び発見プロセスを開始します。
発見に関する問題のトラブルシューティングについては、発見のトラブルシューティングを参照してください。
シードホストプロバイダー
デフォルトでは、クラスター形成モジュールはシードノードのリストを構成するために2つのシードホストプロバイダーを提供します:設定ベースとファイルベースのシードホストプロバイダーです。これにより、発見プラグインを介してクラウド環境や他の形式のシードホストプロバイダーをサポートするように拡張できます。シードホストプロバイダーは、discovery.seed_providers
設定を使用して構成され、デフォルトでは設定ベースのホストプロバイダーになります。この設定は、異なるプロバイダーのリストを受け入れ、クラスターのシードホストを見つけるための複数の方法を利用できるようにします。
各シードホストプロバイダーは、シードノードのIPアドレスまたはホスト名を提供します。ホスト名が返される場合、これらはDNSルックアップを使用してIPアドレスに解決されます。ホスト名が複数のIPアドレスに解決される場合、Elasticsearchはこれらのすべてのアドレスでシードノードを見つけようとします。ホストプロバイダーがノードのTCPポートを明示的に指定しない場合、transport.profiles.default.port
で指定されたポート範囲の最初のポートを暗黙的に使用します。transport.port
が設定されていない場合はtransport.port
を使用します。並行ルックアップの数はdiscovery.seed_resolver.max_concurrent_resolvers
によって制御され、デフォルトは10
です。各ルックアップのタイムアウトはdiscovery.seed_resolver.timeout
によって制御され、デフォルトは5s
です。DNSルックアップはJVM DNSキャッシングの影響を受けることに注意してください。
設定ベースのシードホストプロバイダー
設定ベースのシードホストプロバイダーは、ノード設定を使用してシードノードのアドレスの静的リストを構成します。これらのアドレスはホスト名またはIPアドレスとして指定できます。ホスト名として指定されたホストは、各発見ラウンド中にIPアドレスに解決されます。
ホストのリストは、discovery.seed_hosts
静的設定を使用して設定されます。例えば:
Yaml
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
ポートはtransport.profiles.default.port にデフォルト設定され、指定されていない場合はtransport.port にフォールバックします。 |
|
ホスト名が複数のIPアドレスに解決される場合、Elasticsearchはすべての解決されたアドレスに接続しようとします。 |
ファイルベースのシードホストプロバイダー
ファイルベースのシードホストプロバイダーは、外部ファイルを介してホストのリストを構成します。Elasticsearchは、このファイルが変更されると再読み込みし、シードノードのリストが動的に変更されることができ、各ノードを再起動する必要がありません。例えば、これはDockerコンテナ内で実行されるElasticsearchインスタンスに、ノードの起動時に知られていない可能性のある接続先のIPアドレスのリストを動的に供給する便利なメカニズムを提供します。
ファイルベースの発見を有効にするには、file
ホストプロバイダーをelasticsearch.yml
ファイルで次のように構成します:
Yml
discovery.seed_providers: file
次に、以下に説明する形式で$ES_PATH_CONF/unicast_hosts.txt
にファイルを作成します。unicast_hosts.txt
ファイルに変更が加えられるたびに、新しい変更がElasticsearchによって取得され、新しいホストリストが使用されます。
ファイルベースの発見プラグインは、elasticsearch.yml
のユニキャストホストリストを拡張します。discovery.seed_hosts
に有効なシードアドレスがある場合、Elasticsearchはunicast_hosts.txt
で提供されたアドレスに加えてそれらのアドレスを使用します。
例えば、これは発見に参加する4つのノードを持つクラスターの`````unicast_hosts.txt`````の例です。いくつかはデフォルトポートで実行されていません:
#### Txt
``````txt
10.10.10.5
10.10.10.6:9305
10.10.10.5:10005
# IPv6アドレス
[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:9301
`
ホスト名はIPアドレスの代わりに許可され、上記のようにDNSによって解決されます。IPv6アドレスは、必要に応じてポートが括弧の後に来るように、括弧内に指定する必要があります。
このファイルにコメントを追加することもできます。すべてのコメントは、#
で始まる行に表示されなければなりません(つまり、コメントは行の途中で始めることはできません)。
EC2ホストプロバイダー
EC2発見プラグインは、AWS APIを使用してシードノードのリストを見つけるホストプロバイダーを追加します。
Azure Classicホストプロバイダー
Azure Classic発見プラグインは、Azure Classic APIを使用してシードノードのリストを見つけるホストプロバイダーを追加します。
Google Compute Engineホストプロバイダー
GCE発見プラグインは、GCE APIを使用してシードノードのリストを見つけるホストプロバイダーを追加します。