10

Consul を使用して、1 つのサービスのみがタスクを実行していることを確認するにはどうすればよいですか?

http://www.consul.io/の例に従いましたが、どちらに進むべきか 100% 確信が持てません。KV を使用する必要がありますか? サービスを利用する必要がありますか? または、サービスをヘルス チェックとして登録し、一定の間隔でクラスターから呼び出せるようにする必要がありますか?

たとえば、複数のデータセンターがあるとします。すべてのデータセンター内では、多くのサービスが実行されています。これらのサービスはすべてメールを送信できます。これらのサービスは、送信するメールがあるかどうかを確認する必要があります。ある場合は、メールを送信します。ただし、同じメールが複数回送信されることは望ましくありません。

すべての電子メールが送信され、複数回送信された電子メールがないことを確認するにはどうすればよいでしょうか?

他のテクノロジを使用してこれを行うこともできますが、Consul を使用してこれを実装しようとしています。

4

2 に答える 2

7

これは、まさにConsul Distributed Locksの使用例です。

たとえば、フェイルオーバーのために異なる AWS アベイラビリティーゾーンに 3 つのサーバーがあるとします。それぞれが次のように起動されます。

consul lock -verbose lock-name ./run_server.sh

Consul エージェントは./run_server.sh、最初にロックを取得したサーバーに対してのみコマンドを実行します。ロックされたサーバーで障害が発生した場合./run_server.sh、Consul エージェントはロックを解放し、最初にロックを取得した別のノードが実行され./run_server.shます。このようにして、フェイルオーバーが行われ、一度に 1 つのサーバーのみが実行されます。Consul のヘルス チェックを適切に登録すると、最初のノードのサーバーに障害が発生したことを確認できます。consul lock ...そのノードを修復して再起動すると、ロックを取得できるまでブロックされます。

現在、分散ロックは単一の Consul データセンター内でのみ発生します。ただし、データセンターを構成する Consul サーバーを決定するのはあなた次第であるため、問題を解決できるはずです。Federated Consul Datacenters 間でロックしたい場合は、ロードマップ アイテムであるため、それを待つ必要があります。

于 2015-06-26T02:32:56.550 に答える