रिडंडेंसी बनाकर डेटा की उच्च उपलब्धता सुनिश्चित करने के लिए डेटाबेस सिस्टम में प्रतिकृति को व्यापक रूप से लागू किया गया है। यह मूल रूप से अलग-अलग चल रहे सर्वरों में एक ही डेटा की एक कॉपी बनाने की एक रणनीति है जो अलग-अलग मशीनों में हो सकती है, ताकि मुख्य सर्वर के विफल होने की स्थिति में, दूसरे को सर्विंग जारी रखने के लिए लाया जा सके।
एक प्रतिकृति सेट MongoDB उदाहरणों का एक समूह है जो डेटा के समान सेट को बनाए रखता है। वे उत्पादन परिनियोजन का आधार हैं। प्रतिकृति इस तथ्य से फायदेमंद है कि मुख्य सर्वर सिस्टम विफल होने की स्थिति में डेटा हमेशा एक अलग सर्वर से उपलब्ध होता है। इसके अलावा, यह क्लाइंट को विभिन्न सर्वरों को रीड रिक्वेस्ट भेजने और निकटतम सर्वर से प्रतिक्रिया प्राप्त करने में सक्षम करके रीड थ्रूपुट में सुधार करता है।
एक प्रतिकृति सेट में कई डेटा असर नोड्स होते हैं जिन्हें विभिन्न मशीनों और एक आर्बिटर नोड में होस्ट किया जा सकता है। इन डेटा असर नोड्स में से एक को प्राथमिक के रूप में लेबल किया गया है जबकि अन्य माध्यमिक नोड्स हैं। प्राइमरी नोड सभी राइट ऑपरेशंस को प्राप्त करता है और फिर राइट ऑपरेशन पूरा होने और ऑप्लॉग में रिकॉर्ड किए गए बदलावों के बाद डेटा को अन्य नोड्स में कॉपी करता है।
एक मध्यस्थ एक अतिरिक्त उदाहरण है जो एक डेटा सेट को बनाए नहीं रखता है, लेकिन अन्य प्रतिकृति सेट सदस्यों द्वारा दिल की धड़कन और चुनाव अनुरोधों का जवाब देकर एक प्रतिकृति सेट में एक कोरम प्रदान करता है। वे पूरी तरह कार्यात्मक के बजाय एक प्रतिकृति सेट को बनाए रखने की लागत को कम करते हैं। डेटा सेट के साथ प्रतिकृति सेट सदस्य।
स्वचालित विफलता
एक प्राथमिक नोड कुछ कारणों से विफल हो सकता है जैसे कि पावर आउटेज या नेटवर्क डिस्कनेक्शन जिससे अन्य सदस्यों के साथ संवाद करने में सक्षम नहीं है। यदि संचार को कॉन्फ़िगर किए गए चुनाव टाइमआउट मिलिस अवधि से अधिक के लिए काट दिया जाता है, तो माध्यमिक में से एक चुनाव के लिए खुद को नए प्राथमिक के रूप में नामित करने के लिए कहता है। यदि चुनाव पूर्ण और सफल होता है, तो क्लस्टर सामान्य संचालन के साथ जारी रहता है। इस अवधि के दौरान, कोई भी लेखन कार्य नहीं किया जा सकता है। हालांकि, प्राथमिक ऑफ़लाइन होने पर पढ़ने वाली क्वेरी को सेकेंडरी पर सामान्य रूप से जाने के लिए कॉन्फ़िगर किया जा सकता है।
एक इष्टतम प्रतिकृति प्रक्रिया के लिए, क्लस्टर द्वारा एक नया प्राथमिक चुनने से पहले का औसत समय डिफ़ॉल्ट प्रतिकृति कॉन्फ़िगरेशन सेटिंग्स के साथ अधिकतम 12 सेकंड होना चाहिए। यह नेटवर्क विलंबता जैसे कारकों से प्रभावित हो सकता है जो समय बढ़ा सकता है इसलिए किसी को यह सुनिश्चित करने के लिए क्लस्टर की वास्तुकला पर विचार करना चाहिए कि यह समय बहुत अधिक निर्धारित नहीं है।
इलेक्शनटाइमआउटमिलिस का मान डिफ़ॉल्ट 10000 (10 सेकंड) से कम किया जा सकता है इसलिए प्राथमिक को बहुत तेजी से सबसे पहले पता लगाया जा सकता है। हालाँकि, यह अस्थायी नेटवर्क विलंबता जैसे मामूली कारकों के लिए भी अक्सर चुनाव बुला सकता है, भले ही प्राथमिक नोड स्वस्थ हो। यह लिखने के संचालन के लिए रोलबैक जैसे मुद्दों को जन्म देगा।
प्रतिकृति सेट के लिए उत्तरदायी
जैसा कि उल्लेख किया गया है, एक प्रतिकृति सेट में विभिन्न मेजबान मशीनों के सदस्य हो सकते हैं इसलिए क्लस्टर को बनाए रखने के लिए इसे और अधिक जटिल बनाते हैं। हमें एक एकल मंच की आवश्यकता है जिससे इस प्रतिकृति सेट को आसानी से बनाए रखा जा सके। Ansible उन उपकरणों में से एक है जो प्रतिकृति सेट को कॉन्फ़िगर और प्रबंधित करने के लिए बेहतर अवलोकन प्रदान करता है। यदि आप उत्तर देने के लिए नए हैं तो कृपया इस लेख से एक प्लेबुक बनाने जैसी बुनियादी बातों को समझने के लिए एक संक्षिप्त पुनर्कथन करें।
कॉन्फ़िगरेशन पैरामीटर
- arbiter_at_index: यह प्रतिकृति सेट सदस्यों की सूची में मध्यस्थ की स्थिति को परिभाषित करता है। एक मध्यस्थ याद रखता है कि अन्य सदस्यों के रूप में कोई डेटा नहीं है और प्राथमिक नोड के रूप में उपयोग नहीं किया जा सकता है। यह केवल चुनाव के दौरान कोरम बनाने के लिए उपलब्ध है। उदाहरण के लिए, यदि आपके पास सदस्यों की संख्या समान है, तो एक मध्यस्थ को जोड़ना अच्छा है जैसे कि यदि वोट बराबर हैं, तो यह एक विजेता सदस्य बनाने के लिए 1 जोड़ता है। असाइन किया जाने वाला मान एक पूर्णांक होना चाहिए।
- चेनिंग_अनुमति: यह एक बूलियन मान लेता है और परिभाषित करता है कि क्या अन्य माध्यमिक सदस्यों को अन्य माध्यमिक सदस्यों से दोहराना चाहिए यदि _allowed =true का पीछा करते हैं। अन्यथा यदि जंजीर _allowed =false है, तो अन्य द्वितीयक सदस्य केवल प्राथमिक से दोहरा सकते हैं। डिफ़ॉल्ट मान सत्य है।
- चुनाव_समयबाह्य_सेकंड: डिफ़ॉल्ट रूप से मान 10000 है (एक पूर्णांक मान लेता है)। यह मिलीसेकंड में यह पता लगाने का समय है कि प्राथमिक नोड कब पहुंच योग्य नहीं है या अन्य सदस्यों से संवाद नहीं कर रहा है, इसलिए चुनाव शुरू होता है। इसे 12 सेकंड के औसत मान पर सेट करें। यदि बहुत अधिक सेट किया जाता है, तो प्राथमिक विफलता का पता लगाने में बहुत समय लगेगा और इसलिए चुनाव करने में अधिक समय लगेगा। चूंकि यह लेखन कार्य को प्रभावित करता है, आप उस अवधि के दौरान बहुत अधिक डेटा खो सकते हैं। दूसरी ओर, यदि इसे बहुत कम सेट किया जाता है, तब भी बार-बार चुनाव शुरू होंगे, जब मामला इतना गंभीर न हो और प्राथमिक अभी भी पहुंच योग्य हो। परिणामस्वरूप, आपके पास लेखन कार्यों के लिए इतने सारे रोलबैक होंगे जो किसी बिंदु पर खराब डेटा अखंडता या असंगति का कारण बन सकते हैं।
- heartbeat_timeout_secs: रेप्लिका सेट को चुनाव से पहले दिल की धड़कन के रूप में संदर्भित एक संकेत भेजकर एक दूसरे से संवाद करने की आवश्यकता होती है। इसके बाद सदस्यों को एक विशिष्ट अवधि के भीतर इस सिग्नलिंग का जवाब देने की आवश्यकता होती है जो डिफ़ॉल्ट रूप से 10 सेकंड के लिए सेट होती है। Heartbeat_timeout_secs सेकंड की संख्या है जो प्रतिकृति सेट के सदस्य एक दूसरे से एक सफल दिल की धड़कन की प्रतीक्षा करते हैं और यदि कोई सदस्य प्रतिक्रिया नहीं देता है, तो इसे दुर्गम के रूप में चिह्नित किया जाता है। हालांकि, यह केवल प्रोटोकॉल संस्करण 0 के लिए लागू है। इसलिए इसके लिए था मान एक पूर्णांक है।
- लॉगिन_होस्ट: यह वह होस्ट है जो लॉगिन डेटाबेस रखता है। डिफ़ॉल्ट रूप से MongoDB के लिए लोकलहोस्ट है।
- लॉगिन_डेटाबेस: डिफ़ॉल्ट व्यवस्थापक है और वह जगह है जहां लॉगिन क्रेडेंशियल संग्रहीत किए जाते हैं। (एक स्ट्रिंग मान लेता है)
- लॉगिन_उपयोगकर्ता: उपयोगकर्ता नाम जिसके साथ प्रमाणीकरण किया जाना चाहिए। (एक स्ट्रिंग मान लेता है)
- लॉगिन_पासवर्ड: उपयोगकर्ता को प्रमाणित करने के लिए पासवर्ड। (एक स्ट्रिंग मान लेता है)
- लॉगिन_पोर्ट: यह होस्ट के लिए लॉगिन करने के लिए MongoDB पोर्ट है। (एक पूर्णांक मान लेता है)
- सदस्य: प्रतिकृति सेट सदस्यों की एक सूची को परिभाषित करता है। यह कॉमा या यम सूची से अलग की गई एक स्ट्रिंग है यानी mongodb0:27017, mongodb2:27018, mongodb3:27019… यदि कोई पोर्ट नंबर नहीं है, तो 27017 मान लिया जाता है।
- प्रोटोकॉल_संस्करण: एक पूर्णांक लेता है जो प्रतिकृति प्रक्रिया के संस्करण को परिभाषित करता है। या तो 0 या 1
- प्रतिकृति_सेट: यह एक स्ट्रिंग मान है जो प्रतिकृति सेट के नाम को परिभाषित करता है।
- एसएसएल: बूलियन मान जो परिभाषित करता है कि डेटाबेस से कनेक्ट करते समय एसएसएल कनेक्शन का उपयोग करना है या नहीं।
- ssl_certs_reqs: यह निर्दिष्ट करता है कि क्या कनेक्शन के दूसरी तरफ से प्रमाण पत्र की आवश्यकता है और यदि प्रदान किए जाने पर इसे सत्यापित करने की आवश्यकता होगी। इसके लिए विकल्प CERT_NONE, CERT_OPTIONAL और CERT_REQUIRED हैं। डिफ़ॉल्ट CERT_REQUIRED है।
- सत्यापित करें: एक बूलियन मान लेता है जो परिभाषित करता है कि प्रदान किए गए प्रतिकृति सेट कॉन्फ़िगरेशन पर कोई मूल सत्यापन करना है या नहीं। डिफ़ॉल्ट मान सत्य है।
Ansible का उपयोग करके MongoDB रेप्लिका सेट बनाना
उत्तर में एक प्रतिकृति सेट स्थापित करने के लिए कार्यों का एक सरल उदाहरण यहां दिया गया है। आइए इस फ़ाइल को कार्य कहते हैं। yaml
# Create a replicaset called 'replica0' with the 3 provided members
- name: Ensure replicaset replica0 exists
mongodb_replicaset:
login_host: localhost
login_user: admin
login_password: root
replica_set: replica0
arbiter_at_index:2
election_timeout_secs:12000
members:
- mongodb1:27017
- mongodb2:27018
- mongodb3:27019
when: groups.mongod.index(inventory_hostname) == 0
# Create two single-node replicasets on the localhost for testing
- name: Ensure replicaset replica0 exists
mongodb_replicaset:
login_host: localhost
login_port: 3001
login_user: admin
login_password: root
login_database: admin
replica_set: replica0
members: localhost:3000
validate: yes
- name: Ensure replicaset replica1 exists
mongodb_replicaset:
login_host: localhost
login_port: 3002
login_user: admin
login_password: secret
login_database: root
replica_set: replica1
members: localhost:3001
validate: yes
हमारी प्लेबुक में हम
. जैसे कार्यों को कॉल कर सकते हैं---
- hosts: ansible-test
remote_user: root
become: yes
Tasks:
- include: tasks.yml
यदि आप इसे अपनी प्लेबुक में चलाते हैं, तो ansible-playbook -i stock.txt -c ssh mongodbcreateReplcaSet.yaml आपको एक प्रतिक्रिया के साथ प्रस्तुत किया जाएगा यदि प्रतिकृति सेट बनाया गया है या नहीं। यदि कुंजी mongodb_replicaset को सफलता के मान और बनाए गए प्रतिकृति सेट के विवरण के साथ लौटाया जाता है, तो आप जाने के लिए अच्छे हैं।
निष्कर्ष
मोंगोडीबी में आम तौर पर मोंगोड उदाहरणों के लिए एक प्रतिकृति सेट को कॉन्फ़िगर करना कठिन होता है जिसे विभिन्न मशीनों द्वारा होस्ट किया जा सकता है। हालाँकि, Ansible कुछ मापदंडों को परिभाषित करके ऐसा करने का एक सरल मंच प्रदान करता है जैसा कि ऊपर चर्चा की गई है। प्रतिकृति उन प्रक्रियाओं में से एक है जो निरंतर अनुप्रयोग संचालन सुनिश्चित करती है इसलिए उत्पादन की दुनिया में कई सदस्यों को सेट करके अच्छी तरह से कॉन्फ़िगर किया जाना चाहिए। चुनाव प्रक्रिया के दौरान कोरम बनाने के लिए एक मध्यस्थ का उपयोग किया जाता है, इसलिए इसकी स्थिति को परिभाषित करके कॉन्फ़िगरेशन फ़ाइल में शामिल किया जाना चाहिए।