एप्लिकेशन के सफल विकास के बाद और MongoDB के उत्पादन के लिए खुद को समर्पित करने से पहले, एक सहज और कुशल प्रवाह सुनिश्चित करने के साथ-साथ इष्टतम प्रदर्शन प्राप्त करने के लिए इन त्वरित दिशानिर्देशों पर विचार करें।
1) परिनियोजन विकल्प
सही हार्डवेयर का चयन
इष्टतम प्रदर्शन के लिए, एचडीडी के बजाय एसएसडी का उपयोग करना बेहतर है। यह ध्यान रखना आवश्यक है कि आपका भंडारण स्थानीय है या दूरस्थ और उसके अनुसार उपाय करें। हार्डवेयर दोषों और पुनर्प्राप्ति योजना की सुरक्षा के लिए RAID का उपयोग करना बेहतर है, लेकिन इस पर पूरी तरह से भरोसा न करें, क्योंकि यह प्रतिकूल विफलताओं के खिलाफ कोई सुरक्षा प्रदान नहीं करता है। डिस्क पर निष्पादन के लिए, RAID-10 प्रदर्शन और उपलब्धता के मामले में एक अच्छा फिट है जो अक्सर अन्य RAID स्तरों में नहीं होता है। अनुकूलित प्रदर्शन के लिए और किसी भी बड़ी पराजय से बचने के लिए सही हार्डवेयर आपके एप्लिकेशन के लिए बिल्डिंग ब्लॉक है।
क्लाउड होस्टिंग
क्लाउड विक्रेताओं की एक श्रृंखला उपलब्ध है जो पहले से स्थापित MongoDB डेटाबेस होस्ट प्रदान करती है। सर्वोत्तम विकल्प का चयन आपके आवेदन के बढ़ने और लक्षित बाजार पर पहली छाप छोड़ने के लिए संस्थापक कदम है। MongoDB एटलस संभावित विकल्पों में से एक है जो क्लाउड इंटरफ़ेस के लिए एक संपूर्ण समाधान प्रदान करता है जिसमें आपके नोड्स की तैनाती और Amazon S3 में संग्रहीत आपके डेटा का एक स्नैपशॉट जैसी सुविधाएँ हैं। आसान परिनियोजन और स्केलिंग के लिए ClusterControl एक और अच्छा उपलब्ध विकल्प है। जो कई प्रकार की सुविधाएँ प्रदान करता है जैसे नोड्स को आसानी से जोड़ना और हटाना, इंस्टेंस का आकार बदलना और आपके उत्पादन क्लस्टर की क्लोनिंग। आप यहां बिना किसी शुल्क के ClusterControl आज़मा सकते हैं। अन्य उपलब्ध विकल्प रैकस्पेस ऑब्जेक्ट रॉकेट और मोंगोस्टिच हैं।
2) रैम
बार-बार एक्सेस की जाने वाली वस्तुओं को RAM में कैश किया जाता है, ताकि MongoDB इष्टतम प्रतिक्रिया समय प्रदान कर सके। RAM आमतौर पर आपके द्वारा संग्रहीत किए जाने वाले डेटा की मात्रा, संग्रह की संख्या और अनुक्रमणिका पर निर्भर करती है। सुनिश्चित करें कि आपके पास अपने इंडेक्स को समायोजित करने के लिए पर्याप्त रैम है अन्यथा यह उत्पादन पर आपके एप्लिकेशन प्रदर्शन को काफी प्रभावित करेगा। अधिक RAM का अर्थ है कम पृष्ठ दोष और बेहतर प्रतिक्रिया समय।
3) अनुक्रमण
उन अनुप्रयोगों के लिए जिनमें पुराने लेखन अनुरोध शामिल हैं, अनुक्रमण एक अनिवार्य भूमिका निभाता है। MongoDB डॉक्स के अनुसार:
"यदि कोई लेखन कार्य किसी अनुक्रमित फ़ील्ड को संशोधित करता है, तो MongoDB उन सभी अनुक्रमणिकाओं को अद्यतन करता है जिनमें एक कुंजी के रूप में संशोधित फ़ील्ड है"
इसलिए, अनुक्रमणिका चुनते समय सावधान रहें क्योंकि यह आपके DB प्रदर्शन को प्रभावित कर सकता है।
इंडेक्सिंग उदाहरण:रेस्टोरेंट डेटाबेस में नमूना प्रविष्टि
{
"address": {
"building": "701",
"street": "Harley street",
"zipcode": "71000"
},
"cuisine": "Bakery",
"grades": [
{ "date": { "$date": 1393804800000 }, "grade": "A", "score": 2 },
{ "date": { "$date": 1378857600000 }, "grade": "A", "score": 6 },
{ "date": { "$date": 1358985600000 }, "grade": "A", "score": 10 },
{ "date": { "$date": 1322006400000 }, "grade": "A", "score": 9 },
{ "date": { "$date": 1299715200000 }, "grade": "B", "score": 14 }
],
"name": "Bombay Bakery",
"restaurant_id": "187521"
}
-
सिंगल फील्ड पर इंडेक्स बनाना
> db.restaurants.createIndex( { "cuisine": 1 } ); { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
उपरोक्त उदाहरण में आरोही क्रम अनुक्रमणिका व्यंजन क्षेत्र पर बनाई गई है।
-
एकाधिक फ़ील्ड पर अनुक्रमणिका बनाना
> db.restaurants.createIndex( { "cuisine": 1 , "address.zipcode": -1 } ); { "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
यहां व्यंजन और ज़िप कोड फ़ील्ड पर कंपाउंड इंडेक्स बनाया गया है। -ve संख्या अवरोही क्रम को परिभाषित करती है।
4) साझा करने के लिए तैयार रहें
MongoDB शार्किंग नामक एक तंत्र का उपयोग करके डेटा को विभिन्न मशीनों में विभाजित करता है। जब तक आप भारी डेटासेट की उम्मीद नहीं कर रहे हैं, तब तक शुरुआत में शार्डिंग जोड़ने की सलाह नहीं दी जाती है। अपने एप्लिकेशन के प्रदर्शन को बनाए रखने के लिए याद रखें, आपको अपने डेटा पैटर्न के अनुसार एक अच्छी शार्डिंग कुंजी की आवश्यकता होती है क्योंकि यह सीधे आपके प्रतिक्रिया समय को प्रभावित करती है। शार्क के बीच डेटा का संतुलन स्वचालित है। हालांकि, तैयार रहना और उचित योजना बनाना बेहतर है। ताकि जब भी आपका आवेदन मांगे, आप समेकित कर सकें।
5) OS कॉन्फ़िगरेशन के लिए सर्वोत्तम अभ्यास
- XFS फाइल सिस्टम
- यह अत्यधिक स्केलेबल, उच्च प्रदर्शन 64-बिट जर्नलिंग फ़ाइल सिस्टम है। कम और बड़े I/O संचालन की अनुमति देकर I/O प्रदर्शन में सुधार करता है।
- फाइल डिस्क्रिप्टर लिमिट लगाएं।
- पारदर्शी विशाल पृष्ठों और गैर-समान एक्सेस मेमोरी (NUMA) को अक्षम करें।
- डिफ़ॉल्ट टीसीपी कीपलाइव समय को 300 सेकंड (लिनक्स के लिए) और 120 सेकंड (एज़्योर के लिए) में बदलें।
डिफ़ॉल्ट रख-रखाव समय बदलने के लिए इन आदेशों का प्रयास करें;
लिनक्स के लिए
sudo sysctl -w net.ipv4.tcp_keepalive_time=<value>
विंडोज़ के लिए
इस कमांड को कमांड प्रॉम्प्ट में एक प्रशासक के रूप में टाइप करें, जहां
reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ /t REG_DWORD /v KeepAliveTime /d <value>
6) प्रतिकृति का उपयोग करके उच्च उपलब्धता सुनिश्चित करना
प्रतिकृति के बिना उत्पादन पर जाने से आपका ऐप अचानक विफल हो सकता है। यदि नोड विफल हो जाता है तो प्रतिकृति समस्या का ख्याल रखती है। अपने आवेदन की जरूरतों के अनुसार अपने माध्यमिक MongoDB उदाहरणों के लिए पढ़ने, लिखने के संचालन को प्रबंधित करें।
नकल करते समय इन बातों का ध्यान रखें:
- उच्च उपलब्धता के लिए, अपने प्रतिकृति सेट को कम से कम तीन डेटा केंद्रों में परिनियोजित करें।
- सुनिश्चित करें कि MongoDB उदाहरणों में 0 या 1 वोट हैं।
- सभी MongoDB उदाहरणों के बीच पूर्ण द्वि-दिशात्मक नेटवर्क कनेक्टिविटी सुनिश्चित करें।
4 स्थानीय MongoDB इंस्टेंस के साथ प्रतिकृति सेट बनाने का उदाहरण:
-
4 स्थानीय MongoDB उदाहरण बनाना
सबसे पहले, डेटा निर्देशिकाएं बनाएं
mkdir -p /data/m0 mkdir -p /data/m1 mkdir -p /data/m2 mkdir -p /data/m3
-
4 स्थानीय उदाहरण प्रारंभ करें
mongod --replSet cluster1 --port 27017 --dbpath /data/m0 mongod --replSet cluster2 --port 27018 --dbpath /data/m1 mongod --replSet cluster1 --port 27019 --dbpath /data/m2 mongod --replSet cluster1 --port 27020 --dbpath /data/m3
-
उदाहरणों को क्लस्टर में जोड़ें और आरंभ करें
mongo myhost:34014 myConfig = {_id: ‘cluster1’, members: [ {_id: 0, host: ‘myhost1:27017’}, {_id: 1, host: ‘myhost2:27018’}, {_id: 2, host: ‘myhost3:27019’}, {_id: 3, host: ‘myhost4:27020’}] } rs.initiate(myConfig);
सुरक्षा उपाय
7) सुरक्षित मशीनें
MongoDB की मेजबानी करने वाली मशीनों पर खुले पोर्ट विभिन्न दुर्भावनापूर्ण हमलों की चपेट में हैं। उचित सुरक्षा कॉन्फ़िगरेशन में अंतराल के कारण रैंसमवेयर हमले में 30 हजार से अधिक MongoDB डेटाबेस से समझौता किया गया था। उत्पादन पर जाते समय अपने MongoDB सर्वर के सार्वजनिक पोर्ट बंद कर दें। हालाँकि, आपको SSh उद्देश्य के लिए एक पोर्ट खुला रखना चाहिए।
MongoDB उदाहरण पर प्रमाणीकरण सक्षम करना:
-
अपने पसंदीदा संपादक में mongod.conf फ़ाइल लॉन्च करें।
-
इन पंक्तियों को कॉन्फ़िग फ़ाइल के अंत में जोड़ें।
security: authorization: enabled
-
इन पंक्तियों को कॉन्फ़िग फ़ाइल के अंत में जोड़ें।
service mongod restart
-
स्थिति की पुष्टि करें
service mongod status
बाहरी पहुंच को प्रतिबंधित करना
अपने सर्वर तक सीमित आईपी एक्सेस करने के लिए mongod.conf फ़ाइल को फिर से खोलें।
bind_ip=127.0.0.1
इस लाइन को जोड़कर, इसका मतलब है कि आप केवल 127.0.0 के माध्यम से अपने सर्वर तक पहुंच सकते हैं। (जो लोकलहोस्ट है)। आप बाइंड विकल्प में कई IP भी जोड़ सकते हैं।
bind_ip=127.0.0.1,168.21.200.200
इसका मतलब है कि आप लोकलहोस्ट और अपने निजी नेटवर्क से एक्सेस कर सकते हैं।
8) पासवर्ड सुरक्षा
अपनी मशीनों में एक अतिरिक्त सुरक्षा परत जोड़ने के लिए अभिगम नियंत्रण सक्षम करें और प्रमाणीकरण लागू करें। इस तथ्य के बावजूद कि आपने बाहरी दुनिया से कनेक्शन स्वीकार करने के लिए MongoDB सर्वर को प्रतिबंधित कर दिया है, फिर भी आपके सर्वर में किसी भी दुर्भावनापूर्ण स्क्रिप्ट के आने की संभावना है। इसलिए, अपने डेटाबेस के लिए उपयोगकर्ता नाम/पासवर्ड सेट करने और आवश्यक अनुमतियां असाइन करने में संकोच न करें। सक्षम अभिगम नियंत्रण उपयोगकर्ताओं को केवल उनकी भूमिकाओं द्वारा निर्धारित कार्य करने की अनुमति देगा।
उपयोगकर्ता बनाने और विशिष्ट भूमिकाओं के साथ डेटाबेस एक्सेस असाइन करने के चरण यहां दिए गए हैं।
सबसे पहले हम सभी उपयोगकर्ताओं और डेटाबेस के प्रबंधन के लिए एक उपयोगकर्ता (इस मामले में, यह व्यवस्थापक है) बनाएंगे और फिर हम एक विशिष्ट डेटाबेस स्वामी बनाएंगे, जिसमें केवल एक MongoDB डेटाबेस इंस्टेंस पर विशेषाधिकार पढ़ने और लिखने होंगे।
डेटाबेस इंस्टेंस के लिए अन्य उपयोगकर्ताओं को प्रबंधित करने के लिए एक व्यवस्थापक उपयोगकर्ता बनाएं
-
अपना मोंगो खोल खोलें और व्यवस्थापक डेटाबेस पर स्विच करें:
use admin
-
व्यवस्थापक डेटाबेस के लिए एक उपयोगकर्ता बनाएँ
db.createUser({ user: "admin", pwd: "admin_password", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
-
नव निर्मित उपयोगकर्ता को प्रमाणित करें
db.auth("admin", "admin_password")
-
विशिष्ट उदाहरण उपयोगकर्ता बनाना:
use database_1 db.createUser({ user: "user_1", pwd: "your_password", roles: [{ role: "dbOwner", db: "database_1" }] })
-
अब सत्यापित करें कि उपयोगकर्ता सफलतापूर्वक बनाया गया है या नहीं।
db.auth("user_1", "your_password") show collections
इतना ही! आपने अपने डेटाबेस इंस्टेंस को उचित प्रमाणीकरण के साथ सफलतापूर्वक सुरक्षित कर लिया है। आप एक ही प्रक्रिया का पालन करते हुए जितने चाहें उतने उपयोगकर्ता जोड़ सकते हैं।
9) डेटा का एन्क्रिप्शन और सुरक्षा
यदि आप Wiredtiger को स्टोरेज इंजन के रूप में उपयोग कर रहे हैं तो आप अपने डेटा को एन्क्रिप्ट करने के लिए बाकी कॉन्फ़िगरेशन पर इसके एन्क्रिप्शन का उपयोग कर सकते हैं। यदि नहीं, तो फ़ाइल सिस्टम, डिवाइस या भौतिक एन्क्रिप्शन का उपयोग करके होस्ट पर एन्क्रिप्शन किया जाना चाहिए।
10) अपने परिनियोजन की निगरानी करें
एक बार जब आप उत्पादन में MongoDB की तैनाती समाप्त कर लेते हैं, तो आपको जल्द से जल्द संभावित समस्याओं को रोकने के लिए प्रदर्शन गतिविधि को ट्रैक करना होगा। उत्पादन परिवेश में अपने डेटा प्रदर्शन पर नज़र रखने के लिए आप कई प्रकार की रणनीतियाँ अपना सकते हैं।
-
MongoDB में उपयोगिताएँ शामिल हैं, जो उदाहरण के प्रदर्शन और गतिविधि के बारे में आँकड़े लौटाती हैं। यूटिलिटीज का उपयोग मुद्दों को इंगित करने और सामान्य संचालन का विश्लेषण करने के लिए किया जाता है।
-
संचालन प्रकार और क्षमता नियोजन की व्यवस्था को पकड़ने के लिए mongostat का उपयोग करें।
-
रिपोर्ट पर नज़र रखने और पढ़ने-लिखने की गतिविधियों के लिए, मोंगोटॉप की सिफारिश की जाती है।
mongotop 15
यह कमांड हर 15 सेकंड के बाद आउटपुट लौटाएगा।
ns total read write 2018-04-22T15:32:01-05:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.me 0ms 0ms 0ms
local.oplog.rs 0ms 0ms 0ms
local.replset.minvalid 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.indexes 0ms 0ms 0ms
local.system.namespaces 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
ns total read write 2018-04-22T15:32:16-05:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.me 0ms 0ms 0ms
local.oplog.rs 0ms 0ms 0ms
local.replset.minvalid 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.indexes 0ms 0ms 0ms
local.system.namespaces 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
MongoDB मॉनिटरिंग सर्विस (MMS) एक अन्य उपलब्ध विकल्प है जो आपके MongoDB क्लस्टर की निगरानी करता है और आपके लिए उत्पादन परिनियोजन गतिविधियों को देखना सुविधाजनक बनाता है।
और निश्चित रूप से ओपन सोर्स डेटाबेस के लिए ऑटोमेशन और प्रबंधन प्रणाली, कईनेन्स द्वारा क्लस्टर कंट्रोल है। ClusterControl स्वचालित सुरक्षा सेटिंग्स के साथ क्लस्टर की आसान तैनाती को सक्षम बनाता है और उपयोग में आसान प्रबंधन स्वचालन प्रदान करके आपके डेटाबेस का समस्या निवारण करना आसान बनाता है जिसमें टूटे हुए नोड्स की मरम्मत और पुनर्प्राप्ति, स्वचालित उन्नयन, और बहुत कुछ शामिल है। आप इसके (हमेशा के लिए मुक्त) सामुदायिक संस्करण के साथ शुरुआत कर सकते हैं, जिसके साथ आप MongoDB को तैनात और मॉनिटर कर सकते हैं और साथ ही कस्टम सलाहकार बना सकते हैं ताकि आपके निगरानी प्रयासों को उन पहलुओं के लिए ट्यून किया जा सके जो आपके सेटअप के लिए विशिष्ट हैं। इसे यहाँ मुफ़्त में डाउनलोड करें।