2012-11-15 13 views
7

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

Source and target databases out of sync. Try to increase max_dbs_open at both servers. 

हम उस किया है साथ में नाकाम रहने, एक हास्यास्पद उच्च संख्या (10,000), लेकिन विफलताओं और संदेशों को एक ही रहने के लिए max_dbs_open की संख्या बढ़ रही शुरू करते हैं। जाहिर है कुछ और गलत है। क्या किसी को पता है कि यह क्या है?

उत्तर

10

जैसा कि यह पता चला है, increase max_dbs_open पर संदेश सबसे अच्छा आंशिक उत्तर है और सबसे खराब भ्रामक है। हमारे मामले में समस्या उन डेटाबेसों की संख्या नहीं थी जो खुली थीं लेकिन स्पष्ट रूप से हमारे कई प्रतिकृतियों द्वारा उपयोग किए जाने वाले HTTP कनेक्शन की संख्या थी।

प्रत्येक प्रतिकृति min(worker_processes + 1, http_connections) उपयोग कर सकते हैं जहां worker_processes प्रत्येक प्रतिकृति और http_connections करने के लिए सौंपा श्रमिकों की संख्या में वर्णित in this document के रूप में प्रत्येक प्रतिकृति के लिए आवंटित HTTP कनेक्शन की अधिकतम संख्या है।

तो इस्तेमाल किया कनेक्शन की कुल संख्या

number of replications * min(worker_processes + 1, http_connections) 

worker_processes का डिफ़ॉल्ट मान 4 है और http_connections का डिफ़ॉल्ट मान 20 है 100 अनुकरण, प्रतिकृति द्वारा उपयोग किए गए HTTP कनेक्शन की कुल संख्या देखते हैं तो 500 है। एक और सेटिंग, max_connections, निर्धारित करता है कि HTTP कनेक्शन की अधिकतम संख्या को CouchDB सर्वर in this document वर्णित करने की अनुमति देगा। डिफ़ॉल्ट 2048 है।

हमारे मामले में प्रत्येक उपयोगकर्ता के पास दो प्रतिकृतियां होती हैं - उपयोगकर्ता से मास्टर डेटाबेस में और उपयोगकर्ता के लिए मास्टर डेटाबेस से दूसरा। इसलिए, हमारे मामले में, डिफ़ॉल्ट सेटिंग्स के साथ, प्रत्येक बार जब हम उपयोगकर्ता को जोड़ते थे तो हम एक अतिरिक्त 10 HTTP कनेक्शन जोड़ रहे थे जो अंततः डिफ़ॉल्ट max_connections के माध्यम से उड़ रहे थे।

चूंकि हमारे अनुकरण न्यूनतम और केवल डेटा की एक छोटी राशि कर रहे हैं मास्टर करने के लिए और उपयोगकर्ता के लिए गुरु से उपयोगकर्ता से ले जाया जाता है, हम वापस संख्या worker_processes की http_connections डायल, वृद्धि हुई max_connections और सब कुछ ठीक है।

अद्यतन

अन्य निष्कर्षों

  1. यह जरूरी हो गया था इसे और अधिक खुले कनेक्शनों

  2. अनुकरण बहुत जल्दी भी वजह से बनाना है करने के लिए अनुमति देने के लिए प्रक्रिया पर ulimit बढ़ाने के लिए की एक जोड़े समस्या का। अगर मैंने वापस डायल किया कि मैंने कितनी जल्दी नई प्रतिकृतियां बनाई हैं तो इससे समस्या को कम करने में भी मदद मिली। YMMV।

+0

क्या यह समस्या हुई थी क्योंकि प्रत्येक उपयोगकर्ता डेटाबेस और मास्टर डेटाबेस की प्रतिकृतियां दो अलग-अलग कॉच डीबी प्रक्रियाओं के बीच थीं? मैं कुछ ऐसा करने की कोशिश कर रहा हूं, लेकिन उपयोगकर्ता डेटाबेस और मास्टर डेटाबेस एक ही सर्वर पर होस्ट किए जाते हैं ताकि उम्मीद है कि मैं किसी भी आईपीसी का उपयोग करने से बचूंगा। – pokstad

0

मेरे लिए इस त्रुटि का उत्पादन किया है क्योंकि "instanceStartTime" GET /{targetDB}/ द्वारा लक्ष्य डेटाबेस द्वारा ने अमान्य किया गया था।

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

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