2016-04-26 10 views
6

मुझे सॉकेट त्रुटि 110 (कनेक्शन का समय समाप्त हो जाता है) जब एक मोंगो डेटाबेस (संस्करण 3.0.5) प्राथमिक डीबी सर्वर से गुलाम तक दोहराया जाता है, तो अधिक सटीक रूप से काम करने के समय उस डेटाबेस की प्रतिकृति (दास का लॉग नीचे है)। मुझे लगता है कि शायद इसका कारण यह है कि डेटाबेस बड़ा है और इसे प्रतिबद्ध करने के लिए ऑपरेशन भेजना बहुत अधिक समय लगता है।एक मोंगोडीबी सर्वर दास प्रतिकृति के लिए सॉकेट टाइमआउट निर्दिष्ट करने के लिए कैसे करें

मैं मॉन्गो सर्वर के लिए अलग सॉकेट टाइमआउट कैसे निर्दिष्ट कर सकता हूं? यदि यह संभव नहीं है, तो प्रतिकृति की मरम्मत के लिए कोई अन्य तरीका है?

मुझे केवल एक मोंगो क्लाइंट (कनेक्शन स्ट्रिंग विकल्प सॉकेटटाइमआउट्स) के लिए ऐसा विकल्प मिला लेकिन यह मोंगो सर्वर के साथ मदद नहीं करता है।

2016-04-26T13:36:34.693+0100 I INDEX [rsSync]   done building bottom layer, going to commit  
2016-04-26T13:36:34.693+0100 I INDEX [rsSync] build index done. scanned 30980334 total records. 4072 secs  
2016-04-26T13:36:34.772+0100 I REPL  [rsSync] initial sync cloning db: {skipped db name}  
2016-04-26T13:36:34.823+0100 I NETWORK [rsSync] Socket say send() errno:110 Connection timed out {skipped ip}:27017  
2016-04-26T13:36:34.828+0100 E REPL  [rsSync] 9001 socket exception [SEND_ERROR] server [{skipped ip}:27017]  
2016-04-26T13:36:34.828+0100 E REPL  [rsSync] initial sync attempt failed, 9 attempts remaining 

अद्यतन। मैं टिप्पणी में rs.status() के उत्पादन के लिए कहा गया था:

{  "set" : "<skippedsetname>", 
     "date" : ISODate("2016-05-04T15:35:06.717Z"), 
     "myState" : 5, 
     "syncingTo" : "<skipped domain name of other server>:27017", 
     "members" : [ 
       { 
         "_id" : 0, 
         "name" : "<skipped domain name of this server>:27017", 
         "health" : 1, 
         "state" : 5, 
         "stateStr" : "STARTUP2", 
         "uptime" : 29, 
         "optime" : Timestamp(0, 0), 
         "optimeDate" : ISODate("1970-01-01T00:00:00Z"), 
         "syncingTo" : "<skipped domain name of other server>:27017", 
         "configVersion" : 9, 
         "self" : true 
       }, 
       { 
         "_id" : 2, 
         "name" : "10.0.1.7:27017", 
         "health" : 1, 
         "state" : 7, 
         "stateStr" : "ARBITER", 
         "uptime" : 26, 
         "lastHeartbeat" : ISODate("2016-05-04T15:35:05.859Z"), 
         "lastHeartbeatRecv" : ISODate("2016-05-04T15:35:06.347Z"), 
         "pingMs" : 3, 
         "configVersion" : 9 
       }, 
       { 
         "_id" : 3, 
         "name" : "<skipped domain name of other server>:27017", 
         "health" : 1, 
         "state" : 1, 
         "stateStr" : "PRIMARY", 
         "uptime" : 26, 
         "optime" : Timestamp(1462376105, 196), 
         "optimeDate" : ISODate("2016-05-04T15:35:05Z"), 
         "lastHeartbeat" : ISODate("2016-05-04T15:35:05.859Z"), 
         "lastHeartbeatRecv" : ISODate("2016-05-04T15:35:06.086Z"), 
         "pingMs" : 4, 
         "electionTime" : Timestamp(1461688501, 1), 
         "electionDate" : ISODate("2016-04-26T16:35:01Z"), 
         "configVersion" : 9 
       } 
     ], 
     "ok" : 1 } 

अद्यतन। मुझे इस्तेमाल किया जाने वाला होस्टिंग का उल्लेख नहीं करना चाहिए Azure। Answer and explanation पूरी तरह से क्वेरी "azure mongodb कनेक्शन टाइमआउट" द्वारा googled है। मेरी गलती।

+1

आप अपने अनुमान के आधार पर समाधान मांग रहे हैं "मुझे लगता है कि शायद इसका कारण यह है कि डेटाबेस बड़ा है और इसे करने के लिए ऑपरेशन भेजना बहुत अधिक समय लगता है।" मुझे लगता है कि यह सच नहीं है, और आप समस्या एक नेटवर्क मुद्दा है। क्या आप 'टेलनेट {छोड़े गए आईपी} 27017' कर सकते हैं? –

+0

@ हेक्टरवाल्वरडेपेरेजा हां मैंने कोशिश की और उस आईपी और बंदरगाह पर टेलनेट कर सकते हैं। इसके अलावा, जैसा कि मैंने कहा था, उल्लिखित त्रुटि तब होती है जब प्रतिकृति उदाहरण डाटाबेस के सभी डेटा को लॉग में देखा जाता है। तो यह अजीब बात है कि यह डेटा डाउनलोड करने के लिए सॉकेट से कनेक्ट हो सकता है लेकिन उसके बाद उस ऑपरेशन को करने के लिए उसी पोर्ट से कनेक्ट नहीं हो सका। – boqapt

+0

और 'rs.status()' का आउटपुट क्या है? –

उत्तर

2

त्रुटि के कारण की आपकी धारणा गलत है।

  • Connection timed out: टीसीपी कनेक्शन स्थापित करने के प्रयास के दौरान, किसी भी समय सीमा के भीतर दूसरी तरफ कोई प्रतिक्रिया नहीं आई।

दूसरे शब्दों में, यह सॉकेट की स्थापना में एक मुद्दा है और यह नहीं कि डेटाबेस की प्रतिकृति को कितना समय लगता है।

टीसीपी टाइमआउट ट्यूनिंग एक सिस्टम सेटिंग है और आप प्रति एप्लिकेशन कुछ नहीं करते हैं। लिनक्स पर सेटिंग्स /etc/sysctl.conf में हैं और net.ipv4.tcp_syn_retries - के साथ आप play around कर सकते हैं हालांकि आप लगभग सॉकेट स्थापित करने के लिए टाइमआउट नहीं बदलते हैं (किसी भी प्रोग्राम के लिए, जिसमें मोंगो भी शामिल है), और मेरे पास कुछ बार इसे बदलना इसे बढ़ाने के बजाए त्रुटि को तेज करने के लिए इसे कम करना था - इसे बढ़ाना किसी भी सांसारिक अनुप्रयोग में सही समाधान होने की संभावना नहीं है।

समस्या या तो एक कॉन्फ़िगरेशन समस्या है - जैसे आपके सेटअप में कुछ खराब आईपी पते हैं, या नेटवर्किंग समस्या, जैसे खराब फ़ायरवॉल, रूटिंग टेबल या नेटवर्क स्विच जो कभी-कभी 60-120 के लिए काम नहीं करता है एक समय में सेकंड।

+0

हाँ, मैंने त्रुटि कोड को गलत समझा। लेकिन उल्लिखित त्रुटि तब होती है जब प्रतिकृति उदाहरण डाटाबेस के सभी डेटा को लॉग में देखा जाता है। ऐसा लगता है कि यह डेटा डाउनलोड करने के लिए सॉकेट से कनेक्ट हो सकता है लेकिन उसके बाद उस ऑपरेशन को करने के लिए उसी पोर्ट से कनेक्ट नहीं हो सका। सिंक्रनाइज़ेशन खो जाने तक भी प्रतिकृति सेट एक लंबी अवधि के लिए मौजूद है। इसके बाद मैंने दास पर डीबी गिरा दिया, इसे फिर से शुरू किया और इसे प्राथमिक से डेटा प्राप्त करना शुरू कर दिया लेकिन प्रतिबद्ध होने में असफल रहा। तो मुझे इसकी नेटवर्किंग या कॉन्फ़िगरेशन समस्या पर संदेह है। ऐसा लगता है कि समस्या mongodb से जुड़ा हुआ है, लेकिन नेटवर्क या ओएस – boqapt

+0

नहीं, क्योंकि आप ए से बी से कनेक्ट कर सकते हैं, इसका मतलब यह नहीं है कि आप बी से ए से कनेक्ट कर सकते हैं - कनेक्शन की दिशा प्राथमिकता के आधार पर बदल जाएगी/नेता नोड। जांचें कि 'rs.status()' प्रत्येक नोड पर समान है, और जांचें कि क्या आप प्रत्येक मोंगो मशीन से प्रत्येक अन्य नोड्स + पोर्ट में एनसी (या टेलनेट) कर सकते हैं - त्रुटि कोड स्पष्ट रूप से नेटवर्किंग समस्या का सुझाव देता है। – Soren

0

शायद आपके दास में फाइल सिस्टम लॉक करने वाली कुछ फाइलें हैं। यदि मैं कहां हूं, तो मैं प्रतिकृति से नोड को हटा दूंगा, फिर dbpath के तहत सभी फ़ाइलों को मिटा दें, जांचें कि मोंगो उपयोगकर्ता इस निर्देशिका तक पहुंच सकता है और mongod को पुनरारंभ कर सकता है। एक बार यह चलने के बाद, इसे वापस आरएस में जोड़ें और इसके लिए प्रतीक्षा करें। यह भी देखें: https://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/#mongod-lock

+0

मैं समझता हूं कि डीबीपीएथ के तहत तार्किक रूप से पोंछने वाली फाइल दास पर लॉक की गई फाइलों से संबंधित है (कोशिश की गई)। लेकिन आप प्रतिकृति से दास को हटाने और फिर से जोड़ने का औचित्य कैसे देते हैं? – boqapt

+0

मुझे लगता है कि यह सुरक्षित है (मैं आपको कोई संदर्भ नहीं दे सकता लेकिन मेरे पास एक अस्पष्ट स्मृति है जिसे मैंने इसे कहीं और पढ़ा है)। चीज शेष प्रतिकृति सेट के साथ सभी संचार काटकर अलगाव में नोड की मरम्मत करना है। –

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