उदाहरण के लिए आप शायद अपने MongoDB को एक विश्वसनीय क्लाउड सेवा प्रदाता जैसे एटलस पर होस्ट कर रहे हैं क्योंकि आप वास्तव में अपने विचार पर ध्यान केंद्रित करना चाहते हैं और नेटवर्किंग, स्टोरेज, एक्सेस आदि जैसे सभी सूक्ष्म कुंजी प्रबंधन क्षेत्रों को सौंपना चाहते हैं।
यह सब शुरू में अच्छा लगता है जब तक कि आपका छोटा विचार व्यवसाय में बदलना शुरू नहीं हो जाता और लागत आसमान छूने लगती है। अगर ऐसा नहीं भी है, तब भी यह पोस्ट आपको इसमें शामिल तकनीकी जटिलताओं का एक सामान्य अवलोकन प्रदान करेगी (और रुपये बचाए गए!)
BTW, हम कितनी बचत की बात कर रहे हैं? आइए एक एटलस . के बीच एक त्वरित तुलना करें उदाहरण और AWS . पर एक स्व-होस्टेड MongoDB ।
एटलस (~$166/माह)
$0.23/घंटा उपरोक्त चयनित आवश्यकताओं के आधार पर (~ cloud.mongodb.com)
एडब्ल्यूएस (~$36/माह)
उदाहरण के लिए $0.0416/घंटा और ईबीएस प्रकार और भंडारण के आधार पर अतिरिक्त मूल्य निर्धारण (~ कैलकुलेटर.एडब्ल्यूएस)
<ब्लॉकक्वॉट>बुनियादी ढांचे के मामले में यह लगभग 4.5 गुना बचत है!
अब जबकि आप प्रमुख कारणों को जानते हैं और अभी भी इस पोस्ट को पढ़ रहे हैं, बिना किसी और हलचल के, आइए तकनीक में गोता लगाएँ।
रूपरेखा
- बुनियादी ढांचे की स्थापना
- मोंगोडीबी की स्थापना
- बल्क माइग्रेशन
- कनेक्शन स्विच विलंबता को पाटने के लिए डेल्टा-सिंक (पुराने समूहों पर लागू नहीं)
चूंकि पूरी सामग्री एक ही स्थान पर थोड़ी थकाऊ हो सकती है, इसलिए मैं इसे 2 संबंधित पोस्ट में विभाजित करने जा रहा हूं।
1. आधारभूत संरचना की स्थापना
मैं RedHat Enterprise Linux 8 चलाने वाले इंस्टेंस को सेट करने के लिए गाइड के नीचे उल्लेख करने जा रहा हूं एडब्ल्यूएस पर। ऐसा इसलिए है क्योंकि MongoDB आमतौर पर xfs फ़ाइल-सिस्टम के साथ बेहतर प्रदर्शन करता है। इसे बेहतर ढंग से समझने के लिए यहां एक लेख है।
एक EC2 इंस्टेंस स्पिन करें
मैंने एक t3.small
. का उपयोग किया है उदाहरण जो 2 vCPUs . के साथ आता है और 2GB RAM यद्यपि आप अपनी पसंद का कोई भी उदाहरण चुन सकते हैं।
यह अनुशंसा की जाती है कि आपके DB के पास कम से कम 1GB RAM तक पहुंच होनी चाहिए और 2 वास्तविक कोर क्योंकि यह डिफ़ॉल्ट इंजन WiredTiger द्वारा प्रबंधित कैशिंग और समवर्ती तंत्र के दौरान प्रदर्शन को सीधे प्रभावित करता है . आप रैम और सीपीयू आवश्यकताओं से संबंधित उत्पादन नोटों के बारे में अधिक यहां पढ़ सकते हैं ।
कॉन्फ़िगरेशन अवलोकन:
- OS:Redhat Enterprise Linux 8 (x64 इंटेल-आधारित)
- इंस्टेंस प्रकार:t3.small
- संग्रहण:10GB (ओएस) + 30GB (डेटा) + 3GB (लॉग) ईबीएस . के यानी 3 अलग-अलग खंड
मुझे लगता है कि आप AWS पर VM बनाने से परिचित हैं।
अब, एक बार इंस्टेंस चालू स्थिति में होने के बाद, एक इलास्टिक आईपी असाइन करें इसके लिए और फिर बस मशीन में रिमोट लॉगिन करें।
<ब्लॉकक्वॉट>हमें इलास्टिक आईपी की आवश्यकता होगी उदाहरण के लिए सार्वजनिक होस्टनाम सेटअप करने के लिए
$ ssh -i <PEM_FILE> ec2-user@<ELASTIC_IP>
अतिरिक्त वॉल्यूम माउंट करें
हमने डेटा और लॉग के लिए रूट FS के अलावा 2 अतिरिक्त EBS वॉल्यूम जोड़े हैं जिन्हें अभी माउंट किया जाना है (30Gb और 3Gb याद रखें? ) आप वॉल्यूम ब्लॉक का उपयोग करके सूचीबद्ध कर सकते हैं,
$ sudo lsblk
अतिरिक्त वॉल्यूम रूट ब्लॉक के ठीक बाद सूचीबद्ध होंगे (तीर देखें)
ऊपर की छवि में, आप देख सकते हैं कि अतिरिक्त संस्करणों को नाम दिया गया है
- xvdb (डेटा स्टोर करने के लिए 30 जीबी स्पेस)
- xvdc (लॉग स्टोर करने के लिए 3 जीबी स्पेस)
अब, उन संस्करणों में फाइल-सिस्टम बनाते हैं।
$ sudo mkfs.xfs -L mongodata /dev/xvdb
$ sudo mkfs.xfs -L mongologs /dev/xvdc
<ब्लॉकक्वॉट>
-L
वॉल्यूम लेबल सेट करने के लिए एक उपनाम विकल्प है
और फिर वॉल्यूम माउंट करें।
$ sudo mount -t xfs /dev/xvdb /var/lib/mongo
$ sudo mount -t xfs /dev/xvdc /var/log/mongodb
इन परिवर्तनों को प्रतिबिंबित करने के लिए, सिस्टम को रिबूट करना होगा। इसलिए, अब हमें विभाजन की दृढ़ता की भी आवश्यकता है ताकि अनजाने में रिबूट होने की स्थिति में हम डेटाबेस संग्रहण को न खोएं।
हम इसे fstab फ़ाइल में माउंट नियम निर्दिष्ट करके प्राप्त कर सकते हैं। आप इसके बारे में यहाँ और अधिक पढ़ सकते हैं।
इससे पहले आइए उपरोक्त विभाजनों के UUID को कॉपी करें(क्योंकि वे अद्वितीय हैं और सिस्टम पुनरारंभ होने पर नहीं बदलेंगे )
$ sudo blkid
/dev/xvdb . के लिए सूचीबद्ध UUIDs को कॉपी करें और /dev/xvdc . “LABEL” . का संदर्भ लें ब्लॉक पहचान के लिए
अब /etc/fstab
खोलें फ़ाइल और कॉन्फ़िगरेशन को निम्न प्रारूप में पेस्ट करें।
UUID=<COPIED_UUID_FOR_DATA> /var/lib/mongo xfs defaults,nofail 0 0
UUID=<COPIED_UUID_FOR_LOGS> /var/log/mongodb xfs defaults,nofail 0 0
होस्टनाम अपडेट करें
होस्टनाम का उपयोग नेटवर्क पर आपके डेटाबेस सर्वर की पहचान करने के लिए किया जाएगा। आप या तो ऊपर दिए गए इलास्टिक आईपी का उपयोग कर सकते हैं या डोमेन नाम (यदि उपलब्ध हो)। /etc/hostname
खोलें फ़ाइल और प्रविष्टि संलग्न करें। उदाहरण के लिए
ip-xx.us-east-2.compute.internal **<ELASTIC_IP> <DOMAIN_1> <DOMAIN_2>** ...
प्रक्रिया सीमाएं अपडेट करें (वैकल्पिक)
सिस्टम को स्थिर रखते हुए स्वीकार्य कनेक्शन की अधिकतम संख्या को नियंत्रित करने के लिए यह वैकल्पिक रूप से आवश्यक है। /etc/security/limits.conf
खोलें। फ़ाइल करें और निम्न प्रविष्टियाँ जोड़ें।
* soft nofile 64000
* hard nofile 64000
* soft nproc 32000
* hard nproc 32000
अब जबकि इन्फ्रा से संबंधित सभी पूर्वापेक्षाएँ क्रमबद्ध हैं, रिबूट उदाहरण, और चलिए MongoDB स्थापना के लिए आगे बढ़ते हैं।
1. MongoDB सेट करना
रेपो स्रोत जोड़ें
एक फ़ाइल बनाएँ /etc/yum.repos.d/mongodb-org.4.2.repo
और निम्नलिखित पैकेज रिपॉजिटरी विवरण जोड़ें।
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
अब MongoDB इंस्टॉल करें।
$ sudo yum -y install mongodb-org
निर्देशिका और सेटअप अनुमतियां बनाएं
MongoDB डिफ़ॉल्ट रूप से डेटा और आंतरिक लॉग को संग्रहीत करने के लिए निम्न पथों का उपयोग करता है:
<ब्लॉकक्वॉट>
/var/lib/mongo → डेटा
/var/log/mongodb → लॉग्स
निर्देशिका बनाएं
$ sudo mkdir /var/lib/mongo
$ sudo mkdir /var/log/mongodb
उपयोगकर्ता और समूह अनुमतियां बदलें
$ sudo chown mongod:mongod /var/lib/mongo
$ sudo chown mongod:mongod /var/log/mongod
एक व्यवस्थापक उपयोगकर्ता बनाएं
मोंगॉड डेमॉन/सेवा उपयोगकर्ता बनाने के लिए आगे बढ़ने से पहले पहले चलना चाहिए। आइए डिफ़ॉल्ट कॉन्फ़िगरेशन का उपयोग करें (/etc/mongod.conf
में संग्रहीत) ) अभी के लिए और डेमॉन प्रक्रिया शुरू करें।
$ sudo -u mongod mongod -f /etc/mongod.conf
उपरोक्त आदेश फोर्क मोड (डिफ़ॉल्ट) में मोंगोड डेमॉन शुरू करेगा।
अब, सर्वर में लॉग इन करें और अपना पहला व्यवस्थापक उपयोगकर्ता बनाएं।
मोंगो खोल खोलें
$ mongo
रूट-व्यवस्थापक बनाने के लिए "व्यवस्थापक" डेटाबेस का उपयोग करें
> use admin
व्यवस्थापक उपयोगकर्ता बनाएं
> db.createUser({user: "admin", pwd: "password", roles: [{role: "root", db: "admin"}]})
एक नियमित उपयोगकर्ता बनाएं
> db.createUser({user: "normal_user", pwd: "password", roles: [{role: "readWriteAnyDatabase", db: "admin"}]})
सर्वर को अभी के लिए शट डाउन करें। हम संशोधित कॉन्फ़िगरेशन के साथ पुन:प्रारंभ करेंगे
> db.shutDownServer()
प्रमाणीकरण सेट करना
यहां, हम डेटाबेस प्रमाणीकरण को सक्षम करेंगे और हमारे सर्वर के सार्वजनिक डोमेन में पहुंच योग्य होने के लिए बाइंड-एड्रेस को संशोधित करेंगे। /etc/mongod.conf
खोलें। और नीचे दिए गए परिवर्तन करें।
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # accessible on the network address
security:
authorization: enabled # creds will be required for making db operations
कॉन्फ़िगरेशन सहेजें और पुनरारंभ करें सर्वर।
$ sudo -u mongod mongod -f /etc/mongod.conf
परीक्षण लॉगिन
आप सत्यापित कर सकते हैं कि क्रेडेंशियल का उपयोग करके काम करते हैं,
$ mongo -u admin -p password
यह प्रारंभिक सेटअप के बारे में है! कृपया मेरी अगली संबंधित पोस्ट के लिए विस्तृत माइग्रेशन प्रक्रिया और डीबी उत्पादन-तैयार रखने के सुझावों के लिए बने रहें।
पी.एस. इस पोस्ट को क्यूरेट करने में मदद करने के लिए पीयूष कुमार को धन्यवाद!