自動スケーリング環境でConsulとそのクォーラムを管理する方法は?


8

私たちはサービスの発見にConsulを使用する自動スケーリングDocker環境を持っています。これらの環境では、数分ごとに1つのインスタンスを追加または削除できます。

初期のConsulテストでは、Consulが定足数を失うのは非常に簡単であることがわかりました。おそらく単純に、最初の実験は、すべてのインスタンスでConsulサーバーを起動し、そのConsulサーバーをクラスターに参加させるセットアップでした。その部分はうまく機能していました。

ただし、非常にスケーラブルな環境では、Consulは到達不能なノードを迅速に(約72時間かかりますか?)定足数を失います。

GitHub:https : //github.com/hashicorp/consul/issues/454#issuecomment-125767550のこの問題に関するほぼ2年前からのarmonの応答を見てきました

これらの問題のほとんどは、正常な休暇をとるというデフォルトの動作が原因です。私たちのメンタルモデルでは、サーバーは長命であり、予期しない停電、または正常なメンテナンス(クラスターを離れる必要がある場合)以外の理由でシャットダウンしません。振り返ってみると、それは悪いデフォルトでした。これはほとんどすべて、Consulサーバーを-9で強制終了することで回避でき、電力損失のシミュレーションに影響を与えます。

専用の長期間有効なノードを実行しないようにしようとしていました。どの時点でも、自動スケーリンググループからN / 2 + 1インスタンスを削除しないことに注意してください。EC2クラスターは、ほとんどのノードにいつでも到達でき、ノードをConsul(または他のツール)クラスターから削除するかどうかを投票できる必要があります。


次のようなデータがないと、意味のある答えは得られないと思います。インスタンスの母集団の大きさ(数)は?基礎となるクォーラム/コンセンサスメカニズムをデバッグして、非アクティブなメンバーの取得で遅延が発生する原因を確認しましたか?インスタンスが削除されるタイミングは何ですか?領事インスタンスが実際にその終焉の言葉(優雅かそうでないか)を残りのASGに送信する時間があるかどうかを追跡しましたか?
Michael Bravo 2017年

それらを「サーバーモード」または「クライアントモード」として起動していますか?leave_on_terminateのドキュメントでは、「クライアントモード」はデフォルトでtrueになると記載されています。私には、「サーバーモード」として開始された領事エージェントは、あなたが説明したよりも長く
存続

皆さん、ありがとうございました。テンシバイの答えは私たちが探していたものです。
Alexandre

回答:


6

leave_on_terminateオプションをtrueに設定します。ドキュメントに従って

leave_on_terminate有効にすると、エージェントがTERMシグナルを受信すると、Leaveメッセージをクラスターの残りの部分に送信し、適切に終了します。この機能のデフォルトの動作は、エージェントがクライアントまたはサーバーとして実行されているかどうかによって異なります(Consul 0.7より前のバージョンでは、デフォルト値は無条件にfalseに設定されていました)。クライアントモードのエージェントでは、これはデフォルトでtrueになり、サーバーモードのエージェントでは、これはデフォルトでfalseになります。

ノードが正常にシャットダウンされると、シャットダウン前にすべてのプロセスにSIGTERMが送信されます。これは、領事エージェントのこの設定によりクラスターを離れるため、再起動してクラスター内のクラスターに戻ることができるノードとは見なされません。数時間(見積もりでは、デフォルトでこのようになっています)。


これがオンになっていると、死んだクライアントの領事はすぐに刈り取られますか、それともまだ遅延がありますか?このオプションをクライアントモードのConsulでテストしましたが、実行後shutdown -h nowもデッドノードが表示されます...
Casper

@Casperこれが期待どおりに動作しない可能性があるさまざまな方法があります。デーモンシステムがconsul-clientに正常に停止するのに十分な時間を与えたかどうかによって異なります(コマンドとしてではなく、デーモンマネージャーでクライアントを起動しなかった場合) )
Tensibai、

返信いただきありがとうございます。しばらく時間が経過しました:)私の目標は、デッドノードのリープ時間を短くすることです。デフォルトの72時間は長すぎ、クライアントノードのリープ時間をカスタマイズする方法がないようです
Casper

@Casper上で言ったように、アドバイスを与えるには詳細が必要です、systemdセットアップでは、停止部分を微調整して、シャットダウンプロセスを続行する前にクライアントを適切に停止させて、それ自体を削除するか、どこかにバグがあります、しかし現在の情報では推測しかできず、SEサイトはこの種のデバッグにうまく適合していません
Tensibai
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.