Redis Sentinel構成のQuorumを理解する
概要
sentinel.confに書く
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 2
の最後に付いてる2の話です。
結論
Sentinel構成台数は奇数にして、quorumには台数/2(切り捨て)+1を設定する。
※quorumを低くしたり、高くしたりすると、フェイルオーバーしにくくなったり、しやすくなったりするので、そのような挙動が良い場合は、下の方(最低稼働台数≠quorumの場合はどうなる?)参照。
なぜSentinel構成台数は奇数にするのか?
Sentinel構成台数と、最低稼働台数の関係は、下表のようになります。
Sentinel構成台数 | 最低稼働台数 | ダウン許容台数 |
---|---|---|
3 | 2 | 1 |
4 | 3 | 1 |
5 | 3 | 2 |
6 | 3 | 2 |
7 | 4 | 3 |
3台→4台、5台→6台に増やしても、ダウン許容台数が増えないので、コスパが悪いというのが理由になります。
そしてquorumには、最低稼働台数と同じ値を設定します。
Sentinelのフェイルオーバーの判断
ドキュメントに記載されています。
(参考)
Redis Sentinel Documentation – Redis
※パーマリンクないので補足すると、かなり下の方です。
The previous sections showed that every master monitored by Sentinel is associated to a configured quorum. It specifies the number of Sentinel processes that need to agree about the unreachability or error condition of the master in order to trigger a failover.
However, after the failover is triggered, in order for the failover to actually be performed, at least a majority of Sentinels must authorize the Sentinel to failover. Sentinel never performs a failover in the partition where a minority of Sentinels exist.
意訳すると、下記2つを満たすことが条件です。
- フェイルオーバーのトリガー
- quorum数のSentinelプロセスが、マスターの到達不能またはエラー状態について合意する
- フェイルオーバーの実行
- 大多数のSentinelプロセスが、フェイルオーバーを許可する
大多数ってのがあいまいなんですが、等しいのはダメなので、3台なら2台(2>1)、4台なら3台(3>1)5台なら3台(3>2)、つまり、元の台数/2(切り捨て)+1が大多数に該当します。
最低稼働台数≠quorumの場合はどうなる?
これもドキュメントの同じところに記載されています。
(参考)
Redis Sentinel Documentation – Redis
- If a the quorum is set to a value smaller than the majority of Sentinels we deploy, we are basically making Sentinel more sensitive to master failures, triggering a failover as soon as even just a minority of Sentinels is no longer able to talk with the master.
- If a quorum is set to a value greater than the majority of Sentinels, we are making Sentinel able to failover only when there are a very large number (larger than majority) of well connected Sentinels which agree about the master being down.
つまり、
- quorum < 最低稼働台数の場合、フェイルオーバーしやすくなる
- quorum > 最低稼働台数の場合、フェイルオーバーしにくくなる
ということですね。
実験
5台構成のRedis Sentinel構成を組んで、quorum=3のときと、quorum=4のときを比べてみました。
手順
- master1台+replica4台のRedis Sentinel構成を構築する
- masterのサーバを停止する
- replicaのどれかにフェイルオーバーする
- フェイルオーバーしたmasterのサーバをさらに停止する
- 残ったreplicaのどれかにフェイルオーバーする(はず)
結果
quorum=3の場合
手順2、手順3いずれもフェイルオーバーした(想定通り)
quorum=4の場合
手順2ではフェイルオーバーしたが、手順3ではフェイルオーバーしなかった。
フェイルオーバーのトリガーのためのSentinelプロセス数を満たさなかったためと思われる。(replica -> masterへのコネクションフェイルが延々と出続けた)
Sentinel構成を組んで、フェイルオーバーしたくないっていうのは、どういうケースか分からないので(kubernetesとかですぐ復活する場合?)、通常は、quorum=最低稼働台数とすると良いと思います。
Author And Source
この問題について(Redis Sentinel構成のQuorumを理解する), 我々は、より多くの情報をここで見つけました https://qiita.com/taka_22/items/96f512c9e0684b76a591著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .