लिनक्स में उच्च उपलब्धता / क्लस्टरिंग को कैसे कॉन्फ़िगर और मेन्टेन करें


उच्च उपलब्धता ( हा ) केवल एक प्रणाली की गुणवत्ता को संदर्भित करती है जो लंबे समय तक विफलता के बिना लगातार काम करती है। हा समाधान हार्डवेयर और/या सॉफ्टवेयर का उपयोग करके लागू किया जा सकता है, और हा को लागू करने के लिए सामान्य समाधानों में से एक क्लस्टरिंग है।

कंप्यूटिंग में, एक क्लस्टर दो या अधिक कंप्यूटरों से बना होता है (जिसे आमतौर पर नोड्स या सदस्यों के रूप में जाना जाता है) जो एक कार्य करने के लिए एक साथ काम करते हैं। इस तरह के एक सेटअप में, केवल एक नोड द्वितीयक नोड (ओं) के साथ सेवा प्रदान करता है यदि यह विफल रहता है।

क्लस्टर चार प्रमुख प्रकारों में आते हैं:

  • Storage: provide a consistent file system image across servers in a cluster, allowing the servers to simultaneously read and write to a single shared file system.
  • High Availability: eliminate single points of failure and by failing over services from one cluster node to another in case a node goes becomes inoperative.
  • Load Balancing: dispatch network service requests to multiple cluster nodes to balance the request load among the cluster nodes.
  • High Performance: carry out parallel or concurrent processing, thus helping to improve performance of applications.

हा प्रदान करने के लिए एक और व्यापक रूप से उपयोग किया जाने वाला समाधान प्रतिकृति (विशेष रूप से डेटा प्रतिकृति) है। प्रतिकृति वह प्रक्रिया है जिसके द्वारा एक या अधिक (द्वितीयक) डेटाबेस को एकल प्राथमिक (या मास्टर) डेटाबेस के साथ सिंक में रखा जा सकता है।

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

  • Node1: 192.168.10.10
  • Node2: 192.168.10.11

इस लेख में, हम उबंटू 16.04/18.04 और CentOS में उच्च उपलब्धता/क्लस्टरिंग को तैनात, कॉन्फ़िगर और बनाए रखने के तरीके की मूल बातें प्रदर्शित करेंगे। हम क्लस्टर में Nginx HTTP सेवा को जोड़ने का तरीका प्रदर्शित करेंगे।

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

दो सर्वरों को एक दूसरे से संवाद करने के लिए, हमें दोनों सर्वरों पर /etc/मेजबान फ़ाइल में उचित स्थानीय DNS सेटिंग्स कॉन्फ़िगर करने की आवश्यकता है।

अपने पसंदीदा कमांड लाइन संपादक का उपयोग करके फ़ाइल खोलें और संपादित करें।

$ sudo vim /etc/hosts  

अपने सर्वर के वास्तविक आईपी पते के साथ निम्नलिखित प्रविष्टियाँ जोड़ें।

192.168.10.10	node1.example.com
192.168.10.11 	node2.example.com

परिवर्तनों को सहेजें और फ़ाइल को बंद करें।

Nginx वेब सर्वर स्थापित करना

अब निम्नलिखित कमांड का उपयोग करके Nginx वेब सर्वर स्थापित करें।

$ sudo apt install nginx  [On Ubuntu]
$ sudo yum install epel-release && sudo yum install nginx [On CentOS 7]

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

$ sudo systemctl enable nginx
$ sudo systemctl start nginx
$ sudo systemctl status nginx

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

$ echo "This is the default page for node1.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS1
$ echo "This is the default page for node2.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS2

Corosync और Pacemaker स्थापित करना और कॉन्फ़िगर करना

इसके बाद, हमें निम्न प्रकार से प्रत्येक नोड पर पेसमेकर , Corosync और Pcs इंस्टॉल करना होगा।

$ sudo apt install corosync pacemaker pcs	#Ubuntu 
$ sudo yum install corosync pacemaker pcs	#CentOS 

एक बार इंस्टॉलेशन पूरा होने के बाद, सुनिश्चित करें कि पीसी डेमॉन दोनों सर्वर पर चल रहा है।

$ sudo systemctl enable pcsd
$ sudo systemctl start pcsd
$ sudo systemctl status pcsd

स्थापना के दौरान, एक सिस्टम उपयोगकर्ता जिसे "hacluster" कहा जाता है, बनाया जाता है। इसलिए हमें पीसी के लिए आवश्यक प्रमाणीकरण सेट करने की आवश्यकता है। आइए "hacluster" उपयोगकर्ता के लिए एक नया पासवर्ड बनाकर शुरू करें, हमें सभी सर्वरों पर समान पासवर्ड का उपयोग करने की आवश्यकता है:

$ sudo passwd hacluster

अगला, एक सर्वर (Node1) पर, पीसी के लिए आवश्यक प्रमाणीकरण सेट करने के लिए निम्न कमांड चलाएँ।

$ sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force

अब एक क्लस्टर बनाएं और इसे कुछ नोड्स के साथ पॉप्युलेट करें (क्लस्टर नाम 15 वर्णों से अधिक नहीं हो सकता है, इस उदाहरण में, हमने Node1 सर्वर पर examplecluster ) का उपयोग किया है।

$ sudo pcs cluster setup --name examplecluster node1.example.com node2.example.com 

अब बूट पर क्लस्टर को सक्षम करें और सेवा शुरू करें।

$ sudo pcs cluster enable --all
$ sudo pcs cluster start --all

अब जाँचें कि क्या क्लस्टर सेवा ऊपर है और निम्नलिखित कमांड का उपयोग करके चल रही है।

$ sudo pcs status
OR
$ sudo crm_mon -1

उपरोक्त कमांड के आउटपुट से, आप देख सकते हैं कि कोई STONITH डिवाइस के बारे में चेतावनी है फिर भी क्लस्टर में STONITH अभी भी सक्षम है। इसके अलावा, कोई क्लस्टर संसाधन/सेवाओं को कॉन्फ़िगर नहीं किया गया है।

पहला विकल्प अक्षम करना है STONITH (या हेड में अन्य नोड को गोली मारो ), पेसमेकर पर फेंसिंग कार्यान्वयन।

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

STONITH बंद करने के लिए, निम्न आदेश चलाएँ:

$ sudo pcs property set stonith-enabled=false

अगला, निम्न आदेश चलाकर कोरम नीति को भी अनदेखा करें:

$ sudo pcs property set no-quorum-policy=ignore

उपरोक्त विकल्पों को सेट करने के बाद, संपत्ति सूची देखने के लिए निम्न कमांड चलाएँ और यह सुनिश्चित करें कि उपरोक्त विकल्प, stonith और कोरम नीति अक्षम हैं।

$ sudo pcs property list

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

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

हम दो क्लस्टर संसाधन जोड़ेंगे: फ्लोटिंग IP एड्रेस रिसोर्स जिसे " चल_प " कहा जाता है और नग्नेक्स वेब सर्वर के लिए एक संसाधन जिसे " http_server " कहा जाता है।

सबसे पहले फ़्लोटिंग_आईपी को निम्नानुसार शुरू करें। इस उदाहरण में, हमारा अस्थायी आईपी पता 192.168.10.20 है।

$ sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s

कहा पे:

  • floating_ip: is the name of the service.
  • “ocf:heartbeat:IPaddr2”: tells Pacemaker which script to use, IPaddr2 in this case, which namespace it is in (pacemaker) and what standard it conforms to ocf.
  • op monitor interval=60s”: instructs Pacemaker to check the health of this service every one minutes by calling the agent’s monitor action.

फिर http_server नाम से दूसरा संसाधन जोड़ें। यहां, सेवा का संसाधन एजेंट ocf: दिल की धड़कन: nginx है।

$ sudo pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor timeout="20s" interval="60s"

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

$ sudo pcs status resources

कमांड के आउटपुट को देखते हुए, दो अतिरिक्त संसाधन: "चल_लिप" और "http_server" सूचीबद्ध किए गए हैं। चल_ प्राथमिक सेवा बंद है क्योंकि प्राथमिक नोड परिचालन में है।

यदि आपने अपने सिस्टम पर फ़ायरवॉल सक्षम किया है, तो आपको नोड्स के बीच उचित संचार के लिए फ़ायरवॉल के माध्यम से सभी ट्रैफ़िक को Nginx और सभी उच्च उपलब्धता सेवाओं को अनुमति देने की आवश्यकता है:

-------------- CentOS 7 -------------- 
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=high-availability		
$ sudo firewall-cmd --reload

-------------- Ubuntu -------------- 
$ sudo ufw allow http	
$ sudo ufw allow high-availability						
$ sudo ufw reload 

अंतिम और महत्वपूर्ण कदम यह परीक्षण करना है कि हमारी उच्च उपलब्धता सेटअप काम करता है। वेब ब्राउज़र खोलें और पते पर नेविगेट करें 192.168.10.20 आपको स्क्रीनशॉट में दिखाए गए अनुसार नोड 2.example.com से डिफ़ॉल्ट Nginx पृष्ठ देखना चाहिए।

विफलता का अनुकरण करने के लिए, नोड 2.example.com पर क्लस्टर को रोकने के लिए निम्न आदेश चलाएँ।

$ sudo pcs cluster stop http_server

फिर पृष्ठ को 192.168.10.20 पर फिर से लोड करें, आपको अब नोड 1.example.com से डिफ़ॉल्ट नग्नेक्स वेब पेज पर पहुंचना चाहिए।

वैकल्पिक रूप से, आप किसी नोड पर क्लस्टर को रोकने के बिना, सीधे सेवा को रोकने के लिए कहकर एक त्रुटि का अनुकरण कर सकते हैं, एक नोड पर निम्न आदेश का उपयोग कर:

 
$ sudo crm_resource --resource http_server --force-stop 

फिर आपको इंटरएक्टिव मोड (डिफ़ॉल्ट) में crm_mon चलाने की आवश्यकता है, 2 मिनट के मॉनिटर अंतराल के भीतर, आपको क्लस्टर नोटिस को देखने में सक्षम होना चाहिए कि http_server विफल और स्थानांतरित करें यह दूसरे नोड के लिए है।

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

Corosync और पेसमेकर की अधिक जानकारी के लिए, देखें: https://clusterlabs.org/

इस गाइड में, हमने उबंटू 16.04/18.04 और CentOS में उच्च उपलब्धता/क्लस्टरिंग/प्रतिकृति को तैनात करने, कॉन्फ़िगर करने और बनाए रखने के तरीकों की मूल बातें दिखाई हैं। हमने क्लस्टर में Nginx HTTP सेवा को जोड़ने का तरीका दिखाया। यदि आपके पास साझा करने या प्रश्न करने के लिए कोई विचार है, तो नीचे दिए गए फीडबैक फॉर्म का उपयोग करें।