2011-11-25 6 views
11

जो मैं प्राप्त करना चाहता हूं वह एक /etc/init.d स्क्रिप्ट है जो अधिक विश्वसनीय रूप से मोंगोब शुरू होता है, भले ही यह कठिन हो जाए - इसे सिस्टम के मामले में ऑटो-रिपेयर का प्रयास करना चाहिए एक बंद राज्य में है।प्रोडक्शन में मोंगोब को पुनरारंभ/ऑटोरपेयरिंग

हां, मैं इसे स्वयं स्क्रिप्ट कर सकता हूं, लेकिन मुझे लगता है कि वहां से किसी ने पहले ही यह किया होगा।

मैंने देखा कि एक सर्वर के बाद कड़ी मेहनत हो जाती है, कि मोंगोड एक ऐसे राज्य में है जहां यह /etc/init.d/mongod स्क्रिप्ट के माध्यम से पुनरारंभ नहीं होता है। जाहिर है कि लॉक फ़ाइल को हटाया जाना चाहिए और इसे सफलतापूर्वक पुनरारंभ करने से पहले --repair विकल्प और सही - डीबीपीएथ के साथ शुरू करने की आवश्यकता है। कुछ मामलों में किसी को भी डब-फाइलों के स्वामित्व को उपयोगकर्ता को बदलने की आवश्यकता होती है जो मोंगोडब चलाता है। एक अतिरिक्त समस्या यह है कि मानक /etc/init.d/mongod स्क्रिप्ट इस स्थिति में विफलता की रिपोर्ट नहीं करती है, बल्कि "ठीक" स्थिति के साथ खुशी से और गलत तरीके से लौटती है, रिपोर्टिंग कि मोंगोद शुरू हुआ था, हालांकि यह नहीं था।

$ sudo /etc/init.d/mongod start 
Starting mongod: forked process: 9220 
all output going to: /data/mongo/log/mongod.log 
                  [ OK ] 
$ sudo /etc/init.d/mongod status 
mongod dead but subsys locked 

ओएस या तो सेंटोस या फेडोरा है।

क्या किसी ने /etc/init.d स्क्रिप्ट्स या ऐसी स्क्रिप्ट के लिए एक पॉइंटर संशोधित किया है, जो उस स्थिति में स्वचालित रूप से मरम्मत का प्रयास करता है? या क्या कोई और उपकरण है जो मोंगोद के लिए घड़ी कुत्ते के रूप में कार्य करता है?

कोई विचार क्यों मोगोडब को स्वचालित रूप से सुधारने का प्रयास करना बुरा विचार हो सकता है?

$ sudo /etc/init.d/mongod status 
mongod dead but subsys locked 

$ sudo ls -l /var/lib/mongo/mongod.lock 
-rw-r--r--. 1 mongod mongod 5 Nov 19 11:52 /var/lib/mongo/mongod.lock 


$ sudo tail -50 /data/mongo/log/mongod.log 
************** 
old lock file: /data/mongo/db/mongod.lock. probably means unclean shutdown 
recommend removing file and running --repair 
see: http://dochub.mongodb.org/core/repair for more information 
************* 
Sat Nov 19 11:55:44 exception in initAndListen std::exception: old lock file, terminating 
Sat Nov 19 11:55:44 dbexit: 

Sat Nov 19 11:55:44 shutdown: going to close listening sockets... 
Sat Nov 19 11:55:44 shutdown: going to flush oplog... 
Sat Nov 19 11:55:44 shutdown: going to close sockets... 
Sat Nov 19 11:55:44 shutdown: waiting for fs preallocator... 
Sat Nov 19 11:55:44 shutdown: closing all files... 
Sat Nov 19 11:55:44  closeAllFiles() finished 

Sat Nov 19 11:55:44 dbexit: really exiting now 

उत्तर

4

तो जर्नलिंग का पहला उल्लेख जर्नलिंग है। जर्नलिंग प्रभावी ढंग से "तेज मरम्मत" के रूप में बिल किया जाता है। जर्नलिंग डिफ़ॉल्ट रूप से 2.0+ में चालू है और यह डिफ़ॉल्ट रूप से "मरम्मत" निष्पादित करेगा।

तो यदि आपके डिस्क जर्नलिंग के अतिरिक्त लेखन-थ्रूपुट को संभाल सकते हैं तो यह आपकी समस्या का समाधान कर सकता है।

किसी भी राय पर मोगोडब को स्वचालित रूप से सुधारने का प्रयास करने का बुरा विचार क्यों हो सकता है?

मोंगोडीबी की मरम्मत के साथ # 1 समस्या स्वचालित रूप से समय में से एक है।

आप एक 200GB डेटाबेस है, तो सिस्टम जब मरम्मत निम्न कार्य करने की आवश्यकता होगी:

  1. आवंटित फ़ाइलों की ~ 200GB (आप ड्राइव स्थान की क्या ज़रूरत है?)
  2. के सभी पढ़ें मौजूदा फ़ाइलों से डेटा स्मृति में (200GB read)
  3. चेक वैधता के लिए प्रत्येक दस्तावेज़ और इसे वापस नई फ़ाइलें (200GB write)
  4. सभी अनुक्रमित फिर से बनाने के लिए लिखना (200GB reads + large number of writes)
  5. डिस्क

को फ्लश सब कुछ आप मेरे नोट ड्राइव ताड़ना की एक गंभीर राशि एक मरम्मत प्रदर्शन करने के लिए है कि देखें।

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

init.d स्क्रिप्ट OK लौटने के बावजूद, आपकी सिस्टम निगरानी आपको बताएगी कि डीबी ऊपर नहीं है।

+0

आपके विस्तृत उत्तर के लिए धन्यवाद। जर्नलिंग जाने का रास्ता दिखता है .. उन्होंने किस संस्करण को जर्नलिंग शुरू किया? – Tilo

+2

जर्नलिंग 1.8+ में पेश की गई थी, बस अपनी कॉन्फ़िगरेशन फ़ाइल में 'जर्नल = true' सेट करें। 2.0+ जर्नलिंग डिफ़ॉल्ट रूप से सक्रिय है। ध्यान दें कि जर्नलिंग "मुक्त" नहीं है। यह 32-बिट पर काम नहीं करता है, यह अतिरिक्त रैम, अतिरिक्त डिस्क स्पेस और अतिरिक्त आईओ का उपयोग करेगा। यदि आप बहुत सारे इन-प्लेस अपडेट (काउंटर जैसे) करते हैं, तो यह महत्वपूर्ण हो सकता है। तो उत्पादन के लिए एक धक्का धक्का से पहले जर्नलिंग मोड का परीक्षण करें। –

+0

महान जवाब! हालांकि यह वास्तव में एक स्क्रिप्ट नहीं है :) जर्नलिंग शायद चाल चलती है। 32-बिट मेरे लिए कोई मुद्दा नहीं है। मैं जर्नलिंग की कोशिश करूंगा! आपकी सहायताके लिए धन्यवाद! – Tilo

1

बस यह इंगित करना चाहते हैं कि 32-बिट संस्करण में काम करता है। हालांकि, यह 32-बिट में डिफ़ॉल्ट रूप से चालू नहीं है।

+0

यह सही है कि 32-बिट संस्करणों पर जर्नलिंग [डिफ़ॉल्ट रूप से अक्षम] है (http://www.mongodb.org/display/DOCS/Journaling#Journaling-32bitnuances%3F) और सक्षम किया जा सकता है .. लेकिन ध्यान दें कि सक्षम करने में सक्षम होगा आपके डेटाबेस के लिए उपलब्ध स्मृति (पहले से सीमित) की मात्रा को कम करें। कई [32-बिट बिल्डों की सीमाएं] हैं (http://www.mongodb.org/display/DOCS/32+bit), और आपको हमेशा उत्पादन के लिए 64-बिट का उपयोग करना चाहिए। – Stennie

+0

आपके पास निश्चित रूप से आपके उत्तर में एक टाइपो है ... 32-बिट बनाम 32-बिट? ;) – Tilo

+0

टिलो, क्षमा करें अगर मेरा शब्द "32-बिट" दोहराकर अजीब बना दिया गया था। जर्नलिंग 32-बिट संस्करण में काम करता है, हालांकि यह डिफ़ॉल्ट रूप से चालू नहीं है। – user483263

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