2013-05-14 4 views
5

मैं कैसंद्रा के लिए नौसिखिया हूं - मैं एक नोड पर कैसंड्रा में काम करता है और क्रैश रिकवरी से संबंधित जानकारी खोज रहा हूं। और, उम्मीद है कि कोई विवरण विवरण स्पष्ट कर सकता है।एक एकल नोड पर कैसंड्रा कमिट और रिकवरी

मैं कैसंद्रा का परीक्षण कर रहा हूं - इसलिए, इसे एक नोड पर सेट करें। मैं लाखों पंक्तियों को सम्मिलित करने के लिए डेटास्टैक्स पर स्ट्रेसस्टूल का उपयोग कर रहा हूं। बिजली की विफलता या सिस्टम शट डाउन होने पर क्या होता है? क्या कैसंद्रा की स्मृति में मौजूद सभी डेटा कैसंड्रा पुनरारंभ पर डिस्क पर लिखे जाएंगे (मुझे लगता है कि प्रतिबद्धता मध्यस्थ के रूप में कार्य करता है)? यह प्रक्रिया कब तक है?

धन्यवाद!

उत्तर

11

कैसंड्रा का प्रतिबद्ध लॉग कैसंड्रा टिकाऊ लिखता है। जब आप कैसंद्रा को लिखते हैं, तो क्लाइंट को लिखने से पहले लिखने को प्रतिबद्ध लॉग में जोड़ा जाता है। इसका अर्थ यह है कि प्रत्येक लिखने के लिए क्लाइंट को एक सफल प्रतिक्रिया प्राप्त होती है जो प्रतिबद्ध लॉग में लिखी जाने की गारंटी है। यह लेखन वर्तमान मेमटेबल को भी बनाया गया है, जो अंततः डिस्क पर एसएसटीबल के रूप में लिखा जाएगा जब काफी बड़ा होगा। लिखने के बाद यह एक लंबा समय हो सकता है।

हालांकि, प्रतिबद्धता लॉग प्रदर्शन निष्पादन कारणों से डिस्क पर तुरंत समन्वयित नहीं किया जाता है। डिफ़ॉल्ट 10 सेकंड की अवधि के साथ आवधिक मोड (cassandra.yaml में commitlog_sync param द्वारा सेट किया गया है) (cassandra.yaml में commitlog_sync_period_in_ms द्वारा सेट)। इसका मतलब है कि प्रतिबद्ध लॉग प्रत्येक 10 सेकंड में डिस्क पर सिंक किया जाता है। इस व्यवहार के साथ यदि सर्वर शक्ति खो देता है तो आप 10 सेकंड तक लिख सकते हैं। यदि आपके क्लस्टर में एकाधिक नोड्स थे और एक से अधिक के प्रतिकृति कारक का उपयोग किया जाता है तो आपको किसी भी डेटा को खोने के लिए 10 सेकंड के भीतर कई नोड्स को पावर खोना होगा।

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

अगर आपका सर्वर सत्ता खो देता है, तो स्टार्टअप पर कैसंड्रा अपने मेमटेबल को पुनर्निर्माण के लिए प्रतिबद्ध लॉग को दोहराता है। इस प्रक्रिया में बहुत अधिक भारी सर्वरों पर सेकंड (संभवतः मिनट) लगेंगे।

यदि आप यह सुनिश्चित करना चाहते हैं कि memtables में डेटा डिस्क पर लिखा गया है तो आप 'nodetool flush' चला सकते हैं (यह प्रति नोड संचालित करता है)। यह एक नया एसएसटीबल बनाएगा और स्मेच किए गए मेमटेबल्स में डेटा का जिक्र करते हुए प्रतिबद्ध लॉग हटा देगा।

+3

विस्तृत और बहुत अच्छी तरह से लिखित स्पष्टीकरण के लिए धन्यवाद - यह अब बहुत स्पष्ट है।मुझे आशा है कि यह मेरे जैसे अन्य नए लोगों की भी मदद करेगा। – user1680784

+0

ऐसा लगता है कि आपके पास 'बैच' और 'आवधिक' पीछे की ओर हो सकता है ... आवधिक डिफ़ॉल्ट है, स्वीकृति देने के लिए आप बैच पर स्विच करेंगे, हां? –

+0

@ रिचर्ड मुझे इस समस्या का सामना करना पड़ रहा है। कैसंद्रा प्रतिबद्ध लॉग भ्रष्ट है। कोई सुझाव? मैंने यहां एक प्रश्न पोस्ट किया है: http://stackoverflow.com/questions/33304367/cassandra-exiting-due-to-error-while-processing-commit-log-during-initializatio – Dojo

0

आप

  1. की तरह कुछ पूछ रहे हैं कि वहाँ समय डेटा एसक्यूएल * लोडर का उपयोग कर ओरेकल में लोड किया जा रहा है पर एक नेटवर्क विफलता है क्या?
  2. या डेटा ट्रांसफर करते समय कुछ शर्त के कारण एसक्यूप प्रोसेसिंग बंद कर देता है?

विद्युत विफलता या सिस्टम शट डाउन से पहले जो भी डेटा स्थानांतरित किया जा रहा है, वह वही रहेगा।

दूसरे प्रश्न पर आ रहा है, जब कभी भी ज्ञापन अंतरिक्ष से बाहर हो जाता है, यानी जब चाबियों की संख्या कुछ सीमा से अधिक हो जाती है (128 डिफ़ॉल्ट है) या जब यह समय अवधि (क्लस्टर घड़ी) तक पहुंच जाती है, तो इसे स्स्टेबल में संग्रहीत किया जा रहा है अपरिवर्तनीय जगह।

+0

दूसरे भाग में मदद की - धन्यवाद! – user1680784

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