पहले, हमने MySQL प्रतिकृति का उपयोग करके एक भू-वितरित डेटाबेस क्लस्टर स्थापित करने के बारे में लिखा था। इस बार, यह PostgreSQL के बारे में है। PostgreSQL के लिए भू-वितरित क्लस्टर स्थापित करना कोई नई अवधारणा नहीं है और टोपोलॉजी काफी सामान्य है।
उच्च उपलब्धता प्राप्त करने के लिए, संगठन और कंपनियां अपने डेटाबेस नोड्स को फैला रही हैं ताकि जब किसी विशिष्ट क्षेत्र (जो आपके डेटा केंद्र को प्रभावित करता है) में एक विपत्तिपूर्ण घटना घटित हो, तो आपके पास अपने स्टैंडबाय नोड विफलता के लिए उपलब्ध हों।पी>
आपके संगठन की व्यावसायिक निरंतरता और आपदा पुनर्प्राप्ति योजनाओं के हिस्से के रूप में यह एक बहुत ही सामान्य अभ्यास है (इस प्रकार की टोपोलॉजी का उपयोग करके)। इस प्रकार की टोपोलॉजी एकल बिंदु विफलता (एसपीओएफ) को हटा देती है। एक सामान्य आवश्यकता विशेष रूप से यदि आपके पास कम आरपीओ और उच्च अपटाइम (यदि संभव हो तो 99.9999999999%) है।
इस ब्लॉग में, मैं ClusterControl का उपयोग करके इसे करने के तरीके के बारे में एक सरल कार्यान्वयन पर चर्चा करूंगा। ClusterControl डेटाबेस क्लस्टर के लिए एक एजेंट रहित प्रबंधन और स्वचालन सॉफ्टवेयर है। यह आपके डेटाबेस सर्वर/क्लस्टर को सीधे ClusterControl यूजर इंटरफेस से परिनियोजित, मॉनिटर, प्रबंधित और स्केल करने में मदद करता है।
वांछित वास्तुकला सेटअप
यहाँ लक्ष्य परिणाम एक सुरक्षित वातावरण में कुशलतापूर्वक परिनियोजित करना है। ऐसा करने के लिए, यह महत्वपूर्ण है कि आपको अपने स्थापित कनेक्शन को वीपीएन का उपयोग करने के बीच में रखना होगा और यदि आप अपने डेटाबेस नोड्स को टीएलएस/एसएसएल कनेक्शन पर सेट करते हैं तो यह अधिक सुरक्षित होगा। हमारे ब्लॉग में इस सेटअप के लिए, हम बस एक वीपीएन पर एक नोड तैनात करते हैं और आपको दिखाते हैं कि आप इस दृष्टिकोण को आसानी से कैसे कर सकते हैं। लक्ष्य सेटअप के आरेख के लिए नीचे देखें:
सेटअप को विस्तृत करने के लिए, ऑन-प्रिमाइसेस नेटवर्क जनता के बीच संचार करेगा एक वीपीएन टनल का उपयोग करने वाले क्लाउड और इन दोनों नेटवर्कों में एक वीपीएन गेटवे होगा ताकि दोनों संचार कर सकें या कनेक्शन स्थापित कर सकें। ClusterControl के लिए आवश्यक है कि आप उन सभी नोड्स की निगरानी करें जिन्हें पंजीकृत किया जाना है क्योंकि यह डेटा मेट्रिक्स के लिए आपके नोड्स के बारे में जानकारी एकत्र करेगा। इसके अलावा, यह आवश्यक है कि आपका ऑन-प्रिमाइसेस सक्रिय-लेखक नोड अन्य डोमेन में स्टैंडबाय नोड तक भी पहुंच सके, जो इस ब्लॉग के लिए है, जिसे Google क्लाउड प्लेटफ़ॉर्म (GCP) में होस्ट किया गया है।
अपना OpenVPN सेट करना
OpenVPN सेटअप दोनों नेटवर्क डोमेन के लिए बहुत मुश्किल है। इसका सार यह है कि, इसमें निम्नलिखित विचार होने चाहिए:
- आपके ऑन-प्रिमाइसेस से नोड लक्षित सार्वजनिक क्लाउड डोमेन नोड्स के लिए एक कनेक्शन स्थापित करने में सक्षम होंगे
- आपके ऑन-प्रिमाइसेस के नोड्स को सेट अप करने के लिए आवश्यक पैकेज डाउनलोड करने के लिए इंटरनेट एक्सेस प्राप्त करने में सक्षम हो सकता है। जब तक आपके पास आवश्यक स्थानीय रूप से संग्रहीत सभी भंडार नहीं हैं, यह मामला नहीं हो सकता है
- आपके सार्वजनिक क्लाउड डोमेन के नोड ऑन-प्रिमाइसेस नोड्स से कनेक्शन स्थापित करने में सक्षम होंगे
- आपके सार्वजनिक क्लाउड डोमेन के नोड उन पैकेजों को डाउनलोड करने के लिए इंटरनेट एक्सेस प्राप्त करने में सक्षम हो सकते हैं जिन्हें सेट करने की आवश्यकता होती है। जब तक आपके पास आवश्यक स्थानीय रूप से संग्रहीत सभी भंडार नहीं हैं, यह मामला नहीं हो सकता है
OpenVPN इंस्टालेशन और कॉन्फ़िगरेशन
एक कदम
ओपनवीपीएन पैकेज (और उबंटू/डेबियन डिस्ट्रोस के लिए आसान-आरएसए पैकेज) स्थापित करें
$ sudo apt-get install openvpn easy-rsa
CentOS/RHEL आधारित OS के लिए,
$ sudo yum install openvpn wget
$ wget -O /tmp/easyrsa https://github.com/OpenVPN/easy-rsa-old/archive/2.3.3.tar.gz
दूसरा चरण
सर्टिफिकेशन अथॉरिटी (CA), सर्वर और क्लाइंट सर्टिफिकेट जैसे सर्टिफिकेट जेनरेट करें।
उबंटू/डेबियन के लिए, आप निम्नलिखित कार्य कर सकते हैं:
$ /usr/bin/make-cadir CA
CA निर्देशिका में बदलें
$ cd CA
इस समय, आप अपनी आवश्यकताओं के अनुसार vars फ़ाइल को संपादित करने की संभावना रखते हैं, उदा.
export KEY_COUNTRY="SE"
export KEY_PROVINCE="SMD"
export KEY_CITY="Kalmar"
export KEY_ORG="Severalnines"
export KEY_EMAIL="[email protected]"
export KEY_CN="S9s"
export KEY_NAME="server"
export KEY_OU="Support Unit"
फिर आवश्यक env चर परिभाषित करने के लिए vars स्क्रिप्ट निष्पादित करें
[ ~/CA ]$ source ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /CA/keys
एक सफाई चलाएं
[ ~/CA ]$ ./clean-all
फिर अपने CA, सर्वर और क्लाइंट के लिए प्रमाणपत्र बनाएं।
[ ~/CA ]$ ./build-ca
[ ~/CA ]$ ./build-key-server server
$ ./build-dh 2048
[ ~/CA ]$ ./build-key client
आखिरकार, एक परफेक्ट फॉरवर्ड सीक्रेसी कुंजी जेनरेट करें।
$ openvpn --genkey --secret pfs.key
यदि आप CentOS/RHEL टाइप डिस्ट्रोस का उपयोग कर रहे हैं, तो आप निम्न कार्य कर सकते हैं:
$ tar xfz /tmp/easyrsa
$ sudo mkdir /etc/openvpn/easy-rsa
$ sudo cp -rf easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa
# सुनिश्चित करें कि सुरक्षा उद्देश्यों के लिए आपकी RSA कुंजियाँ सही अनुमति पर हैं
$ sudo chown vagrant /etc/openvpn/easy-rsa/
$ sudo cp /usr/share/doc/openvpn-2.4.4/sample/sample-config-files/server.conf /etc/openvpn
$ sudo mkdir /etc/openvpn/easy-rsa/keys
$ sudo nano /etc/openvpn/easy-rsa/vars
$ cd /etc/openvpn/easy-rsa
इस समय, आप अपनी आवश्यकताओं के अनुसार vars फ़ाइल को संपादित करने की संभावना रखते हैं, उदा.
export KEY_COUNTRY="SE"
export KEY_PROVINCE="SMD"
export KEY_CITY="Kalmar"
export KEY_ORG="Severalnines"
export KEY_EMAIL="[email protected]"
export KEY_CN="S9s"
export KEY_NAME="server"
export KEY_OU="Support Unit"
फिर आवश्यक env चर परिभाषित करने के लिए vars स्क्रिप्ट निष्पादित करें
$ source ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /CA/keys
एक सफाई चलाएं
$ ./clean-all
फिर अपने CA, सर्वर और क्लाइंट के लिए प्रमाणपत्र बनाएं।
$ ./build-ca
$ ./build-key-server server
$ ./build-dh 2048
$ cd /etc/openvpn/easy-rsa
$ ./build-key client
$ cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
एक बार जब आप सभी सेटअप कर लेते हैं, तो आपको इस बात का ध्यान रखना चाहिए कि आपकी चाबियां और प्रमाणपत्र कहां हैं। यदि आप इसे चलाने के लिए Linux में systemd या सेवा का उपयोग कर रहे हैं, तो आप अपने प्रमाणपत्रों और कुंजियों को /etc/openvpn पर रख सकते हैं। संभावना है, आपको निम्न आदेश चलाना पड़ सकता है:
sudo cp dh2048.pem ca.crt server.crt server.key /etc/openvpn
तीसरा चरण
इस बिंदु पर, मैं निम्नलिखित सर्वर और क्लाइंट कॉन्फ़िगरेशन के साथ समाप्त होता हूं। मेरी कॉन्फ़िगरेशन फ़ाइलें तदनुसार देखें,
OpenVPN सर्वर कॉन्फिग
$ cat /etc/openvpn/server-ovpn.conf
port 1194
proto udp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key # This file should be kept secret
dh /etc/openvpn/keys/dh2048.pem
cipher AES-256-CBC
auth SHA512
server 10.8.0.0 255.255.255.0
client-to-client
topology subnet
push "route 192.168.30.0 255.255.255.0"
#push "redirect-gateway def1 bypass-dhcp"
#push "redirect-gateway"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
#status openvpn-status.log
#log-append openvpn.log
verb 3
tls-server
tls-auth /etc/openvpn/keys/pfs.key
सबसे महत्वपूर्ण बात जिस पर आपको ध्यान देने की आवश्यकता है, वे निम्नलिखित विकल्प हैं जिनका उल्लेख इस प्रकार किया गया है।
क्लाइंट-टू-क्लाइंट - बहुत महत्वपूर्ण है इसलिए वीपीएन में नोड्स अलग-अलग नेटवर्क डोमेन में अन्य नोड्स को पिंग कर सकते हैं। मान लीजिए, ClusterControl ऑन-प्रिमाइसेस में स्थित है, यह GCP में नोड्स को पिंग कर सकता है।
पुश "रूट 192.168.30.0 255.255.255.0" - मैं रूटिंग टेबल को पुश करता हूं ताकि वीपीएन से जुड़े जीसीपी नोड/एस ऑन-प्रिमाइसेस डोमेन में मेरे नोड्स को पिंग कर सकें। मेरे जीसीपी वीपीएन गेटवे में, मेरे पास निम्नलिखित रूटिंग टेबल हैं जैसे पुश "रूट 10.142.0.0 255.255.255.0"
#push "redirect-gateway def1 bypass-dhcp" ,
#push "redirect-gateway" - इन दोनों अनुभागों की आवश्यकता नहीं है क्योंकि इंस्टालेशन पर मेरे रेपो और आश्रित पैकेजों को सेटअप करने के लिए मुझे इंटरनेट कनेक्शन की आवश्यकता है।
push "dhcp-option DNS 8.8.8.8",
पुश "dhcp-option DNS 8.8.4.4" - यदि आवश्यक हो तो इन दोनों अनुभागों को आपके वांछित DNS में बदला जा सकता है। यह आपके वांछित DNS के लिए है, खासकर जब आपको इंटरनेट कनेक्शन की आवश्यकता हो।
OpenVPN क्लाइंट कॉन्फिग
$ cat openvpn/client-vpn.ovpn
client
dev tun
proto udp
remote 34.73.238.239 1194
ca ca.crt
cert client.crt
key client.key
tls-version-min 1.2
tls-cipher TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256
cipher AES-256-CBC
auth SHA512
resolv-retry infinite
auth-retry none
nobind
persist-key
persist-tun
ns-cert-type server
comp-lzo
verb 3
tls-client
tls-auth pfs.key
यहां सबसे महत्वपूर्ण बात यह है कि आपको अपने मुख्य पथों के बारे में सुनिश्चित होना चाहिए, और इस खंड में पैरा को भी बदलना होगा,
remote 34.73.238.239 1194
जो कनेक्ट करने के लिए आपके वीपीएन सर्वर गेटवे का होस्टनाम/आईपी पता हो सकता है।
चरण चार
आखिरकार, प्रॉक्सी वीपीएन सर्वर सेटअप करें ताकि नेटवर्क पैकेट को सर्वर पर नेटवर्क इंटरफेस पर रूट किया जा सके और कर्नेल को आईपीवी4 ट्रैफिक को फॉरवर्ड करने की अनुमति मिल सके
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
अधिक गहन स्थापना के लिए, मेरा सुझाव है कि आप CentOS और Ubuntu पर इन पोस्ट को देखें।
बादल पर कुशलता से विस्तार करना
मान लीजिए कि आपके ऑन-प्रिमाइसेस डोमेन में निम्नलिखित टोपोलॉजी है,
और अब आप अपनी उपलब्धता को किसी अन्य डेटासेंटर पर विस्तारित करना चाहते हैं, जो GCP है इस ब्लॉग के लिए। ClusterControl का उपयोग करके परिनियोजन करना बहुत सरल है। आप नीचे बताई गई निम्न प्रक्रिया कर सकते हैं,
एक कदम
एक गुलाम समूह बनाएं
दूसरा चरण
प्रतिकृति के लिए अपना मास्टर चुनें,
तीसरा चरण
अपने सार्वजनिक क्लाउड परिवेश तक पहुंच सेट करें
चरण चार
अपने नोड के होस्टनाम/आईपी को अपने पीजी प्रतिकृति क्लस्टर में विस्तारित करने के लिए निर्दिष्ट करें,
पांचवां चरण
अंत में, कार्य गतिविधि की निगरानी करें कि ClusterControl इस प्रकार की कार्रवाई पर कैसे प्रतिक्रिया करता है
परिणाम आपको आपके ऑन-प्रिमाइसेस और आपके विस्तारित डेटासेंटर के बीच संबंध दिखाएगा, जो इस ब्लॉग, हमारे GCP PostgreSQL स्टैंडबाय नोड में है। परिणाम के लिए नीचे देखें
निष्कर्ष
जियो-लोकेशन स्टैंडबाय नोड सेट करना मुश्किल नहीं है, लेकिन मुख्य मुद्दा यह है कि यह आपके आर्किटेक्चरल डिज़ाइन में कितना सुरक्षित होगा। वीपीएन का उपयोग समस्या की मुख्य चिंता को कम कर सकता है। OpenVPN का उपयोग करना इसे लागू करने का एक सरल तरीका है, लेकिन भारी लेनदेन संबंधी अनुप्रयोगों के लिए, संगठन इस सेटअप से निपटने के लिए अपस्केल सेवाओं या हार्डवेयर पर निवेश करने की संभावना रखते हैं। इसके अलावा एक टीएलएस/एसएसएल जोड़ने से किया जा सकता है। हम इस पर चर्चा करेंगे कि आप हमारे अगले ब्लॉग में PostgreSQL के साथ TLS/SSL का उपयोग कैसे कर सकते हैं।