まず、歩哨について話しましょう。
Sentinelはフェイルオーバーを管理し、HA用にRedisを構成しません。これは重要な違いです。次に、投稿した図は実際には不適切な設定です。管理しているRedisノードと同じノードでSentinelを実行する必要はありません。そのホストを失うと、両方を失います。
「資源の無駄ですか?」についてユースケースによって異なります。そのセットアップでは3つのRedisノードは必要ありません。必要なのは2つだけです。 3つは冗長性を高めますが、必須ではありません。追加の冗長性が必要な場合は、リソースの無駄ではありません。冗長性が必要ない場合は、単一のRedisインスタンスを実行して、それを適切と呼びます。これ以上実行すると「無駄」になるためです。
2つのスレーブを実行するもう1つの理由は、読み取りを分割することです。繰り返しますが、必要な場合は無駄にはなりません。
「利用可能なリソースを最大限に活用するためのより良い方法はありますか?」について特定のシナリオとコードに大きく依存しているため、これに答えることはできません。とはいえ、保存するデータの量が「少なく」、コマンドレートがそれほど高くない場合は、ホストをRedis専用にする必要がないことを忘れないでください。
ここで、「RedisクラスタリングはRedisセンチネルの代替手段ですか?」について説明します。これは、実際には完全にユースケースに依存します。 RedisクラスターはHAソリューションではありません-マルチライター/ラムよりも大きいソリューションです。あなたの目標がHAだけである場合、それはおそらくあなたに適していないでしょう。 Redis Clusterには、特にマルチキー操作に関する制限があります。そのため、必ずしも単純な「クラスターを使用する」操作ではありません。
3つのホストでRedisを実行する(および3つのセンチネルを実行する)のが無駄だと思う場合は、より多くのリソースを必要とするため、クラスターをさらに多く保持する可能性があります。
あなたが尋ねた質問は、おそらく広すぎて意見に基づいているため、書かれたとおりに生き残ることはできません。解決している特定のケース/問題がある場合は、それを更新してください。特定の支援と情報を提供できます。
詳細の更新:
シナリオで適切なフェイルオーバー管理を行うために、3つのセンチネルを使用します。1つはJBossサーバーで実行されます。 3つのJBossノードがある場合は、それぞれに1つずつ使用します。別々のノードにRedisポッド(マスター+スレーブ)を配置し、監視員にフェイルオーバーを管理させます。
そこから、情報と接続の管理にSentinelを使用するようにJBoss/Jedisを接続する必要があります。私はそれらを使用しないので、ジェダイがそれをサポートしていることがわかります。あなたはそれを正しく設定する必要があります。私が見つけたいくつかの例は、JedisSentinelPool
について話しているSentinelとhttps://github.com/xetorthio/jedis/issues/725を使用したJedisの例を探しています。 プールを使用するためのルートです。
Sentinelがフェイルオーバーを実行すると、クライアントは切断され、Jedisは現在のマスターが誰であるかをSentinelに尋ねることによって再接続を処理します(すべきですか?)。