RedisSentinelサーバーのホストをRedisSentinel
にのみ提供する必要があります Sentinelホストから他のマスター/スレーブRedisサーバーのアクティブリストを取得するため。
RedisSentinel
へのいくつかの変更 最近、最新の v4.0.37に追加されました これは、RedisSentinelイベントの追加のロギングとコールバックを含むMyGetで利用できるようになりました。新しいv4.0.37 APIは次のようになります:
var sentinel = new RedisSentinel(sentinelHost, masterName);
RedisSentinelを起動すると、Sentinelホストに接続し、アクティブな
を使用して事前構成されたRedisClientManager(つまり、redis接続プール)を返します。var redisManager = sentinel.Start();
その後、IOCに登録できます:
container.Register<IRedisClientsManager>(redisManager);
RedisSentinel
次に、Sentinelホストからのマスター/スレーブの変更をリッスンし、 redisManagerをフェイルオーバーする必要があります。 によると。次に、プール内の既存の接続が破棄され、新しく構成されたホスト用の新しいプールに置き換えられます。プール外のアクティブな接続は、再度使用されると接続例外をスローします。次にRedisClientがプールから取得されると、新しいホストで構成されます。
コールバックとロギング
新しいコールバックを使用してRedisServerイベントをイントロスペクトする方法の例を次に示します。
var sentinel = new RedisSentinel(sentinelHost, masterName)
{
OnFailover = manager =>
{
"Redis Managers were Failed Over to new hosts".Print();
},
OnWorkerError = ex =>
{
"Worker error: {0}".Print(ex);
},
OnSentinelMessageReceived = (channel, msg) =>
{
"Received '{0}' on channel '{1}' from Sentinel".Print(channel, msg);
},
};
これらのイベントのロギングは、ServiceStackでのロギングを構成することによっても有効にできます:
LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:false);
追加の明示的なFailoverToSentinelHosts()
もあります RedisSentinel
を強制するために使用できます 最新のマスター/スレーブホストを再検索してフェイルオーバーするには、例:
var sentinelInfo = sentinel.FailoverToSentinelHosts();
新しいホストは、返されたsentinelInfoで利用できます:
"Failed over to read/write: {0}, read-only: {1}".Print(
sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);