MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

Ansible . के साथ MongoDB शार्ड्स को तैनात और कॉन्फ़िगर करना

डेटाबेस सिस्टम बेहतर काम करते हैं जब कई चल रहे उदाहरणों के बीच वितरित कार्यभार होता है या डेटा को आसान तरीके से वर्गीकृत किया जाता है। MongoDB शार्डिंग का उपयोग करता है जैसे कि किसी दिए गए डेटाबेस में डेटा को कुछ कुंजी के अनुसार समूहीकृत किया जाता है। शेयरिंग क्षैतिज स्केलिंग को बढ़ाता है जिसके परिणामस्वरूप बेहतर प्रदर्शन और विश्वसनीयता में वृद्धि होती है। सामान्य तौर पर, MongoDB SQL DBMS के विपरीत क्षैतिज और लंबवत स्केलिंग प्रदान करता है उदाहरण के लिए MySQL जो केवल लंबवत स्केलिंग को बढ़ावा देता है।

MongoDB में एक ढीला स्थिरता मॉडल है जिससे संग्रह में एक दस्तावेज़ में एक अतिरिक्त कुंजी हो सकती है जो उसी संग्रह में अन्य दस्तावेज़ों से अनुपस्थित होगी।

साझा करना

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

मान लें कि हमारे पास संग्रह में 120 दस्तावेज़ हैं, इन डेटा को इस तरह से विभाजित किया जा सकता है कि हमारे पास 3 प्रतिकृति सेट हैं और प्रत्येक में 40 दस्तावेज़ हैं जैसा कि नीचे दिए गए कॉन्फ़िगरेशन सेटअप में दर्शाया गया है। यदि दो क्लाइंट अनुरोध भेजते हैं, एक इंडेक्स 35 में एक दस्तावेज़ लाने के लिए और दूसरा जिसका इंडेक्स 92 पर है, अनुरोध क्वेरी राउटर (एक मोंगोस प्रक्रिया) द्वारा प्राप्त किया जाता है जो बदले में कॉन्फ़िगरेशन नोड से संपर्क करता है जो रिकॉर्ड रखता है कैसे टुकड़ों की श्रेणियों को शार्क के बीच वितरित किया जाता है। जब निर्दिष्ट दस्तावेज़ पहचान मिलती है, तो इसे संबंधित शार्क से प्राप्त किया जाता है। ऊपर के उदाहरण के लिए, पहले क्लाइंट का दस्तावेज़ Shard A से प्राप्त किया जाएगा और क्लाइंट B के लिए, दस्तावेज़ Shard C से प्राप्त किया जाएगा। सामान्य तौर पर एक वितरित कार्यभार होगा जिसे क्षैतिज स्केलिंग के रूप में परिभाषित किया गया है।

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

MongoDB उत्पादन परिनियोजन के लिए न्यूनतम अनुशंसित कॉन्फ़िगरेशन एक प्रतिकृति सेट के साथ कम से कम तीन शार्प सर्वर होंगे। सर्वोत्तम प्रदर्शन के लिए, mongos सर्वर को अलग सर्वर पर तैनात किया जाता है जबकि कॉन्फ़िगरेशन नोड्स को शार्क के साथ एकीकृत किया जाता है।

MongoDB Shards को Ansible के साथ परिनियोजित करना

अलग-अलग क्लस्टर के शार्क और प्रतिकृति सेट को कॉन्फ़िगर करना एक बोझिल उपक्रम है इसलिए हम बहुत आसानी से आवश्यक परिणाम प्राप्त करने के लिए Ansible जैसे सरल टूल में संकल्प लेते हैं। Playbooks का उपयोग आवश्यक कॉन्फ़िगरेशन और कार्यों को लिखने के लिए किया जाता है जिन्हें Ansible सॉफ़्टवेयर निष्पादित करेगा।

व्यवस्थित प्लेबुक प्रक्रिया होनी चाहिए:

  1. मोंगो बेस पैकेज (नो-सर्वर, पाइमोंगो और कमांड लाइन इंटरफेस) स्थापित करें
  2. मोंगोडब सर्वर स्थापित करें। आरंभ करने के लिए इस गाइड का पालन करें।
  3. मोंगॉड इंस्टेंस सेट करें और वहां संवाददाता प्रतिकृति सेट करें।
  4. कॉन्फ़िगर करें और कॉन्फ़िगरेशन सर्वर सेट करें
  5. मोंगोस रूटिंग सेवा को कॉन्फ़िगर और सेट करें।
  6. शार्ड्स को अपने क्लस्टर में जोड़ें।

शीर्ष-स्तरीय प्लेबुक इस तरह दिखनी चाहिए

- name: install mongo base packages include: mongod.yml
  tags: - mongod

- name: configure config server
  include: configServer.yml
  when: inventory_hostname in groups['mongoc-servers'] 
  tags:
  - cs

- name: configure mongos server
  include: configMongos.yml
  when: inventory_hostname in groups['mongos-server'] tags:
  - mongos

- name: add shards
  include: addShards.yml
  when: inventory_hostname in groups['mongos-servers'] 
  tags:
  - mongos
  - shards

हम उपरोक्त फ़ाइल को mongodbCluster.yml के रूप में सहेज सकते हैं।

मोंगोडीबी डीबीए बनें - मोंगोडीबी को प्रोडक्शन में लाना सीखें कि मोंगोडीबी को तैनात करने, मॉनिटर करने, प्रबंधित करने और स्केल करने के लिए आपको क्या जानने की जरूरत है मुफ्त में डाउनलोड करें

एक साधारण mongodb.yml फ़ाइल इस तरह दिखेगी:

---
- hosts: ansible-test
  remote_user: root
  become: yes
  tasks:
  - name: Import the public key used by the package management system
    apt_key: keyserver=hkp://keyserver.ubuntu.com:80 id=7F0CEB10 state=present
  - name: Add MongoDB repository
    apt_repository: repo='deb <a class="vglnk" href="https://downloads-distro.mongodb.org/repo/ubuntu-upstart" rel="nofollow"><span>http</span><span>://</span><span>downloads</span><span>-</span><span>distro</span><span>.</span><span>mongodb</span><span>.</span><span>org</span><span>/</span><span>repo</span><span>/</span><span>ubuntu</span><span>-</span><span>upstart</span></a> dist 10gen' state=present
  - name: install mongodb
    apt: pkg=mongodb-org state=latest update_cache=yes
    notify:
    - start mongodb
  handlers:
    - name: start mongodb
      service: name=mongod state=started

प्रतिकृति सेट के परिनियोजन के लिए आवश्यक सामान्य मापदंडों के लिए, हमें शार्क जोड़ने के लिए इन दो और की आवश्यकता है।

  • शार्ड: डिफ़ॉल्ट रूप से यह शून्य है, यह एक शार्प कनेक्शन स्ट्रिंग है जो <प्रतिकृति>/होस्ट:पोर्ट के प्रारूप में होनी चाहिए। उदाहरण के लिए प्रतिकृति0/siteurl1.com:27017
  • राज्य: डिफ़ॉल्ट रूप से वह मान मौजूद होता है जो बताता है कि शार्क मौजूद होना चाहिए, अन्यथा कोई इसे अनुपस्थित रहने के लिए सेट कर सकता है।

जैसा कि इस ब्लॉग में बताया गया है, प्रतिकृति सेट को परिनियोजित करने के बाद, आप शार्प जोड़ने के लिए आगे बढ़ सकते हैं।

# add a replicaset shard named replica0 with a member running on port 27017 on mongodb0.example.net
- mongodb_shard:
    login_user: admin
    login_password: root
    shard: "replica0/mongodb1.example.net:27017"
    state: present

# add a standalone mongod shard running on port 27018 of mongodb2.example.net
- mongodb_shard:
    login_user: admin
    login_password: root
    shard: "mongodb2.example.net:27018"
    state: present

# Single node shard running on localhost
- name: Ensure shard replica0 exists
  mongodb_shard:
    login_user: admin
    login_password: root
    shard: "replica0/localhost:3001"
    state: present

# Single node shard running on localhost
- name: Ensure shard replica0 exists
  mongodb_shard:
    login_user: admin
    login_password: root
    shard: "replica0/localhost:3002"
    state: present

इन सभी कॉन्फ़िगरेशन को सेट करने के बाद हम प्लेबुक को कमांड के साथ चलाते हैं

ansible-playbook -i hosts mongodbCluster.yml

एक बार जब प्लेबुक पूरी हो जाती है, तो हम किसी भी mongos सर्वर में लॉग इन कर सकते हैं और कमांड sh.status() जारी कर सकते हैं। यदि आउटपुट नीचे जैसा कुछ है, तो शार्क को तैनात किया गया है। इसके अलावा आप कुंजी mongodb_shard देख सकते हैं यदि यह मूल्यवान सफलता है।

mongos> sh.status()
    --- Sharding Status --- 
      sharding version: { "_id" : 1, "version" : 3 }
      shards:
        {  "_id" : "shardA",  "host" : "locahhost1/web2:2017,locahhost3:2017" }
        {  "_id" : "shardB",  "host" : "locahhost3/web2:2018,locahhost3:2019" }
{  "_id" : "shardC",  "host" : "locahhost3/web2:2019,locahhost3:2019" }

    databases:
        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }

रेप्लिका0 नामक शार्क को हटाने के लिए

- mongodb_shard:
    login_user: admin
    login_password: root
    shard: replica0
    state: absent

निष्कर्ष

Ansible ने परिनियोजन प्रक्रिया को आसान बनाने में एक प्रमुख भूमिका निभाई है क्योंकि हमें केवल उन कार्यों को परिभाषित करने की आवश्यकता है जिन्हें निष्पादित करने की आवश्यकता है। उदाहरण के लिए कल्पना करें कि यदि आपके पास 40 प्रतिकृति सेट सदस्य हैं और आपको प्रत्येक में शार्क जोड़ने की आवश्यकता है। सामान्य तरीके से चलने में आपको उम्र लग जाएगी और बहुत सारी मानवीय त्रुटियाँ हो सकती हैं। ansible के साथ आप बस इन कार्यों को एक साधारण फ़ाइल में परिभाषित करते हैं जिसे प्लेबुक कहा जाता है और जब फ़ाइल निष्पादित की जाती है तो ansible कार्यों का ध्यान रखेगा।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडीबी काम नहीं कर रहा है। त्रुटि:dbpath (/data/db) मौजूद नहीं है।

  2. Mongo में केस असंवेदनशील खोज

  3. समय के साथ दस्तावेज़ सम्मिलित करते समय डिफ़ॉल्ट तिथि निर्धारित करें। समय क्षेत्र

  4. एक नोडज स्क्रिप्ट के भीतर एक मोंगो डेटाबेस में सभी संग्रह सूचीबद्ध करना

  5. मोंगोडीबी $जोड़ें