आजकल, कंटेनरों का उपयोग करके एप्लिकेशन बनाने, तैनात करने और चलाने के लिए डॉकर सबसे आम उपकरण है। यह हमें एक एप्लिकेशन को सभी आवश्यक भागों के साथ पैकेज करने की अनुमति देता है, जैसे कि पुस्तकालय और अन्य निर्भरता, और इसे एक पैकेज के रूप में बाहर भेजना। इसे एक वर्चुअल मशीन के रूप में माना जा सकता है, लेकिन एक संपूर्ण वर्चुअल ऑपरेटिंग सिस्टम बनाने के बजाय, डॉकर अनुप्रयोगों को उसी लिनक्स कर्नेल का उपयोग करने की अनुमति देता है जिस पर वे चल रहे हैं और केवल उन चीजों के साथ अनुप्रयोगों को भेजने की आवश्यकता होती है जो पहले से नहीं चल रही हैं। मेजबान कंप्यूटर। यह एक महत्वपूर्ण प्रदर्शन को बढ़ावा देता है और एप्लिकेशन के आकार को कम करता है।
डॉकर छवियों के मामले में, वे एक पूर्वनिर्धारित ओएस संस्करण के साथ आते हैं और पैकेज इस तरह से स्थापित किए जाते हैं जो छवि बनाने वाले व्यक्ति द्वारा तय किए गए थे। यह संभव है कि आप एक अलग ओएस का उपयोग करना चाहते हैं या हो सकता है कि आप पैकेज को एक अलग तरीके से स्थापित करना चाहते हैं। इन मामलों के लिए, आपको एक स्वच्छ ओएस डॉकर छवि का उपयोग करना चाहिए और सॉफ़्टवेयर को खरोंच से स्थापित करना चाहिए।
डेटाबेस वातावरण में प्रतिकृति एक सामान्य विशेषता है, इसलिए TimescaleDB Docker Images को तैनात करने के बाद, यदि आप एक प्रतिकृति सेटअप को कॉन्फ़िगर करना चाहते हैं, तो आपको इसे Docker फ़ाइल या यहां तक कि एक स्क्रिप्ट का उपयोग करके कंटेनर से मैन्युअल रूप से करने की आवश्यकता होगी। यदि आपके पास डॉकर ज्ञान नहीं है तो यह कार्य जटिल हो सकता है।
इस ब्लॉग में, हम देखेंगे कि कैसे हम TimescaleDB Docker इमेज का उपयोग करके Docker के माध्यम से TimescaleDB को परिनियोजित कर सकते हैं, और फिर, हम देखेंगे कि CentOS Docker Image और ClusterControl का उपयोग करके इसे स्क्रैच से कैसे स्थापित किया जाए।
डॉकर छवि के साथ TimescaleDB को कैसे परिनियोजित करें
सबसे पहले, आइए देखें कि डॉकर हब पर उपलब्ध डॉकर छवि का उपयोग करके TimescaleDB को कैसे परिनियोजित किया जाए।
$ docker search timescaledb
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
timescale/timescaledb An open-source time-series database optimize… 52
हम पहला परिणाम लेंगे। इसलिए, हमें इस छवि को खींचने की जरूरत है:
$ docker pull timescale/timescaledb
और एक स्थानीय पोर्ट को डेटाबेस पोर्ट में कंटेनर में मैप करने वाले नोड कंटेनर चलाएं:
$ docker run -d --name timescaledb1 -p 7551:5432 timescale/timescaledb
$ docker run -d --name timescaledb2 -p 7552:5432 timescale/timescaledb
इन आदेशों को चलाने के बाद, आपको यह डॉकर वातावरण बनाना चाहिए:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d3bfc75fe39 timescale/timescaledb "docker-entrypoint.s…" 15 minutes ago Up 15 minutes 0.0.0.0:7552->5432/tcp timescaledb2
748d5167041f timescale/timescaledb "docker-entrypoint.s…" 16 minutes ago Up 16 minutes 0.0.0.0:7551->5432/tcp timescaledb1
अब, आप प्रत्येक नोड को निम्न कमांड के साथ एक्सेस कर सकते हैं:
$ docker exec -ti [db-container] bash
$ su postgres
$ psql
psql (9.6.13)
Type "help" for help.
postgres=#
जैसा कि आप देख सकते हैं, इस डॉकर छवि में डिफ़ॉल्ट रूप से TimescaleDB 9.6 संस्करण है, और यह अल्पाइन लिनक्स v3.9 पर स्थापित है। आप टैग को बदलकर किसी भिन्न TimescaleDB संस्करण का उपयोग कर सकते हैं:
$ docker pull timescale/timescaledb:latest-pg11
फिर, आप एक डेटाबेस उपयोगकर्ता बना सकते हैं, अपनी आवश्यकताओं के अनुसार कॉन्फ़िगरेशन बदल सकते हैं या मैन्युअल रूप से नोड्स के बीच प्रतिकृति को कॉन्फ़िगर कर सकते हैं।
ClusterControl के साथ TimescaleDB को कैसे परिनियोजित करें
अब, देखते हैं कि CentOS Docker Image (centos) और ClusterControl Docker Image (severalnines/clustercontrol) का उपयोग करके TimescaleDB को Docker के साथ कैसे परिनियोजित किया जाए।
सबसे पहले, हम नवीनतम संस्करण का उपयोग करके एक क्लस्टरकंट्रोल डॉकर कंटेनर को तैनात करेंगे, इसलिए हमें कईनाइन/क्लस्टरकंट्रोल डॉकर इमेज खींचने की जरूरत है।
$ docker pull severalnines/clustercontrol
फिर, हम ClusterControl कंटेनर चलाएंगे और इसे एक्सेस करने के लिए पोर्ट 5000 प्रकाशित करेंगे।
$ docker run -d --name clustercontrol -p 5000:80 severalnines/clustercontrol
अब, हम http://[Docker_Host]:5000/clustercontrol पर ClusterControl UI खोल सकते हैं और एक डिफ़ॉल्ट व्यवस्थापक उपयोगकर्ता और पासवर्ड बना सकते हैं।
CentOS आधिकारिक डॉकर छवि SSH सेवा के बिना आती है, इसलिए हम इसे स्थापित करेंगे और SSH कुंजी का उपयोग करके ClusterControl नोड से पासवर्ड रहित कनेक्शन की अनुमति देंगे।
$ docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5378 [OK]
इसलिए, हम CentOS आधिकारिक डॉकर छवि खींचेंगे।
$ docker pull centos
और फिर, हम दो नोड कंटेनर, टाइमस्केल1 और टाइमस्केल2 चलाएंगे, जो क्लस्टरकंट्रोल से जुड़े हुए हैं और हम डेटाबेस से कनेक्ट करने के लिए एक स्थानीय पोर्ट को मैप करेंगे (वैकल्पिक)।
$ docker run -dt --privileged --name timescale1 -p 8551:5432 --link clustercontrol:clustercontrol centos /usr/sbin/init
$ docker run -dt --privileged --name timescale2 -p 8552:5432 --link clustercontrol:clustercontrol centos /usr/sbin/init
जैसा कि हमें SSH सेवा को स्थापित और कॉन्फ़िगर करने की आवश्यकता है, हमें कंटेनर के अंदर सेवा को प्रबंधित करने में सक्षम होने के लिए विशेषाधिकार प्राप्त और /usr/sbin/init मापदंडों के साथ कंटेनर चलाने की आवश्यकता है।
इन आदेशों को चलाने के बाद, हमें यह डॉकर वातावरण बनाना चाहिए:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
230686d8126e centos "/usr/sbin/init" 4 seconds ago Up 3 seconds 0.0.0.0:8552->5432/tcp timescale2
c0e7b245f7fe centos "/usr/sbin/init" 23 seconds ago Up 22 seconds 0.0.0.0:8551->5432/tcp timescale1
7eadb6bb72fb severalnines/clustercontrol "/entrypoint.sh" 2 weeks ago Up About an hour (healthy) 22/tcp, 443/tcp, 3306/tcp, 9500-9501/tcp, 9510-9511/tcp, 9999/tcp, 0.0.0.0:5000->80/tcp clustercontrol
हम प्रत्येक नोड को निम्न कमांड से एक्सेस कर सकते हैं:
$ docker exec -ti [db-container] bash
जैसा कि हमने पहले उल्लेख किया है, हमें SSH सेवा को स्थापित करने की आवश्यकता है, तो चलिए इसे स्थापित करते हैं, रूट एक्सेस की अनुमति देते हैं और प्रत्येक डेटाबेस कंटेनर के लिए रूट पासवर्ड सेट करते हैं:
$ docker exec -ti [db-container] yum update -y
$ docker exec -ti [db-container] yum install -y openssh-server openssh-clients
$ docker exec -it [db-container] sed -i 's|^#PermitRootLogin.*|PermitRootLogin yes|g' /etc/ssh/sshd_config
$ docker exec -it [db-container] systemctl start sshd
$ docker exec -it [db-container] passwd
अंतिम चरण सभी डेटाबेस कंटेनरों में पासवर्ड रहित SSH स्थापित कर रहा है। इसके लिए हमें प्रत्येक डेटाबेस नोड के लिए आईपी पता जानना होगा। इसे जानने के लिए, हम प्रत्येक नोड के लिए निम्न कमांड चला सकते हैं:
$ docker inspect [db-container] |grep IPAddress
"IPAddress": "172.17.0.5",
फिर, ClusterControl कंटेनर इंटरेक्टिव कंसोल से अटैच करें:
$ docker exec -it clustercontrol bash
और SSH कुंजी को सभी डेटाबेस कंटेनरों में कॉपी करें:
$ ssh-copy-id 172.17.0.5
अब हमारे पास सर्वर नोड्स ऊपर और चल रहे हैं, हमें अपने डेटाबेस क्लस्टर को तैनात करने की आवश्यकता है। इसे आसान तरीके से बनाने के लिए हम ClusterControl का उपयोग करेंगे।
ClusterControl से परिनियोजन करने के लिए, http://[Docker_Host]:5000/clustercontrol पर ClusterControl UI खोलें, फिर विकल्प "तैनाती" चुनें और दिखाई देने वाले निर्देशों का पालन करें।
TimescaleDB का चयन करते समय, हमें SSH द्वारा अपने सर्वर से कनेक्ट करने के लिए उपयोगकर्ता, कुंजी या पासवर्ड और पोर्ट निर्दिष्ट करना होगा। हमें अपने नए क्लस्टर के लिए एक नाम की भी आवश्यकता है और यदि हम चाहते हैं कि ClusterControl हमारे लिए संबंधित सॉफ़्टवेयर और कॉन्फ़िगरेशन स्थापित करे।
एसएसएच एक्सेस जानकारी सेट करने के बाद, हमें डेटाबेस उपयोगकर्ता, संस्करण और डेटादिर (वैकल्पिक) को परिभाषित करना होगा। हम यह भी निर्दिष्ट कर सकते हैं कि किस भंडार का उपयोग करना है।
अगले चरण में, हमें अपने सर्वर को उस क्लस्टर में जोड़ना होगा जिसे हम बनाने जा रहे हैं।
यहां हमें पहले प्रत्येक कंटेनर से प्राप्त आईपी पते का उपयोग करना चाहिए।
अंतिम चरण में, हम चुन सकते हैं कि हमारी प्रतिकृति सिंक्रोनस या एसिंक्रोनस होगी।
हम ClusterControl गतिविधि मॉनिटर से अपने नए क्लस्टर के निर्माण की स्थिति की निगरानी कर सकते हैं।
एक बार कार्य समाप्त हो जाने के बाद, हम अपने क्लस्टर को मुख्य ClusterControl स्क्रीन में देख सकते हैं।
ध्यान दें, यदि आप अधिक स्टैंडबाय नोड्स जोड़ना चाहते हैं, तो आप इसे क्लस्टर क्रिया मेनू में ClusterControl UI से कर सकते हैं।
उसी तरह, यदि आपके पास अपना TimescaleDB क्लस्टर Docker पर चल रहा है और आप चाहते हैं कि ClusterControl इसे प्रबंधित करे, तो इस प्रणाली की सभी सुविधाओं जैसे निगरानी, बैकअप, स्वचालित विफलता, और भी बहुत कुछ का उपयोग करने में सक्षम हो, आप बस चला सकते हैं डेटाबेस कंटेनर के समान डॉकर नेटवर्क में क्लस्टरकंट्रोल कंटेनर। एकमात्र आवश्यकता यह सुनिश्चित करने के लिए है कि लक्ष्य कंटेनरों में एसएसएच संबंधित पैकेज स्थापित हैं (ओपनश-सर्वर, ओपनश-क्लाइंट)। फिर ClusterControl से डेटाबेस कंटेनर में पासवर्ड रहित SSH की अनुमति दें। एक बार हो जाने के बाद, "मौजूदा सर्वर/क्लस्टर आयात करें" सुविधा का उपयोग करें और क्लस्टर को ClusterControl में आयात किया जाना चाहिए।
कंटेनर चलाने में एक संभावित समस्या आईपी पता या होस्टनाम असाइनमेंट है। कुबेरनेट्स जैसे ऑर्केस्ट्रेशन टूल के बिना, यदि आप नोड्स को रोकते हैं और फिर से शुरू करने से पहले नए कंटेनर बनाते हैं, तो आईपी एड्रेस या होस्टनाम अलग हो सकता है। आपके पास पुराने नोड्स के लिए एक अलग IP पता होगा और ClusterControl यह मान रहा है कि सभी नोड एक समर्पित IP पते या होस्टनाम वाले वातावरण पर चल रहे हैं, इसलिए IP पता बदलने के बाद, आपको क्लस्टर को ClusterControl में फिर से आयात करना चाहिए। इस मुद्दे के लिए कई समाधान हैं, आप स्टेटफुलसेट के साथ कुबेरनेट्स का उपयोग करने के लिए इस लिंक की जांच कर सकते हैं, या यह बिना ऑर्केस्ट्रेशन टूल के कंटेनरों को चलाने के लिए देख सकते हैं।
निष्कर्ष
जैसा कि हम देख सकते हैं, Docker के साथ TimescaleDB का परिनियोजन आसान होना चाहिए यदि आप प्रतिकृति या फ़ेलओवर वातावरण को कॉन्फ़िगर नहीं करना चाहते हैं और यदि आप OS संस्करण या डेटाबेस पैकेज इंस्टॉलेशन में कोई बदलाव नहीं करना चाहते हैं।
ClusterControl के साथ, आप अपनी पसंद की OS छवि का उपयोग करके Docker के साथ अपने TimescaleDB क्लस्टर को आयात या परिनियोजित कर सकते हैं, साथ ही बैकअप और स्वचालित विफलता/पुनर्प्राप्ति जैसे निगरानी और प्रबंधन कार्यों को स्वचालित कर सकते हैं।