PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

एक डॉकटर कंटेनर के अंदर चल रहे PostgreSQL की निगरानी कैसे करें:भाग एक

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

डॉकर एक प्रोग्राम है जिसे एक बिल्डर के रूप में संचालित करने के लिए बनाया गया है जो इस सवाल का जवाब देने के लिए तैयार है कि "क्या सॉफ्टवेयर मेरी मशीन पर चलेगा?" यह मूल रूप से विभिन्न भागों को एक साथ इकट्ठा करता है जिससे स्टोर और परिवहन में आसान मॉडल बनता है। मॉडल, जिसे कंटेनर के रूप में भी जाना जाता है, को किसी भी ऐसे कंप्यूटर पर भेजा जा सकता है जिसमें डॉकर स्थापित है।

इस लेख में हम डॉकर से परिचित होंगे, कॉन्फ़िगरेशन के कुछ तरीकों का वर्णन करेंगे और उनकी तुलना करेंगे। इसके अलावा PostgreSQL खेलने के लिए आता है, और हम इसे एक डॉकर कंटेनर के अंदर एक स्मार्ट तरीके से तैनात करेंगे, और अंत में, हम उन लाभों को देखेंगे जो ClusterControl प्रदान कर सकते हैं, PostgreSQL और इसके बाहर के OS के बारे में प्रमुख मीट्रिक की निगरानी के लिए।

डॉकर अवलोकन

जब डॉकर शुरू होता है, तो यह दो समापन बिंदुओं के बीच डेटा के संचरण की अनुमति देने के लिए एक नया नेटवर्क कनेक्शन बनाता है, जिसे ब्रिज कहा जाता है, और यह वह जगह है जहां नए कंटेनर डिफ़ॉल्ट रूप से रखे जाते हैं।

निम्नलिखित में, हम इस पुल के बारे में विवरण देखेंगे, और चर्चा करेंगे कि उत्पादन में इसका उपयोग करना अच्छा विचार क्यों नहीं है।

$ docker network inspect bridge
डॉकर डिफॉल्ट ब्रिज docker0 का निरीक्षण करना।

कृपया एम्बेड किए गए विकल्पों पर ध्यान दें, क्योंकि यदि आप वांछित नेटवर्क निर्दिष्ट किए बिना कंटेनर चलाते हैं तो आप इससे सहमत होंगे।

इस डिफ़ॉल्ट नेटवर्क कनेक्शन पर, हम DNS जैसे नेटवर्किंग के कुछ अच्छे लाभ खो देते हैं। कल्पना कीजिए कि आप Google तक पहुंचना चाहते हैं, आप कौन सा पता पसंद करते हैं, www.google.com, या 172.217.165.4?

मैं आपके बारे में नहीं जानता, लेकिन मैं पहले वाले विकल्प को पसंद करता हूं, और ईमानदारी से कहूं तो मैं 'www.' टाइप नहीं करता।

उपयोगकर्ता-निर्धारित ब्रिज नेटवर्क

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

जब हम एक डॉकर कंटेनर बनाते हैं, तो हम उसमें एक नाम दे सकते हैं, या डॉकर हमारे लिए अंडरलाइन, या '_' से जुड़े दो शब्दों को यादृच्छिक बना देता है।

यदि हम उपयोगकर्ता-परिभाषित ब्रिज नेटवर्क का उपयोग नहीं करते हैं, तो भविष्य में आईपी पते के बीच में एक समस्या हो सकती है, क्योंकि हम स्पष्ट रूप से मशीन नहीं हैं, और याद रखें कि ये मान कठिन और त्रुटि-प्रवण हो सकते हैं।

एक कस्टम ब्रिज, या उपयोगकर्ता-परिभाषित ब्रिज नेटवर्क बनाना बहुत आसान है।

अपना पहला बनाने से पहले, प्रक्रिया को बेहतर ढंग से समझने के लिए, आइए एक नया टर्मिनल खोलें, पैकेज iproute2 का एक Linux कमांड टाइप करें और अब तक इसे भूल जाएं।

$ ip monitor all
डॉकर होस्ट में नेटवर्क ट्रैफिक की निगरानी के लिए एक टर्मिनल को इनिशियलाइज़ करना।

यह टर्मिनल अब नेटवर्क गतिविधि को सुनेगा और वहां प्रदर्शित करेगा।

आपने पहले "ifconfig", या "netstat" जैसे कमांड देखे होंगे, और मैं आपको बताता हूं कि 2001 से उन्हें हटा दिया गया है। पैकेज नेट-टूल्स अभी भी व्यापक रूप से उपयोग किया जाता है, लेकिन अब अपडेट नहीं किया गया है।

अब हमारा पहला कस्टम नेटवर्क बनाने का समय आ गया है, इसलिए दूसरा टर्मिनल खोलें और दर्ज करें:

$ docker network create --driver bridge br-db
उपयोगकर्ता-परिभाषित ब्रिज नेटवर्क "br-db" बनाना।

अक्षरों और संख्याओं के इस बहुत लंबे मिश्रण को UUID, या यूनिवर्सली यूनिक आइडेंटिफ़ायर कहा जाता है। यह मूल रूप से कह रहा है कि नेटवर्क सफलतापूर्वक बनाया गया है।

मैन्युअल रूप से बनाए गए हमारे पहले नेटवर्क के लिए दिया गया नाम "बीआर-डीबी" है, और इसे कमांड के फाइनल में होना चाहिए, लेकिन इससे पहले, हमारे पास तर्क ""-ड्राइवर" है, और फिर मान "ब्रिज" है। , क्यों?

सामुदायिक संस्करण में, डॉकर तीन अलग-अलग ड्राइवर उपलब्ध कराता है:ब्रिज, होस्ट और कोई नहीं। निर्माण के समय, इस तरह, डिफ़ॉल्ट ब्रिज है और इसे निर्दिष्ट करने की आवश्यकता नहीं है, लेकिन हम इसके बारे में सीख रहे हैं।

अगर आपने मेरे साथ सब कुछ किया है, तो दूसरे टर्मिनल को देखें क्योंकि मैं समझाऊंगा कि आपके साथ क्या हो रहा है।

डॉकर ने "br-db" नामक नेटवर्क बनाया है, लेकिन यह केवल उसके द्वारा ऐसा ही कहा जाता है।

बनाए गए इस कस्टम ब्रिज के दूसरी तरफ, एक और परत है, OS. उसी ब्रिज नेटवर्क के लिए दिया गया नाम बदल गया है, और ब्रिज के नामकरण का प्रतिनिधित्व बन गया है, "br", उसके बाद ऊपर UUID मान के पहले 12 वर्ण, लाल रंग में।

डॉकर आईपी पते में परिवर्तन की निगरानी करना।

हमारे नए नेटवर्क कनेक्शन के साथ, हमारे पास एक सबनेट, गेटवे और प्रसारण है।

गेटवे, जैसा कि नाम से पता चलता है, वह जगह है जहाँ पैकेट का सारा ट्रैफ़िक ब्रिज एंडपॉइंट के बीच होता है, और इसे OS के लिए "इनेट" कहा जाता है जैसा कि आप देख सकते हैं।

प्रसारण अंतिम आईपी पते में होता है, और जब आवश्यक हो तो सबनेट में सभी आईपी पते के लिए डेटा का समान ट्रैफ़िक भेजने के लिए ज़िम्मेदार होता है।

वे हमेशा नेटवर्क कनेक्शन में मौजूद होते हैं, और यही कारण है कि हमारे पास आउटपुट की शुरुआत में "[ADDR]" मान होता है। यह मान आईपी पते में बदलाव का प्रतिनिधित्व करता है, और यह नेटवर्क गतिविधि निगरानी के लिए एक घटना की तरह है, क्योंकि हमने एक नया नेटवर्क कनेक्शन बनाया है!

डॉकर कंटेनर

कृपया डॉकर हब पर जाएं, और देखें कि वहां जो है उसे डॉकर इमेज के रूप में जाना जाता है, और यह मूल रूप से कंटेनर (मॉडल) का कंकाल है।

Docker Images Dockerfiles द्वारा उत्पन्न की जाती हैं, और उनमें कंटेनर बनाने के लिए आवश्यक सभी जानकारी होती है, ताकि इसे बनाए रखना और अनुकूलित करना आसान हो सके।

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

आइए अब अपना पहला दायां कंटेनर बनाएं, '--network' तर्क की आवश्यकता याद रखें, या इसे डिफ़ॉल्ट ब्रिज में तैनात किया जाएगा।

$ docker container run --name postgres-1 --network br-db -e POSTGRES_PASSWORD=5af45Q4ae3Xa3Ff4 -p 6551:5432 -d postgres
"br-db" नेटवर्क में PostgreSQL कंटेनर चलाना।

फिर से UUID, सफलता, और दूसरे टर्मिनल में, क्या हो रहा है?

नेटवर्क इंटरफ़ेस परिवर्तन अभी होने वाली घटना है, या बस "[लिंक]" है। "वीथ" के बाद आप कुछ भी भूल सकते हैं, मुझ पर विश्वास करें, कंटेनर के पुनरारंभ होने या कुछ ऐसा ही होने पर मूल्य हमेशा बदल जाता है।

डॉकर नेटवर्क इंटरफ़ेस परिवर्तनों की निगरानी करना।

दूसरा विकल्प “-ई POSTGRES_PASSWORD=?” पर्यावरण के लिए खड़ा है, और यह केवल PostgreSQL कंटेनर चलाते समय उपलब्ध है, यह डेटाबेस में सुपर उपयोगकर्ता खाते के लिए पासवर्ड को कॉन्फ़िगर कर रहा है, जिसे पोस्टग्रेज कहा जाता है।

Publish "-p 6551:5432" पैरामीटर का लंबा नाम है, और यह मूल रूप से OS पोर्ट 6551 को कंटेनर के पोर्ट 5432 के लिए द्वि-दिशात्मक बना रहा है।

अंतिम लेकिन कम महत्वपूर्ण नहीं, डिटैच विकल्प, "-d" है, और यह जो करता है वह कंटेनर को इस टर्मिनल से स्वतंत्र रूप से चलाता है।

डॉकर छवि का नाम अंत में होना चाहिए, नेटवर्क निर्माण के समान पैटर्न का पालन करते हुए, बाईं ओर सभी तर्क और विकल्प होने चाहिए, और अंत में सबसे महत्वपूर्ण बात, इस मामले में, छवि का नाम।

याद रखें कि कंटेनर नेटवर्क सबनेट में रखे जाते हैं, उनमें से प्रत्येक के लिए अनुमत आईपी पते पर खड़े होते हैं, और वे कभी भी पहले या अंतिम पते पर नहीं होंगे, क्योंकि गेटवे और प्रसारण हमेशा रहेगा।

हमने बनाए गए पुल का विवरण दिखाया है, और अब उनके द्वारा रखे गए इन विवरणों में से प्रत्येक समापन बिंदु द्वारा प्रदर्शित किया जाएगा।

$ docker network inspect br-db
डॉकर यूजर-डिफाइंड नेटवर्क इंटरफेस "br-db" का निरीक्षण करना।
$ brctl show
डॉकर होस्ट द्वारा उपयोगकर्ता-परिभाषित ब्रिज नेटवर्क के बारे में जानकारी प्रदर्शित करना।

जैसा कि आप देख सकते हैं, नेटवर्क और कंटेनर के नाम भिन्न होते हैं, दूसरे को OS द्वारा एक इंटरफ़ेस के रूप में पहचाना जाता है, जिसे "veth768ff71" कहा जाता है, और मूल नाम हमारे द्वारा Docker के लिए "postgres-1" दिया गया है।

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

Linux कमांड "brctl show" पैकेज ब्रिज-बर्तन का हिस्सा है, और जैसा कि नाम से पता चलता है, इसका उद्देश्य Linux ईथरनेट ब्रिज को कॉन्फ़िगर और प्रबंधित करने के लिए उपकरणों का एक सेट प्रदान करना है।

एक और कस्टम ब्रिज नेटवर्क

हम जल्द ही डीएनएस के बारे में चर्चा करेंगे, लेकिन भविष्य में हमारे लिए चीजों को सरल बनाना बहुत अच्छा रहा है। महान विन्यास भविष्य में DBA के जीवन को आसान बनाते हैं।

नेटवर्क के साथ समान है, इसलिए हम यह बदल सकते हैं कि ओएस कैसे सबनेट पते और नेटवर्क नाम को पहचानता है और निर्माण के समय और अधिक तर्क जोड़ता है।

$ docker network create --driver bridge --subnet 172.23.0.0/16 -o “com.docker.network.bridge.name”=”bridge-host” bridge-docker
कस्टम विकल्पों के साथ एक उपयोगकर्ता-परिभाषित ब्रिज नेटवर्क इंटरफ़ेस बनाना।
$ ip route show
डॉकर रूटिंग टेबल प्रदर्शित करना।

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

वांछित सबनेट पता एक तर्क के रूप में निर्दिष्ट किया गया है, और कंटेनर निर्माण के लिए पर्यावरण विकल्प के समान, नेटवर्क के लिए हमारे पास "-o" है जिसके बाद कुंजी और मूल्य की जोड़ी है। इस मामले में, हम डॉकर को ओएस को बताने के लिए कह रहे हैं कि वह नेटवर्क को "ब्रिज-होस्ट" के रूप में बुलाए।

उन तीन नेटवर्क के अस्तित्व को डॉकर में भी सत्यापित किया जा सकता है, बस दर्ज करें:

$ docker network ls
डॉकर इंजन पर नेटवर्क इंटरफेस प्रदर्शित करना।

अब हमने पहले चर्चा की है कि कंटेनरों के लिए इन "वीथ" के मूल्य मायने नहीं रखते हैं, और मैं आपको अभ्यास में दिखाऊंगा।

अभ्यास में वर्तमान मूल्य को सत्यापित करना शामिल है, फिर कंटेनर को पुनरारंभ करें, फिर फिर से सत्यापित करें। ऐसा करने के लिए हमें पहले इस्तेमाल किए गए लिनक्स कमांड और डॉकर वाले के मिश्रण की आवश्यकता होगी, जो यहां नए हैं लेकिन बहुत सरल हैं:

$ brctl show
$ docker container stop postgres-1
$ docker container start postgres-1
$ brctl show
जांच करना कि कैसे "iptables" डॉकर होस्ट के लिए कंटेनर नामों को अस्थिर बनाता है।

जब कंटेनर बंद हो जाता है, तो यदि आवश्यक हो तो एक नया आईपी पता प्राप्त करने के लिए आईपी पता मुक्त होना चाहिए, और यह इस बात की याद दिलाता है कि DNS कैसे महत्वपूर्ण हो सकता है।

हर बार जब कोई कंटेनर किसी IP पते पर खड़ा होता है तो OS इंटरफेस के लिए ये नाम देता है, और वे पैकेज iptables का उपयोग करके उत्पन्न होते हैं, जिन्हें जल्द ही nftables नामक नए ढांचे से बदल दिया जाएगा।

इन नियमों को बदलने की अनुशंसा नहीं की जाती है, लेकिन यदि आवश्यक हो, तो उनके विज़ुअलाइज़ेशन में सहायता के लिए उपलब्ध टूल मौजूद हैं, जैसे dockerveth।

कंटेनर पुनरारंभ नीति

जब हम डॉकर प्रोग्राम, या यहां तक ​​कि कंप्यूटर को पुनरारंभ करते हैं, तो उसके द्वारा बनाए गए नेटवर्क ओएस में रखे जाते हैं, लेकिन खाली होते हैं।

कंटेनरों में वह है जिसे कंटेनर पुनरारंभ नीति कहा जाता है, और यह निर्माण के समय निर्दिष्ट एक और बहुत महत्वपूर्ण तर्क है। PostgreSQL, एक उत्पादन डेटाबेस के रूप में, उसकी उपलब्धता महत्वपूर्ण है, और इस तरह डॉकर इसमें मदद कर सकता है।

$ docker container run --name postgres-2 --network bridge-docker --restart always -e POSTGRES_PASSWORD=5af45Q4ae3Xa3Ff4 -p 6552:5432 -d postgres
निर्माण के समय कंटेनर पुनरारंभ नीति निर्दिष्ट करना।

जब तक आप इसे मैन्युअल रूप से बंद नहीं करते, यह कंटेनर "पोस्टग्रेज-2" हमेशा उपलब्ध रहेगा।

इसे बेहतर ढंग से समझने के लिए, चल रहे कंटेनरों को प्रदर्शित किया जाएगा और डॉकर प्रोग्राम को फिर से शुरू किया जाएगा, फिर पहला कदम फिर से:

$ docker container ls
$ systemctl restart docker
$ docker container ls
"postgres-2" में कंटेनर पुनरारंभ नीति की जाँच करना।

केवल कंटेनर "पोस्टग्रेस -2" चल रहा है, दूसरा "पोस्टग्रेस -1" कंटेनर अकेले शुरू नहीं होता है। इसके बारे में अधिक जानकारी Docker Documentation में देखी जा सकती है।

डोमेन नाम सिस्टम (DNS)

उपयोगकर्ता-परिभाषित ब्रिज नेटवर्क का एक लाभ संगठन है, निश्चित रूप से, क्योंकि हम जितने चाहें उतने नए कंटेनर बना सकते हैं और पुराने को भी कनेक्ट कर सकते हैं, लेकिन एक और लाभ जो हमें डॉकर डिफ़ॉल्ट ब्रिज का उपयोग नहीं करना है, वह है डीएनएस।

जब कंटेनरों को एक दूसरे के साथ संवाद करने की आवश्यकता होती है, तो आईपी पते को याद रखने के लिए डीबीए के लिए दर्दनाक हो सकता है, और हमने पहले www.google.com और 172.217.165.4 का उदाहरण दिखाते हुए इसकी चर्चा की है। DNS इस समस्या को सहज रूप से हल करता है, जिससे हमारे द्वारा निर्माण के समय दिए गए उनके नामों का उपयोग करके कंटेनरों के साथ बातचीत करना संभव हो जाता है, जैसे कि "पोस्टग्रेज-2", आईपी पते "172.23.0.2" के बजाय।

आइए देखें कि यह कैसे काम करता है। हम "पोस्टग्रेज -3" नामक उसी नेटवर्क में केवल प्रदर्शन उद्देश्यों के लिए एक और कंटेनर बनाएंगे, फिर, हम डेटा के पैकेट को कंटेनर "पोस्टग्रेज -2" में प्रसारित करने के लिए पैकेज के नाम का उपयोग करके पैकेज iputils-ping स्थापित करेंगे। ।

$ docker container run --name postgres-3 --network bridge-docker --restart always -e POSTGRES_PASSWORD=5af45Q4ae3Xa3Ff4 -p 6553:5432 -d postgres
$ docker container exec -it postgres-3 bash

बेहतर समझ के लिए आइए इसे भागों में विभाजित करें, निम्नलिखित आउटपुट में, नीला तीर इंगित करेगा कि कब कमांड एक कंटेनर के अंदर और लाल रंग में OS में निष्पादित किया जाता है।

यूज़र-डिफ़ाइंड ब्रिज नेटवर्क इंटरफ़ेस द्वारा प्रदान किए गए DNS का परीक्षण करने के लिए एक अस्थायी कंटेनर चलाना।
$ apt-get update && apt-get install -y iputils-ping
DNS के परीक्षण के लिए पैकेज "iputils-ping" स्थापित करना।
$ ping postgres-2
DNS को सफलतापूर्वक काम करते हुए दिखा रहा है।

सारांश

PostgreSQL Docker के अंदर चल रहा है, और उसकी उपलब्धता की गारंटी अब तक है। जब उपयोगकर्ता-परिभाषित ब्रिज नेटवर्क के अंदर उपयोग किया जाता है, तो कंटेनर को DNS, कस्टम सबनेट पते और नेटवर्क के लिए OS नाम जैसे कई लाभों के साथ आसानी से प्रबंधित किया जा सकता है।

हमने डॉकर के बारे में विवरण, और ओएस पर अद्यतन पैकेज और ढांचे के बारे में जागरूक होने के महत्व को देखा है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाडम्प लोड करते समय Django प्रोजेक्ट को sqlite3 बैकएंड से postgresql में स्विच करना विफल हो जाता है

  2. PostgresSQL स्थापना विफल:डेटाबेस क्लस्टर आरंभीकरण विफल MAC os

  3. कैसे make_interval () PostgreSQL में काम करता है

  4. जांचें कि क्या उपयोगकर्ता द्वारा परिभाषित प्रकार PostgreSQL में पहले से मौजूद है

  5. PostgreSQL में अधिकतम कनेक्शन कैसे बढ़ाएं