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

MongoDB के लिए अपने Linux परिवेश को अनुकूलित करना

MongoDB का प्रदर्शन इस बात पर निर्भर करता है कि यह अंतर्निहित संसाधनों का उपयोग कैसे करता है। यह डिस्क के साथ-साथ मेमोरी में डेटा स्टोर करता है। यह संचालन करने के लिए सीपीयू संसाधनों का उपयोग करता है, और अपने ग्राहकों के साथ संवाद करने के लिए एक नेटवर्क का उपयोग करता है। इसकी सामान्य आजीविका का समर्थन करने के लिए पर्याप्त संसाधन होने चाहिए। इस लेख में हम MongoDB डेटाबेस सिस्टम के लिए विभिन्न संसाधन आवश्यकताओं पर चर्चा करने जा रहे हैं और हम उन्हें अधिकतम प्रदर्शन के लिए कैसे अनुकूलित कर सकते हैं।

MongoDB के लिए आवश्यकताएँ

डेटाबेस को रैम और सीपीयू जैसे बड़े पैमाने पर संसाधन उपलब्ध कराने के अलावा, ऑपरेटिंग सिस्टम को ट्यून करने से भी कुछ हद तक प्रदर्शन में सुधार हो सकता है। MongoDB वातावरण स्थापित करने के लिए आवश्यक महत्वपूर्ण उपयोगिताओं में शामिल हैं:

  1. पर्याप्त डिस्क स्थान
  2. पर्याप्त स्मृति
  3. उत्कृष्ट नेटवर्क कनेक्शन।

MongoDB के लिए सबसे आम ऑपरेटिंग सिस्टम Linux है, इसलिए हम देखेंगे कि इसे डेटाबेस के लिए कैसे अनुकूलित किया जाए।

रिबूट स्थिति।

कई ट्यूनिंग तकनीकें हैं जिन्हें लिनक्स पर लागू किया जा सकता है। हालांकि, चूंकि आपके होस्ट को रिबूट किए बिना कुछ बदलाव होते हैं, इसलिए यह सुनिश्चित करने के लिए कि वे लागू होते हैं, बदलाव करने के बाद रिबूट करना हमेशा एक अच्छा अभ्यास है। इस खंड में, हम जिन ट्यूनिंग कार्यान्वयनों पर चर्चा करने जा रहे हैं वे हैं:

  1. नेटवर्क स्टैक
  2. एनटीपी डेमॉन
  3. लिनक्स उपयोगकर्ता सीमा
  4. फाइल सिस्टम और विकल्प
  5. सुरक्षा
  6. वर्चुअल मेमोरी

नेटवर्क स्टैक

किसी भी अन्य सॉफ़्टवेयर की तरह, एक उत्कृष्ट नेटवर्क कनेक्शन सर्वर के साथ अनुरोधों और प्रतिक्रियाओं के लिए बेहतर विनिमय इंटरफ़ेस प्रदान करता है। हालाँकि, MongoDB Linux डिफ़ॉल्ट कर्नेल नेटवर्क ट्यूनिंग के पक्ष में नहीं है। जैसा कि नाम से पता चलता है, यह कई परतों की एक व्यवस्था है जिसे 3 मुख्य में वर्गीकृत किया जा सकता है:उपयोगकर्ता क्षेत्र, कर्नेल क्षेत्र और डिवाइस क्षेत्र। उपयोगकर्ता क्षेत्र और कर्नेल क्षेत्र को होस्ट के रूप में संदर्भित किया जाता है क्योंकि उनके कार्य सीपीयू द्वारा किए जाते हैं। डिवाइस क्षेत्र नेटवर्क इंटरफेस कार्ड नामक इंटरफेस के माध्यम से पैकेट भेजने और प्राप्त करने के लिए जिम्मेदार है। MongoDB वातावरण के साथ बेहतर प्रदर्शन के लिए, होस्ट को 1Gbps नेटवर्क इंटरफ़ेस सीमा तक सीमित रखा जाना चाहिए। इस मामले में, हमें जो ट्यून करना चाहिए वह अपेक्षाकृत थ्रूपुट सेटिंग्स है जिसमें शामिल हैं:

  1. net.core.somaxconn (मान बढ़ाएँ)
  2. net.ipv4.tcp_max_syn_backlog (मान बढ़ाएं)
  3. net.ipv4.tcp_fin_timeout (मान कम करें)
  4. net.ipv4.tcp_keepalive_intvl (मान कम करें)
  5. net.ipv4.tcp_keepalive_time (मान कम करें)

इन परिवर्तनों को स्थायी बनाने के लिए, एक नई फ़ाइल /etc/sysctl.d/mongodb-sysctl.conf बनाएं यदि यह मौजूद नहीं है और इन पंक्तियों को इसमें जोड़ें।

net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_max_syn_backlog = 4096

फिर परिवर्तन को स्थायी रूप से लागू करने के लिए रूट उपयोगकर्ता /sbin/sysctl -p के रूप में कमांड चलाएँ।

NTP डेमॉन

नेटवर्क टाइम प्रोटोकॉल (एनटीपी) एक ऐसी तकनीक है जिसके लिए लिनक्स सिस्टम की एक सॉफ्टवेयर घड़ी इंटरनेट टाइम सर्वर के साथ सिंक्रोनाइज़ की जाती है। MongoDB, एक क्लस्टर होने के नाते, नोड्स में समय की स्थिरता पर निर्भर है। इस कारण से, NTP को MongoDB होस्ट पर स्थायी रूप से चलाना महत्वपूर्ण है। एनटीपी कॉन्फ़िगरेशन का महत्व नेटवर्क डिस्कनेक्शन के बाद कुछ निर्धारित समय तक सर्वर की निरंतर सेवा सुनिश्चित करना है। डिफ़ॉल्ट रूप से, एनटीपी क्लाइंट साइड पर स्थापित होता है, इसलिए मोंगोडीबी के लिए डेबियन/उबंटू स्वाद के साथ लिनक्स सिस्टम पर एनटीपी स्थापित करने के लिए, बस कमांड चलाएं:

$ sudo apt-get install ntp

विभिन्न OS के लिए NTP डेमॉन के कॉन्फ़िगरेशन को देखने के लिए आप ntp.conf पर जा सकते हैं।

लिनक्स उपयोगकर्ता सीमा

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

हालांकि, इस सीमा की बाधाओं को अक्षम करना या उन्हें असीमित स्थिति में सेट करना सुविधाजनक नहीं होगा। उदाहरण के लिए, यदि आपके पास CPU संग्रहण या RAM की कमी है, तो एक छोटी सी गलती एक बड़ी समस्या में बदल सकती है और इसके परिणामस्वरूप अन्य सुविधाएँ विफल हो सकती हैं - जैसे, SSH जो प्रारंभिक समस्या को हल करने में महत्वपूर्ण है।

बेहतर अनुमान प्राप्त करने के लिए, आपको डेटाबेस स्तर पर बाधाओं की आवश्यकताओं को समझना चाहिए। उदाहरण के लिए, उन उपयोगकर्ताओं की संख्या का अनुमान लगाना जो डेटाबेस और प्रसंस्करण समय के लिए अनुरोध करेंगे। आप MongoDB के लिए मॉनिटर करने के लिए मुख्य चीज़ों का उल्लेख कर सकते हैं। अधिकतम-उपयोगकर्ता-प्रक्रियाओं और खुली-फ़ाइलों के लिए एक सबसे पसंदीदा सीमा 64000 है। इन मानों को सेट करने के लिए एक नई फ़ाइल बनाएं यदि यह मौजूद नहीं है /etc/security/limits.d और इन पंक्तियों को जोड़ें

mongod       soft        nofile       64000
mongod       hard        nofile       64000
mongod       soft        nproc        64000
mongod       hard        nproc        64000

आप इन परिवर्तनों को लागू करने के लिए, अपने mongod को पुनरारंभ करें क्योंकि परिवर्तन केवल नए गोले पर लागू होते हैं।

फाइल सिस्टम और विकल्प

MongoDB ऑन-डिस्क डेटाबेस डेटा के लिए 3 प्रकार के फाइल सिस्टम का उपयोग करता है, जो कि ext3, ext4, और XFS है। 3 से अधिक MongoDB संस्करण के लिए नियोजित WiredTiger स्टोरेज इंजन के लिए, XFS का उपयोग ext4 के बजाय सबसे अच्छा किया जाता है, जिसे कुछ स्थिरता के मुद्दों को बनाने के लिए माना जाता है, जबकि ext3 को इसके खराब पूर्व-आवंटन प्रदर्शन के कारण भी टाला जाता है। MongoDB अन्य सिस्टम की तरह एक्सेस-टाइम मेटाडेटा अपडेट करने की डिफ़ॉल्ट फाइल सिस्टम तकनीक का उपयोग नहीं करता है। इसलिए आप इन अद्यतनों द्वारा उपयोग की जाने वाली डिस्क IO गतिविधि की छोटी मात्रा को बचाने के लिए एक्सेस-टाइम अपडेट को अक्षम कर सकते हैं।

यह MongoDB डेटा परोसने वाली डिस्क के लिए फ़ाइल आदि/fstab में फ़ाइल सिस्टम विकल्प फ़ील्ड में फ़्लैग noatime जोड़कर किया जा सकता है।

$ grep "/var/lib/mongo" /proc/mounts
/dev/mapper/data-mongodb /var/lib/mongo ext4 rw, seclabel, noatime, data=ordered 0 0

यह परिवर्तन केवल तभी महसूस किया जा सकता है जब आप अपने MongoDB को रीबूट या पुनरारंभ करें।

सुरक्षा

लिनक्स सिस्टम की कई सुरक्षा विशेषताओं में, कर्नेल-स्तर पर सुरक्षा-संवर्धित लिनक्स है। यह बारीक अनिवार्य अभिगम नियंत्रण का कार्यान्वयन है। यह यह निर्धारित करने के लिए सुरक्षा नीति के लिए एक पुल प्रदान करता है कि क्या कोई ऑपरेशन आगे बढ़ना चाहिए। दुर्भाग्य से, कई लिनक्स उपयोगकर्ता इस एक्सेस कंट्रोल मॉड्यूल को केवल चेतावनी देने के लिए सेट करते हैं या वे इसे पूरी तरह से अक्षम कर देते हैं। यह अक्सर कुछ संबद्ध असफलताओं के कारण होता है जैसे अनपेक्षित अनुमति अस्वीकृत त्रुटि। यह मॉड्यूल, जितना अधिक लोग इसे अनदेखा करते हैं, सर्वर पर स्थानीय हमलों को कम करने में एक प्रमुख भूमिका निभाता है। इस सुविधा के सक्षम होने और संवाददाता मोड सकारात्मक पर सेट होने के साथ, यह आपके MongoDB के लिए एक सुरक्षित पृष्ठभूमि प्रदान करेगा। इसलिए, आपको SELinux मोड को सक्षम करना चाहिए और विशेष रूप से आपके इंस्टॉलेशन की शुरुआत में एनफोर्सिंग मोड को भी लागू करना चाहिए। SELinux मोड को Enforceing में बदलने के लिए:कमांड चलाएँ

$ sudo setenforce Enforcing

आप चल रहे SELinux मोड को चलाकर देख सकते हैं

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

वर्चुअल मेमोरी

गंदा अनुपात

MongoDB डेटा की त्वरित प्राप्ति को बढ़ाने के लिए कैशे तकनीक का उपयोग करता है। इस मामले में, गंदे पृष्ठ बनाए जाते हैं और उन्हें रखने के लिए कुछ मेमोरी की आवश्यकता होगी। इसलिए गंदा अनुपात कुल सिस्टम मेमोरी का प्रतिशत बन जाता है जिसमें गंदे पृष्ठ हो सकते हैं। ज्यादातर मामलों में, डिफ़ॉल्ट मान (25 - 35)% के बीच होते हैं। यदि यह मान पार हो जाता है, तो पृष्ठ डिस्क के लिए प्रतिबद्ध हैं और एक हार्ड पॉज़ बनाने का प्रभाव पड़ता है। इससे बचने के लिए, आप कर्नेल को हमेशा किसी अन्य अनुपात के माध्यम से डेटा फ्लश करने के लिए सेट कर सकते हैं जिसे डर्टी_बैकग्राउंड_रेशियो कहा जाता है, जिसका मान बिना हार्ड पॉज़ के बैकग्राउंड में डिस्क से (10% - 15%) के बीच होता है।

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

$ sysctl -a | egrep “vm.dirty.*_ratio”

और आपको कुछ इस तरह प्रस्तुत किया जाएगा।

vm.dirty_background_ratio = 10
vm.dirty_ratio = 20

स्वैपनेस

यह 1 से 100 तक का मान है जिसके लिए वर्चुअल मेमोरी प्रबंधक व्यवहार को प्रभावित किया जा सकता है। इसे 100 पर सेट करने का अर्थ है डिस्क पर जबरदस्ती स्वैप करना और इसे 0 पर सेट करना कर्नेल को केवल आउट-ऑफ-मेमोरी समस्याओं को दूर करने के लिए स्वैप करने का निर्देश देता है। Linux के लिए डिफ़ॉल्ट श्रेणी 50 - 60 है जिसमें से डेटाबेस सिस्टम के लिए उपयुक्त नहीं है। मेरे अपने परीक्षण में, 0 से 10 के बीच मान सेट करना इष्टतम है। आप इस मान को हमेशा /etc/sysctl.conf

. में सेट कर सकते हैं
vm.swappiness = 5

फिर आप कमांड चलाकर इस मान की जांच कर सकते हैं

$ sysctl vm.swappiness

इन परिवर्तनों को लागू करने के लिए /sbin/sysctl -p कमांड चलाएँ या आप अपने सिस्टम को रिबूट कर सकते हैं।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB में कस्टम ऑब्जेक्ट आईडी बनाना

  2. नेवला में अद्वितीय सूचकांक काम नहीं कर रहा

  3. MongoDB db.Collection.count ()

  4. मोंगोडीबी $घंटा

  5. नोड.जेएस से मोंगोडब से कनेक्ट करते समय ECONNREFUSED त्रुटि