私たちはサービスの発見に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(または他のツール)クラスターから削除するかどうかを投票できる必要があります。