आजकल, किसी कंपनी के डेटाबेस में बड़ी मात्रा में डेटा देखना आम बात है, लेकिन आकार के आधार पर, इसे प्रबंधित करना कठिन हो सकता है और उच्च ट्रैफ़िक के दौरान प्रदर्शन प्रभावित हो सकता है यदि हम इसे सही तरीके से कॉन्फ़िगर या कार्यान्वित नहीं करते हैं . सामान्य तौर पर, यदि हमारे पास एक विशाल डेटाबेस है और हम कम प्रतिक्रिया समय चाहते हैं, तो हम इसे स्केल करना चाहेंगे। PostgreSQL इस बिंदु का अपवाद नहीं है। PostgreSQL को स्केल करने के लिए कई तरीके उपलब्ध हैं, लेकिन पहले, आइए जानें कि स्केलिंग क्या है।
स्केलेबिलिटी संसाधनों को जोड़कर बढ़ती मांगों को संभालने के लिए सिस्टम/डेटाबेस की संपत्ति है।
मांगों की इस राशि के कारण अस्थायी हो सकते हैं, उदाहरण के लिए, यदि हम ग्राहकों या कर्मचारियों की वृद्धि के लिए बिक्री पर छूट, या स्थायी, लॉन्च कर रहे हैं। किसी भी मामले में, हम मांग या ट्रैफ़िक में वृद्धि पर इन परिवर्तनों को प्रबंधित करने के लिए संसाधनों को जोड़ने या निकालने में सक्षम होना चाहिए।
इस ब्लॉग में, हम देखेंगे कि हम अपने पोस्टग्रेएसक्यूएल डेटाबेस को कैसे स्केल कर सकते हैं और जब हमें इसे करने की आवश्यकता होती है।
क्षैतिज स्केलिंग बनाम लंबवत स्केलिंग
हमारे डेटाबेस को स्केल करने के दो मुख्य तरीके हैं...
- क्षैतिज स्केलिंग (स्केल-आउट):यह डेटाबेस क्लस्टर बनाने या बढ़ाने के लिए और अधिक डेटाबेस नोड्स जोड़कर किया जाता है।
- वर्टिकल स्केलिंग (स्केल-अप):यह मौजूदा डेटाबेस नोड में अधिक हार्डवेयर संसाधन (सीपीयू, मेमोरी, डिस्क) जोड़कर किया जाता है।
क्षैतिज स्केलिंग के लिए, हम दास नोड्स के रूप में अधिक डेटाबेस नोड्स जोड़ सकते हैं। यह नोड्स के बीच यातायात को संतुलित करने वाले पठन प्रदर्शन को बेहतर बनाने में हमारी मदद कर सकता है। इस मामले में, हमें नीति और नोड स्थिति के आधार पर ट्रैफ़िक को सही नोड पर वितरित करने के लिए एक लोड बैलेंसर जोड़ना होगा।
केवल एक लोड बैलेंसर जोड़ने में विफलता के एकल बिंदु से बचने के लिए, हमें उपलब्धता सुनिश्चित करने के लिए दो या अधिक लोड बैलेंसर नोड्स जोड़ने और "रख-रखाव" जैसे कुछ टूल का उपयोग करने पर विचार करना चाहिए।
चूंकि PostgreSQL के पास मूल मल्टी-मास्टर समर्थन नहीं है, अगर हम लेखन प्रदर्शन को बेहतर बनाने के लिए इसे लागू करना चाहते हैं तो हमें इस कार्य के लिए एक बाहरी टूल का उपयोग करने की आवश्यकता होगी।
वर्टिकल स्केलिंग के लिए, PostgreSQL को एक नए या बेहतर हार्डवेयर संसाधन का उपयोग करने की अनुमति देने के लिए कुछ कॉन्फ़िगरेशन पैरामीटर को बदलने की आवश्यकता हो सकती है। आइए PostgreSQL दस्तावेज़ीकरण से इनमें से कुछ पैरामीटर देखें।
- work_mem:अस्थायी डिस्क फ़ाइलों को लिखने से पहले आंतरिक सॉर्ट संचालन और हैश टेबल द्वारा उपयोग की जाने वाली मेमोरी की मात्रा को निर्दिष्ट करता है। कई रनिंग सेशन एक साथ ऐसे ऑपरेशन कर सकते हैं, इसलिए उपयोग की जाने वाली कुल मेमोरी वर्क_मेम के मान से कई गुना अधिक हो सकती है।
- maintenance_work_mem:रखरखाव कार्यों, जैसे VACUUM, CREATE INDEX, और ALTER TABLE ADD FOREIGN KEY द्वारा उपयोग की जाने वाली मेमोरी की अधिकतम मात्रा को निर्दिष्ट करता है। बड़ी सेटिंग्स वैक्यूमिंग और डेटाबेस डंप को पुनर्स्थापित करने के लिए प्रदर्शन में सुधार कर सकती हैं।
- autovacuum_work_mem:प्रत्येक autovacuum कार्यकर्ता प्रक्रिया द्वारा उपयोग की जाने वाली स्मृति की अधिकतम मात्रा निर्दिष्ट करता है।
- autovacuum_max_workers:किसी भी समय चलने वाली ऑटोवैक्यूम प्रक्रियाओं की अधिकतम संख्या निर्दिष्ट करता है।
- max_worker_processes:सिस्टम द्वारा समर्थित अधिकतम पृष्ठभूमि प्रक्रियाओं को सेट करता है। वैक्यूमिंग, चेकपॉइंट, और अधिक रखरखाव कार्य जैसी प्रक्रिया की सीमा निर्दिष्ट करें।
- max_parallel_workers:श्रमिकों की अधिकतम संख्या सेट करता है जो सिस्टम समानांतर संचालन के लिए समर्थन कर सकता है। समानांतर श्रमिकों को पिछले पैरामीटर द्वारा स्थापित कार्यकर्ता प्रक्रियाओं के पूल से लिया जाता है।
- max_parallel_maintenance_workers:समानांतर वर्कर्स की अधिकतम संख्या सेट करता है जिसे सिंगल यूटिलिटी कमांड द्वारा शुरू किया जा सकता है। वर्तमान में, समानांतर श्रमिकों के उपयोग का समर्थन करने वाला एकमात्र समानांतर उपयोगिता कमांड क्रिएट इंडेक्स है, और केवल बी-ट्री इंडेक्स बनाते समय।
- प्रभावी_कैश_साइज:एकल क्वेरी के लिए उपलब्ध डिस्क कैश के प्रभावी आकार के बारे में योजनाकार की धारणा को सेट करता है। यह एक सूचकांक का उपयोग करने की लागत के अनुमानों में शामिल है; एक उच्च मान इसे और अधिक संभावना बनाता है कि इंडेक्स स्कैन का उपयोग किया जाएगा, एक कम मान यह अधिक संभावना बनाता है कि अनुक्रमिक स्कैन का उपयोग किया जाएगा।
- shared_buffers:साझा मेमोरी बफ़र्स के लिए डेटाबेस सर्वर द्वारा उपयोग की जाने वाली मेमोरी की मात्रा को सेट करता है। आमतौर पर अच्छे प्रदर्शन के लिए न्यूनतम से काफी अधिक सेटिंग्स की आवश्यकता होती है।
- temp_buffers:प्रत्येक डेटाबेस सत्र द्वारा उपयोग किए जाने वाले अस्थायी बफ़र्स की अधिकतम संख्या सेट करता है। ये सत्र-स्थानीय बफ़र हैं जिनका उपयोग केवल अस्थायी तालिकाओं तक पहुँच के लिए किया जाता है।
- प्रभावी_io_concurrency:समवर्ती डिस्क I/O संचालन की संख्या सेट करता है जिसे PostgreSQL एक साथ निष्पादित करने की अपेक्षा करता है। इस मान को बढ़ाने से I/O संचालन की संख्या में वृद्धि होगी जिसे कोई भी व्यक्तिगत PostgreSQL सत्र समानांतर में आरंभ करने का प्रयास करता है। वर्तमान में, यह सेटिंग केवल बिटमैप हीप स्कैन को प्रभावित करती है।
- max_connections:डेटाबेस सर्वर से समवर्ती कनेक्शन की अधिकतम संख्या निर्धारित करता है। इस पैरामीटर को बढ़ाने से PostgreSQL एक साथ अधिक बैकएंड प्रक्रिया चला सकता है।
इस समय एक प्रश्न है जो हमें अवश्य पूछना चाहिए। हम कैसे जान सकते हैं कि हमें अपने डेटाबेस को स्केल करने की आवश्यकता है और हम इसे करने का सबसे अच्छा तरीका कैसे जान सकते हैं?
निगरानी
हमारे PostgreSQL डेटाबेस को स्केल करना एक जटिल प्रक्रिया है, इसलिए हमें इसे स्केल करने के लिए सबसे अच्छी रणनीति निर्धारित करने में सक्षम होने के लिए कुछ मेट्रिक्स की जांच करनी चाहिए।
हम यह निर्धारित करने के लिए सीपीयू, मेमोरी और डिस्क उपयोग की निगरानी कर सकते हैं कि क्या कुछ कॉन्फ़िगरेशन समस्या है या यदि वास्तव में, हमें अपने डेटाबेस को स्केल करने की आवश्यकता है। उदाहरण के लिए, यदि हम एक उच्च सर्वर लोड देख रहे हैं लेकिन डेटाबेस गतिविधि कम है, तो शायद इसे स्केल करने की आवश्यकता नहीं है, हमें केवल अपने हार्डवेयर संसाधनों से मिलान करने के लिए कॉन्फ़िगरेशन पैरामीटर की जांच करने की आवश्यकता है।
प्रति डेटाबेस PostgreSQL नोड द्वारा उपयोग किए गए डिस्क स्थान की जाँच करने से हमें यह पुष्टि करने में मदद मिल सकती है कि क्या हमें अधिक डिस्क या तालिका विभाजन की आवश्यकता है। डेटाबेस/टेबल द्वारा उपयोग किए गए डिस्क स्थान की जांच करने के लिए हम कुछ PostgreSQL फ़ंक्शन जैसे pg_database_size या pg_table_size का उपयोग कर सकते हैं।
डेटाबेस की ओर से, हमें जांचना चाहिए
- कनेक्शन की राशि
- चल रही क्वेरी
- सूचकांक उपयोग
- ब्लोट
- प्रतिकृति अंतराल
यह पुष्टि करने के लिए स्पष्ट मेट्रिक्स हो सकते हैं कि हमारे डेटाबेस के स्केलिंग की आवश्यकता है या नहीं।
एक स्केलिंग और निगरानी प्रणाली के रूप में क्लस्टर नियंत्रण
ClusterControl हमें पहले देखे गए दोनों स्केलिंग तरीकों से निपटने और स्केलिंग आवश्यकता की पुष्टि करने के लिए सभी आवश्यक मेट्रिक्स की निगरानी करने में मदद कर सकता है। आइए देखें कैसे...
यदि आप अभी तक ClusterControl का उपयोग नहीं कर रहे हैं, तो आप इसे स्थापित कर सकते हैं और "आयात" विकल्प का चयन करके अपने वर्तमान PostgreSQL डेटाबेस को तैनात या आयात कर सकते हैं और सभी क्लस्टर नियंत्रण सुविधाओं जैसे बैकअप, स्वचालित विफलता, अलर्ट, निगरानी का लाभ उठाने के लिए चरणों का पालन कर सकते हैं। और भी बहुत कुछ।
क्षैतिज स्केलिंग
क्षैतिज स्केलिंग के लिए, यदि हम क्लस्टर क्रियाओं पर जाते हैं और "प्रतिकृति दास जोड़ें" का चयन करते हैं, तो हम या तो खरोंच से एक नई प्रतिकृति बना सकते हैं या एक मौजूदा PostgreSQL डेटाबेस को प्रतिकृति के रूप में जोड़ सकते हैं।
आइए देखें कि कैसे एक नया प्रतिकृति दास जोड़ना वास्तव में एक आसान काम हो सकता है।
जैसा कि आप छवि में देख सकते हैं, हमें केवल अपना मास्टर सर्वर चुनने की आवश्यकता है, हमारे नए दास सर्वर और डेटाबेस पोर्ट के लिए आईपी पता दर्ज करें। फिर, हम चुन सकते हैं कि क्या हम चाहते हैं कि ClusterControl हमारे लिए सॉफ़्टवेयर स्थापित करे और यदि प्रतिकृति स्लेव सिंक्रोनस या एसिंक्रोनस होना चाहिए।
इस तरह, हम जितनी चाहें उतनी प्रतिकृतियां जोड़ सकते हैं और लोड बैलेंसर का उपयोग करके उनके बीच पढ़ने वाले ट्रैफ़िक को फैला सकते हैं, जिसे हम ClusterControl के साथ भी लागू कर सकते हैं।
अब, यदि हम क्लस्टर क्रियाओं पर जाते हैं और "लोड बैलेंसर जोड़ें" का चयन करते हैं, तो हम एक नया HAProxy लोड बैलेंसर तैनात कर सकते हैं या एक मौजूदा जोड़ सकते हैं।
और फिर, उसी लोड बैलेंसर सेक्शन में, हम अपने उच्च उपलब्धता वातावरण को बेहतर बनाने के लिए लोड बैलेंसर नोड्स पर चलने वाली एक Keepalived सेवा जोड़ सकते हैं।
वर्टिकल स्केलिंग
वर्टिकल स्केलिंग के लिए, क्लस्टरकंट्रोल के साथ हम ऑपरेटिंग सिस्टम और डेटाबेस साइड दोनों से अपने डेटाबेस नोड्स की निगरानी कर सकते हैं। हम कुछ मेट्रिक्स जैसे CPU उपयोग, मेमोरी, कनेक्शन, शीर्ष क्वेरी, रनिंग क्वेरी, और भी बहुत कुछ देख सकते हैं। हम डैशबोर्ड अनुभाग को भी सक्षम कर सकते हैं, जो हमें मीट्रिक को अधिक विस्तृत और हमारे मीट्रिक को मित्रवत तरीके से देखने की अनुमति देता है।
ClusterControl से, आप एक क्लिक से विभिन्न प्रबंधन कार्य भी कर सकते हैं जैसे रीबूट होस्ट, प्रतिकृति स्लेव का पुनर्निर्माण या स्लेव को बढ़ावा देना।
निष्कर्ष
PostgreSQL डेटाबेस को स्केल करना एक समय लेने वाला कार्य हो सकता है। हमें यह जानने की जरूरत है कि हमें किस पैमाने की जरूरत है और इसे करने का सबसे अच्छा तरीका क्या है। अंततः, क्लस्टर का प्रबंधन और स्केलिंग मैन्युअल रूप से एक निश्चित बिंदु के बाद काफी बोझिल हो जाता है, इसलिए अधिकांश हमारे जैसे टूल की ओर रुख करते हैं।
यदि आप मैन्युअल मार्ग चुनते हैं, तो देखें कि कब अपने क्लस्टर में एक अतिरिक्त नोड जोड़ने पर विचार किया जाए। परेशानी से बचना चाहते हैं? यह देखने के लिए कि कैसे इसकी विशेषताएं बड़े पैमाने पर, ओपन-सोर्स को सरल और कुशल बनाती हैं, 30 दिनों के लिए ClusterControl का निःशुल्क मूल्यांकन करें।
हालाँकि आप अपने डेटाबेस को प्रबंधित और स्केल करना चाहते हैं, ट्विटर या लिंक्डइन पर हमें फॉलो करें, या ओपन-सोर्स आधारित डेटाबेस इन्फ्रास्ट्रक्चर का प्रबंधन करते समय नवीनतम समाचार और सर्वोत्तम अभ्यास प्राप्त करने के लिए हमारे न्यूज़लेटर की सदस्यता लें, और हम जल्द ही आपसे मिलेंगे!