0

こんにちは、スタック コミュニティです。

特定の問題ケースの Redis センチネルについて質問があります。マルチ AZ で AWS を使用して、sensu クラスターを作成します。

eu-central-1a には、sensu+redis(M)、RBMQ+Sentinel、およびその他の 2 つの Sentinel があります。eu-central-1b でも同じですが、この AZ では redis が私のスレーブです。

問題が発生し、eu-central-1a が eu-central-1b と通信できない場合はどうなりますか? 私が思うに、eu-central-1b の Sentinel は私の redis スレーブをマスターに昇格させる必要があります。なぜなら、彼は私の redis マスターに連絡できないからです。したがって、2 つの異なる AZ で 2 つの redis マスターを一緒に実行する必要があります。

しかし、AZ 間でリンクが取得されると、2 つの異なるデータを持つ 2 つのマスターがまだ存在します。この場合はどうなりますか?1 つのマスターがスレーブになり、データが失われることなく複製されますか? マスターを再起動する必要がありますか?マスターはスレーブになりますか?

4

1 に答える 1

0

たとえば、Sentinel はマスターへの変更を検出します。

マスターがダウンして到達不能になると、新しいスレーブが選択されます。quorumこれは、複数のセンチネルがマスターがダウンしたことに同意する場合に基づいています。次にfailover発生します。

センチネルがマスターがオンラインに戻ったことを検出すると、それはスレーブになると私は信じているので、新しいマスターは続くと私は信じています. 必然的にマスターから新しいマスターへの切り替えでデータが失われます。

接続を失った場合、マスター redis がダウンしていることに同意するために複数のセンチネルに依存しているため、センチネルは正しく機能しません。センチネルが 2 つのシステムでは、センチネルを使用しないでください。

基本的な解決策は、別のサーバーに追加のセンチネルを配置することです。おそらく、このように redis/sentinel を実行していないクライアント/アプリケーション サーバーにquorum、マスターがダウンしていることに同意する とセンチネルを利用できます。

于 2016-08-09T10:56:26.033 に答える