Hostitele serveru Redis Sentinel Server byste měli poskytovat pouze společnosti RedisSentinel
jak získá aktivní seznam ostatních master/slave serverů redis od hostitele Sentinel.
Některé změny RedisSentinel
byly nedávno přidány v nejnovější v4.0.37 která je nyní k dispozici na MyGet, která zahrnuje extra protokolování a zpětná volání událostí Redis Sentinel. Nová verze 4.0.37 API vypadá takto:
var sentinel = new RedisSentinel(sentinelHost, masterName);
Spuštěním RedisSentinel se připojí k hostiteli Sentinel a vrátí se předem nakonfigurovaný RedisClientManager (tj. fond připojení redis) s aktivním
var redisManager = sentinel.Start();
Které se pak můžete zaregistrovat v MOV pomocí:
container.Register<IRedisClientsManager>(redisManager);
RedisSentinel
by pak měl naslouchat změnám master/slave od hostitelů Sentinel a převzetí služeb při selhání redisManager podle toho. Stávající připojení ve fondu jsou poté odstraněna a nahrazena novým fondem pro nově nakonfigurované hostitele. Jakákoli aktivní připojení mimo fond, při opětovném použití vyvolá výjimky připojení, při příštím načtení RedisClient z fondu bude nakonfigurován s novými hostiteli.
Zpětná volání a protokolování
Zde je příklad toho, jak můžete použít nová zpětná volání k introspekci událostí RedisServeru:
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);
},
};
Protokolování těchto událostí lze také povolit konfigurací Přihlašování v ServiceStack:
LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:false);
K dispozici je také další explicitní FailoverToSentinelHosts()
které lze použít k vynucení RedisSentinel
k opětovnému vyhledání a převzetí služeb při selhání k nejnovějším hostitelům master/slave, např.:
var sentinelInfo = sentinel.FailoverToSentinelHosts();
Noví hostitelé jsou k dispozici v vráceném sentinelInfo:
"Failed over to read/write: {0}, read-only: {1}".Print(
sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);