コンテキスト:
3つのredisノードと3つのセンチネルがあります。フェイルオーバーは正しく機能します。マスターを降ろすと、別のマスターが選出されます。
必要:
すべてが期待どおりに機能することを確認するために、動作をテストする方法が必要です。センチネルに特定のredisノードをマスターに強制的に選択させたいと思います。
マスターにしてはいけない2つのノードを削除することでそれを実現できたと思いますが、問題を解決するためにいずれかのセンチネルにコマンドを発行するだけでいいのですが。
tl; dr:
特定のredisノードをマスターとして選択するように監視者に指示できますか?
マスターにしたくない2つのRedisサーバーでハングが発生する可能性があり、(テストされていません)Sentinelが残りの1つを選択すると思います。 2つの選挙が必要な場合があります...
Redisサーバーでのハングのシミュレーション:
redis-cli DEBUG sleep 30
または
redis-cli DEBUG segfault
次に、フェイルオーバーを強制します。
SENTINEL failover
おそらく、より良いアプローチは優先オプションを使用することです。
https://redis.io/topics/sentinel から
Redisインスタンスには、slave-priorityという構成パラメーターがあります。この情報はINFO出力でRedisスレーブインスタンスによって公開され、Sentinelはそれを使用して、マスターをフェイルオーバーするために使用できるものの中からスレーブを選択します。
スレーブの優先順位が0に設定されている場合、スレーブはマスターに昇格されません。 Sentinelは、優先順位番号の低いスレーブを優先します。
たとえば、現在のマスターの同じデータセンターにスレーブS1があり、別のデータセンターに別のスレーブS2がある場合、S1を優先度10に設定し、S2を優先度100に設定することができます。マスターに障害が発生し、S1とS2の両方が使用可能な場合は、S1が優先されます。
スレーブの選択方法の詳細については、このドキュメントのスレーブの選択と優先度のセクションを確認してください。