Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

रेडिस प्रहरी

रेडिस सेंटिनल मौजूदा रेडिस मास्टर और स्लेव इंस्टेंस को सक्रिय रूप से मॉनिटर करने के लिए कई अतिरिक्त रेडिस प्रहरी प्रक्रियाओं को चलाकर अत्यधिक उपलब्ध रेडिस कॉन्फ़िगरेशन को चलाने के लिए आधिकारिक सिफारिश है, यह सुनिश्चित करता है कि वे प्रत्येक अपेक्षित रूप से काम कर रहे हैं। यदि सर्वसम्मति से यह निर्धारित किया जाता है कि मास्टर अब उपलब्ध नहीं है तो यह स्वचालित रूप से विफल हो जाएगा और प्रतिकृति दासों में से एक को नए मास्टर के रूप में बढ़ावा देगा। प्रहरी उपलब्ध रेडिस उदाहरणों की एक आधिकारिक सूची भी बनाए रखते हैं, जो ग्राहकों को उपलब्ध उदाहरणों को खोजने के लिए एक केंद्रीय भंडार प्रदान करते हैं जिनसे वे जुड़ सकते हैं।

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;

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. स्प्रिंग-बूट रेडिस:किसी उपयोगकर्ता के सभी सत्रों को अमान्य कैसे करें?

  2. जेडिस टाइमआउट कॉन्फ़िगर करें

  3. रेडिस हैश बनाम कई कुंजियों का उपयोग करने की प्रदर्शन तुलना

  4. वितरित कैशिंग ढांचे के रूप में मेमकैच, रेडिस और एहकैच की तुलना

  5. रेडिस डेटा को MySQL में स्थानांतरित करने का तेज़ तरीका