2013-04-30 6 views
21

मैं MongoDB प्रतिकृति 3 नोड्स पर सेट चला रहा हूँ, की सुविधा देता है अपने आईपी के 192.168.1.100 हैं, 192.168.1.101,192.168.1.102MongoDB एक प्रतिकृति सेट में प्राथमिक डीबी सर्वर आईपी कैसे जानें?

वर्तमान सेट प्रतिकृति में अब

192.168.1.100 प्राथमिक और 192.168.1.101 और 192.168.1.102 हैं द्वितीयक, मेरा आवेदन लिखने के संचालन के लिए 192.168.1.100 के साथ जुड़ता है। दो दिनों के बाद 1 9 2.168.1.100 नीचे है और mongodb प्राथमिक के रूप में 192.168.1.101 का चयन करें। मेरा आवेदन कैसे जानता है 1 9 2.168.1.101 प्राथमिक है।

उनकी मोंगोडब में कोई फ़्लोटिंग आईपी अवधारणा है ताकि कोई सर्वर मैन्युअल रूप से आवश्यक हो जब प्राथमिक सर्वर प्रतिकृति सेट में स्विच हो।

उत्तर

7

जब आपका ग्राहक प्रतिकृति सेट ("बीज") में किसी दिए गए सदस्य से जुड़ता है, तो यह सेट में अन्य सदस्यों के लिए प्रतिकृति सेट से पूछताछ करेगा। तो यदि आप .100 से कनेक्ट करते हैं, तो यह सेट से पूछताछ करेगा और यह पता लगाएगा कि .101 और .102 सेट के वैध सदस्य भी हैं।

यदि ड्राइवर अपने कनेक्शन को 100 से खो देता है, तो यह अन्य बीजों के माध्यम से चलाएगा जो इसे खोज चुके हैं और कनेक्शन खोजने का प्रयास करते हैं। एक बार ऐसा करने के बाद, यह प्रतिकृति सेट से पूछताछ करेगा, पता लगाएं कि वर्तमान मास्टर कौन है, और उससे कनेक्ट करें। यह सब पारदर्शी रूप से होता है।

आप मास्टर में प्रवेश करके और निम्न चलाकर इस परीक्षण कर सकते हैं:

rs.stepDown(60) 

यह है कि मशीन गुरु का पद (और कारण एक नया मास्टर निर्वाचित होने की) करने के लिए कारण होगा। यह 60 सेकंड के लिए फिर से चुनाव के लिए योग्य नहीं होगा। आप परिस्थितियों में अपने ऐप के व्यवहार का परीक्षण करने के लिए इसका उपयोग कर सकते हैं जहां प्राथमिक नोड बदल जाता है।

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

+0

हाय सभी, कैसे मोंगो कमांड लाइन का उपयोग कर इस बातें परीक्षण करने के लिए।चूंकि मैं mongo कमांड लाइन का उपयोग कर इसका परीक्षण करना चाहता हूं, क्या कोई तरीका है जिसके माध्यम से मैं mongo कमांड लाइन का उपयोग कर प्रतिकृति सेट को कनेक्ट कर सकता हूं। – Rajnish

+0

यदि आप कमांड लाइन का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आप एक प्रतिकृति सेट कनेक्शन का उपयोग कर कनेक्ट करें, उदाहरण के लिए। मोंगो "replSetName/सदस्य 1: 27017, सदस्य 2: 27017, सदस्य 3: 27017"। – slee

17

जाहिर है, आप प्रतिकृति सेट के किसी भी सदस्य से कनेक्ट करने के लिए अपने "ड्राइवर" (मोंगो क्ली टूल या अपनी पसंदीदा भाषा बाध्यकारी, पूर्व नोड-मोंगो) का उपयोग करने में सक्षम होना चाहिए। कनेक्ट होने के बाद, बस वर्तमान mongod सेट के अन्य सदस्यों के लिए सेवा से पूछते हैं:

> db.runCommand("ismaster") 
{ 
    "ismaster" : false, 
    "secondary" : true, 
    "hosts" : [ 
      "ny1.acme.com", 
      "ny2.acme.com", 
      "sf1.acme.com" 
    ], 
    "passives" : [ 
      "ny3.acme.com", 
      "sf3.acme.com" 
    ], 
    "arbiters" : [ 
     "sf2.acme.com", 
    ] 
    "primary" : "ny2.acme.com", 
    "ok" : true 
} 

अपने उपयोग के लिए, यह प्राथमिक से कनेक्ट करने नहीं महत्वपूर्ण है। ओपी की तरह, मैं माध्यमिक सदस्य खोजने के लिए आवश्यक कनेक्शन की संख्या को छोटा करना चाहता हूं। इस विधि को आपके लिए काम करना चाहिए, लेकिन यहां प्रलेखन थोड़ा दिनांकित हो सकता है।

http://docs.mongodb.org/meta-driver/latest/legacy/connect-driver-to-replica-set/

3

पता लगाने के लिए कमांड लाइन चलाने से वर्तमान प्राथमिक सर्वर का IP है: अपने एप्लिकेशन के ढेर और ड्राइवर पर निर्भर करता है

rs.status().members.find(r=>r.state===1).name 

, आप के लिए प्रतिकृति में सभी मेजबानों को निर्दिष्ट करने की आवश्यकता हो सकती है यह लिखने के लिए प्राथमिक चयन स्वत: चयन करने के लिए।

1

rs.isMaster().primary

आप एक लाइनर्स में कर रहे हैं, मोंगो उदाहरणों में से किसी पर हो और चलने वाले

संबंधित मुद्दे