आपको केवल RedisSentinel
को Redis Sentinel सर्वर के होस्ट की आपूर्ति करनी चाहिए। क्योंकि यह प्रहरी होस्ट से अन्य मास्टर/स्लेव रेडिस सर्वर की सक्रिय सूची प्राप्त करता है।
RedisSentinel
. में कुछ बदलाव हाल ही में नवीनतम v4.0.37 . में जोड़े गए थे यह अब MyGet पर उपलब्ध है जिसमें अतिरिक्त लॉगिंग और Redis Sentinel ईवेंट के कॉलबैक शामिल हैं। नया v4.0.37 एपीआई ऐसा दिखता है:
var sentinel = new RedisSentinel(sentinelHost, masterName);
RedisSentinel को प्रारंभ करना प्रहरी होस्ट से कनेक्ट होगा और सक्रिय
के साथ एक पूर्व-कॉन्फ़िगर RedisClientManager (यानी रेडिस कनेक्शन पूल) लौटाएगा।var redisManager = sentinel.Start();
जिसके बाद आप IOC में इसके साथ पंजीकरण कर सकते हैं:
container.Register<IRedisClientsManager>(redisManager);
RedisSentinel
फिर प्रहरी मेजबानों से मास्टर/दास परिवर्तनों को सुनना चाहिए और 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);
},
};
सर्विसस्टैक में लॉगिंग को कॉन्फ़िगर करके इन घटनाओं की लॉगिंग भी सक्षम की जा सकती है:
LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:false);
एक अतिरिक्त स्पष्ट FailoverToSentinelHosts()
. भी है जिसका उपयोग RedisSentinel
. को बाध्य करने के लिए किया जा सकता है नवीनतम मास्टर/दास मेजबानों को फिर से देखने और विफल करने के लिए, उदा:
var sentinelInfo = sentinel.FailoverToSentinelHosts();
नए होस्ट लौटाए गए सेंटीनेलइन्फो में उपलब्ध हैं:
"Failed over to read/write: {0}, read-only: {1}".Print(
sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);