रेडिस सेंटिनल मौजूदा रेडिस मास्टर और स्लेव इंस्टेंस को सक्रिय रूप से मॉनिटर करने के लिए कई अतिरिक्त रेडिस प्रहरी प्रक्रियाओं को चलाकर अत्यधिक उपलब्ध रेडिस कॉन्फ़िगरेशन को चलाने के लिए आधिकारिक सिफारिश है, यह सुनिश्चित करता है कि वे प्रत्येक अपेक्षित रूप से काम कर रहे हैं। यदि सर्वसम्मति से यह निर्धारित किया जाता है कि मास्टर अब उपलब्ध नहीं है तो यह स्वचालित रूप से विफल हो जाएगा और प्रतिकृति दासों में से एक को नए मास्टर के रूप में बढ़ावा देगा। प्रहरी उपलब्ध रेडिस उदाहरणों की एक आधिकारिक सूची भी बनाए रखते हैं, जो ग्राहकों को उपलब्ध उदाहरणों को खोजने के लिए एक केंद्रीय भंडार प्रदान करते हैं जिनसे वे जुड़ सकते हैं।
Redis Sentinel के लिए समर्थन RedisSentinel
. के साथ उपलब्ध है क्लास जो उपलब्ध प्रहरी को सुनता है और उपलब्ध मास्टर, स्लेव और अन्य प्रहरी रेडिस उदाहरणों की सूची को स्रोत के रूप में सुनता है, जिसका उपयोग वह रेडिस क्लाइंट मैनेजर्स को कॉन्फ़िगर करने और बनाए रखने के लिए करता है, किसी भी विफलता की शुरुआत करता है जैसा कि वे रिपोर्ट करते हैं।
उपयोग #
नए प्रहरी समर्थन का उपयोग करने के लिए, Redis क्लाइंट प्रबंधकों को मास्टर और स्लेव इंस्टेंस के कनेक्शन स्ट्रिंग के साथ पॉप्युलेट करने के बजाय आप एक एकल RedisSentinel
बनाएंगे चल रहे Redis Sentinels के कनेक्शन स्ट्रिंग के साथ कॉन्फ़िगर किया गया उदाहरण:
var sentinelHosts = new[]{ "sentinel1", "sentinel2:6390", "sentinel3" };
var sentinel = new RedisSentinel(sentinelHosts, masterName: "mymaster");
यह एक RedisSentinel
को कॉन्फ़िगर करने का एक विशिष्ट उदाहरण दिखाता है जो 3 प्रहरी मेजबानों का संदर्भ देता है (अर्थात अत्यधिक उपलब्ध सेटअप के लिए न्यूनतम संख्या जो किसी भी नोड के विफल होने से बच सकती है)। इसे mymaster
. को देखने के लिए भी कॉन्फ़िगर किया गया है कॉन्फ़िगरेशन सेट (डिफ़ॉल्ट मास्टर समूह)।
जानकारी
Redis Sentinels 1 से अधिक मास्टर / स्लेव समूह की निगरानी कर सकता है, प्रत्येक एक अलग मास्टर समूह नाम के साथ।
प्रहरी के लिए डिफ़ॉल्ट पोर्ट 26379 . है (जब अनिर्दिष्ट हो) और जैसा कि RedisSentinel अन्य प्रहरी को स्वतः खोज सकता है, आवश्यक न्यूनतम कॉन्फ़िगरेशन बस है:
var sentinel = new RedisSentinel("sentinel1");
जानकारी
अन्य प्रहरी की स्कैनिंग और स्वतः खोज को ScanForOtherSentinels=false
के साथ अक्षम किया जा सकता है
प्रहरी की निगरानी शुरू करें #
एक बार कॉन्फ़िगर करने के बाद, आप रेडिस सेंटिनल सर्वर की निगरानी शुरू कर सकते हैं और पूर्व-कॉन्फ़िगर क्लाइंट मैनेजर तक पहुंच सकते हैं:
IRedisClientsManager redisManager = sentinel.Start();
जिसे पहले की तरह, आपके पसंदीदा IOC में सिंगलटन . के रूप में पंजीकृत किया जा सकता है उदाहरण:
container.Register<IRedisClientsManager>(c => sentinel.Start());
उन्नत प्रहरी विन्यास #
RedisSentinel डिफ़ॉल्ट रूप से एक कॉन्फ़िगर किए गए PooledRedisClientManager
. का प्रबंधन करता है उदाहरण जो दोनों मास्टर रेडिस क्लाइंट को पढ़ने/लिखने के लिए हल करता है GetClient()
और केवल पढ़ने के लिए दास GetReadOnlyClient()
एपीआई.
इसे नए RedisManagerPool
. का उपयोग करने के लिए बदला जा सकता है साथ:
sentinel.RedisManagerFactory = (master,slaves) => new RedisManagerPool(master);
कस्टम Redis कनेक्शन स्ट्रिंग #
जिस होस्ट के साथ RedisSentinel कॉन्फ़िगर किया गया है, वह केवल उस प्रहरी होस्ट पर लागू होता है, आप अभी भी एक कस्टम HostFilter
निर्दिष्ट करके अलग-अलग Redis क्लाइंट को कॉन्फ़िगर करने के लिए Redis कनेक्शन स्ट्रिंग्स के लचीलेपन का उपयोग कर सकते हैं। :
sentinel.HostFilter = host => "{0}?db=1&RetryTimeout=5000".Fmt(host);
यह डेटाबेस 1 का उपयोग करने के लिए कॉन्फ़िगर किए गए क्लाइंट और 5 सेकंड का पुनः प्रयास समयबाह्य (नई ऑटो पुनः प्रयास सुविधा में प्रयुक्त) लौटाएगा।
अन्य RedisSentinel कॉन्फ़िगरेशन #
जबकि उपरोक्त लोकप्रिय प्रहरी विन्यास को शामिल करता है जिसका आमतौर पर उपयोग किया जाता है, RedisSentinel
के लगभग हर पहलू व्यवहार नीचे दिए गए कॉन्फ़िगरेशन के साथ अनुकूलन योग्य है:
OnSentinelMessageReceived | प्रहरी कार्यकर्ता को प्रहरी सदस्यता से संदेश प्राप्त होने पर निकाल दिया जाता है |
विफल होने पर | जब सेंटिनल रेडिस क्लाइंट मैनेजर पर एक नए मास्टर के लिए विफल हो जाता है तो निकाल दिया जाता है |
ऑनवर्कर त्रुटि | रेडिस सेंटिनल वर्कर कनेक्शन विफल होने पर निकाल दिया गया |
IpAddressMap | मैप आंतरिक रेडिस होस्ट IP को सेंटिनल्स द्वारा उसके बाहरी IP पर लौटाया जाता है |
अन्य प्रहरी स्कैन करें | अन्य प्रहरी मेजबानों के लिए नियमित रूप से स्कैन करना है या नहीं (डिफ़ॉल्ट सत्य) |
SentinelHostsबाद को ताज़ा करें | अन्य प्रहरी मेजबानों के लिए स्कैन करने के लिए कौन सा अंतराल (डिफ़ॉल्ट 10 मिनट) |
विफल होस्ट के बीच प्रतीक्षा करें | अगले रेडिस इंस्टेंस (डिफ़ॉल्ट 250ms) से कनेक्ट होने से पहले विफल होने के बाद कितनी देर प्रतीक्षा करें |
MaxWaitBetweenFailedHost | फेंकने से पहले होस्ट से कनेक्ट करने का पुनः प्रयास कब तक करें (डिफ़ॉल्ट 60s) |
ForcingMasterFailover से पहले प्रतीक्षा करें | विफलता को बलपूर्वक विफल करने के लगातार असफल प्रयासों के कितने समय बाद (डिफ़ॉल्ट 60s) |
Resetजबविषयपरक रूप सेनीचे | क्लाइंट को रीसेट करें जब सेंटिनल रिपोर्ट रेडिस सब्जेक्टली डाउन हो (डिफ़ॉल्ट सत्य) |
जबऑब्जेक्टिवली डाउन रीसेट करें | ग्राहकों को रीसेट करें जब प्रहरी रिपोर्ट रेडिस वस्तुनिष्ठ रूप से नीचे हो (डिफ़ॉल्ट सत्य) |
SentinelWorkerConnectTimeoutMs | प्रहरी कार्यकर्ता के लिए अधिकतम कनेक्शन समय (डिफ़ॉल्ट 100ms) |
SentinelWorkerSendTimeoutMs | अधिकतम TCP सॉकेट प्रहरी कार्यकर्ता के लिए समय भेजें (डिफ़ॉल्ट 100ms) |
SentinelWorkerReceiveTimeoutMs | अधिकतम TCP सॉकेट प्रहरी कार्यकर्ता के लिए समय प्राप्त करें (डिफ़ॉल्ट 100ms) |
Redis Sentinel सर्वर कॉन्फ़िगर करें #
रेडिस कॉन्फिग प्रोजेक्ट एक उच्च-उपलब्ध मल्टी-नोड रेडिस सेंटिनल कॉन्फ़िगरेशन को स्थापित करने और चलाने को सरल बनाता है, जिसमें सिंगल (या मल्टीपल) विंडोज, ओएसएक्स या लिनक्स सर्वर पर न्यूनतम अत्यधिक उपलब्ध रेडिस सेंटिनल कॉन्फ़िगरेशन को तुरंत सेट करने के लिए स्टार्ट / स्टॉप स्क्रिप्ट शामिल हैं। यह सिंगल-सर्वर/मल्टी-प्रोसेस कॉन्फिगरेशन सिंगल देव वर्कस्टेशन या रिमोट सर्वर पर वर्किंग सेंटिनल कॉन्फिगरेशन सेट करने के लिए आदर्श है।
रेडिस-कॉन्फ़िगरेशन रिपॉजिटरी में एमएस ओपनटेक विंडोज रेडिस बायनेरिज़ भी शामिल है और इसके लिए किसी सॉफ़्टवेयर इंस्टॉलेशन की आवश्यकता नहीं है।
Windows उपयोग #
शामिल सेंटिनल कॉन्फ़िगरेशन को चलाने के लिए, उस सर्वर पर रेडिस-कॉन्फ़िगर रेपो को क्लोन करें, जिस पर आप इसे चलाना चाहते हैं:
git clone https://github.com/ServiceStack/redis-config.git
फिर इसके साथ 1x मास्टर, 2x स्लेव और 3x सेंटिनल रेडिस-सर्वर प्रारंभ करें:
cd redis-config\sentinel3\windows
start-all.cmd
शटडाउन प्रारंभ उदाहरण:
stop-all.cmd
यदि आप अपने देव वर्कस्टेशन पर स्थानीय रूप से रेडिस प्रक्रियाओं को चला रहे हैं, तो चल रहे इंस्टेंस से कनेक्ट करने के लिए न्यूनतम कॉन्फ़िगरेशन बस है:
var sentinel = new RedisSentinel("127.0.0.1:26380");
container.Register(c => sentinel.Start());
लोकलहोस्ट बनाम नेटवर्क आईपी का #
प्रहरी विन्यास मानता है कि सभी रेडिस इंस्टेंस स्थानीय रूप से 127.0.0.1 . पर चल रहे हैं . यदि आप इसके बजाय इसे किसी दूरस्थ सर्वर पर चला रहे हैं जिसे आप चाहते हैं कि आपके नेटवर्क के सभी डेवलपर पहुँच सकें, तो आपको *.conf
में IP पता बदलना होगा। सर्वर नेटवर्क आईपी का उपयोग करने के लिए फ़ाइलें। अन्यथा आप डिफ़ॉल्ट को छोड़ सकते हैं और RedisSentinel
. का उपयोग कर सकते हैं आईपी एड्रेस मैप फीचर लोकलहोस्ट आईपी को नेटवर्क आईपी से पारदर्शी रूप से मैप करने की सुविधा देता है जिससे आपके नेटवर्क का प्रत्येक पीसी कनेक्ट हो सकता है।
उदा. यदि यह किसी दूरस्थ सर्वर पर 10.0.0.9 . के साथ चल रहा है नेटवर्क आईपी, इसके साथ कॉन्फ़िगर किया जा सकता है:
var sentinel = new RedisSentinel("10.0.0.9:26380") {
IpAddressMap = {
{"127.0.0.1", "10.0.0.9"},
}
};
container.Register(c => sentinel.Start());
Google Cloud - Redis को परिनियोजित करने के लिए क्लिक करें #
सबसे आसान क्लाउड सेवा जो हमने पाया है, जो तुरंत एक बहु-नोड-रेडिस सेंटिनल कॉन्फ़िगरेशन सेट कर सकती है, वह है Google क्लाउड कंसोल से उपलब्ध रेडिस सुविधा को तैनात करने के लिए Google क्लाउड के क्लिक का उपयोग करना तैनाती और प्रबंधित करें के तहत :
तैनाती . क्लिक करना बटन आपको उस प्रकार, आकार और स्थान को कॉन्फ़िगर करने देगा जहां आप Redis VM को परिनियोजित करना चाहते हैं। Google क्लाउड पर अत्यधिक-उपलब्ध रेडिस कॉन्फ़िगरेशन की स्थापना और निरीक्षण के बारे में वॉक-थ्रू के लिए पूर्ण क्लिक टू डिप्लॉय रेडिस मार्गदर्शिका देखें।
RedisManagerPool का उपयोग करने के लिए बदलें #
डिफ़ॉल्ट रूप से, RedisSentinel एक PooledRedisClientManager
. का उपयोग करता है , इसे नए RedisManagerPool
. का उपयोग करने के लिए बदला जा सकता है साथ:
sentinel.RedisManagerFactory = (master,replicas) => new RedisManagerPool(master);
प्रहरी की निगरानी शुरू करें #
एक बार कॉन्फ़िगर करने के बाद, आप रेडिस सेंटिनल सर्वर की निगरानी शुरू कर सकते हैं और पूर्व-कॉन्फ़िगर क्लाइंट मैनेजर तक पहुंच सकते हैं:
IRedisClientsManager redisManager = sentinel.Start();
जिसे पहले की तरह, आपके पसंदीदा IOC में सिंगलटन . के रूप में पंजीकृत किया जा सकता है उदाहरण:
container.Register<IRedisClientsManager>(c => sentinel.Start());
Redis Sentinel सर्वर कॉन्फ़िगर करें #
एक सिंगल (या एकाधिक) विंडोज़, ओएसएक्स या लिनक्स सर्वर पर तत्काल एकाधिक रेडिस इंस्टेंस चलाने के लिए स्टार्ट/स्टॉप स्क्रिप्ट सहित न्यूनतम अत्यधिक उपलब्ध रेडिस सेंटिनल कॉन्फ़िगरेशन को सेटअप करने के त्वरित तरीके के लिए रेडिस कॉन्फ़िगरेशन प्रोजेक्ट देखें।
Redis Stats #
आप RedisStats
. का उपयोग कर सकते हैं आपके चल रहे उदाहरणों में दृश्यता और आत्मनिरीक्षण के लिए कक्षा। Redis Stats wiki उपलब्ध आँकड़ों को सूचीबद्ध करता है।
स्वचालित पुन:प्रयास #
क्लाइंट कनेक्शन के लचीलेपन में सुधार करने के लिए, RedisClient
10ms से शुरू होने वाले एक्सपोनेंशियल बैकऑफ़ में सॉकेट और I/O अपवादों के कारण विफल Redis संचालन को पारदर्शी रूप से पुनः प्रयास करेगा RetryTimeout
. तक 10000ms . में से . इन डिफ़ॉल्ट के साथ सुधार किया जा सकता है:
RedisConfig.DefaultRetryTimeout = 10000;
RedisConfig.BackOffMultiplier = 10;