HAProxy शुरुआती ट्यूटोरियल

Haproxy Suru Ati Tyutoriyala



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

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

HAProxy का उपयोग क्यों करें?

HAProxy की स्थापना और कॉन्फ़िगरेशन के बारे में जानने से पहले, आपको यह समझना चाहिए कि हमें इसकी आवश्यकता क्यों है, इसके द्वारा प्रदान की जाने वाली सुविधाओं के कारण। HAProxy की प्राथमिक विशेषताएं निम्नलिखित हैं:







  1. भार का संतुलन - HAProxy के साथ, आप एक ही सर्वर पर ओवरलोडिंग से बचने के लिए ट्रैफ़िक को विभिन्न सर्वरों पर आराम से वितरित कर सकते हैं। इस तरह, आपके एप्लिकेशन को किसी भी डाउनटाइम समस्या का सामना नहीं करना पड़ेगा, और आपको तेज़ प्रतिक्रिया, विश्वसनीयता और उपलब्धता प्राप्त होगी।
  2. लॉगिंग और निगरानी - समस्या निवारण में सहायता के लिए आपको अपने सर्वर के लिए विस्तृत निगरानी लॉग मिलेंगे। इसके अलावा, HAProxy में एक सांख्यिकी पृष्ठ है जहां आप अपने लोड बैलेंसर के लिए वास्तविक समय प्रदर्शन विश्लेषण प्राप्त कर सकते हैं।
  3. स्वास्थ्य जांच - यहां तक ​​कि आपके सर्वर को भी उनकी स्थिति निर्धारित करने के लिए स्वास्थ्य जांच की आवश्यकता होती है। HAProxy आपके सर्वर की विश्वसनीयता बढ़ाने के लिए उसकी स्थिति जानने के लिए अक्सर स्वास्थ्य जांच चलाता है। यदि किसी अस्वस्थ सर्वर का पता चलता है, तो यह ट्रैफ़िक को दूसरे सर्वर पर भेज देता है।
  4. रिवर्स प्रॉक्सी - सुरक्षा बढ़ाने का एक तरीका आंतरिक संरचना को छिपाना है। सौभाग्य से, HAProxy आपको ग्राहकों से ट्रैफ़िक प्राप्त करने और उन्हें उचित सर्वर पर रूट करने की सुविधा देता है। इस तरह, आपकी आंतरिक संरचना हैकर की नज़र से छिपी रहती है।
  5. एसीएल (एक्सेस कंट्रोल लिस्ट) - HAProxy के साथ, आप परिभाषित कर सकते हैं कि पथ, हेडर और आईपी पते जैसे विभिन्न मानदंडों का उपयोग करके ट्रैफ़िक रूटिंग कैसे होनी चाहिए। इस प्रकार, आपके ट्रैफ़िक के लिए कस्टम रूटिंग लॉजिक को परिभाषित करना आसान हो जाता है।
  6. एसएसएल समाप्ति - डिफ़ॉल्ट रूप से, एसएसएल/टीएलएस को बैकएंड सर्वर द्वारा ऑफलोड कर दिया जाता है जिससे प्रदर्शन कम हो जाता है। हालाँकि, HAProxy के साथ, SSL/TLS समाप्ति लोड बैलेंसर पर होती है, जिससे कार्य बैकएंड सर्वर में लोड हो जाता है।

HAProxy स्थापित करना

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



यदि आप उबंटू या डेबियन सिस्टम चला रहे हैं, तो HAProxy को APT पैकेज मैनेजर से इंस्टॉल किया जा सकता है। निम्न आदेश चलाएँ:



$ सुडो उपयुक्त अद्यतन
$ sudo apt इंस्टॉल हैप्रोक्सी

इसी तरह, यदि आप आरएचईएल-आधारित सिस्टम या सेंटओएस का उपयोग कर रहे हैं, तो HAProxy 'यम' पैकेज मैनेजर से उपलब्ध है। निम्नलिखित आदेश चलाएँ:





$ सुडो यम अपडेट
$ सुडो यम हैप्रोक्सी इंस्टॉल करें

हमारे मामले में, हम उबंटू का उपयोग कर रहे हैं। इस प्रकार, हमारी आज्ञा इस प्रकार है:



फिर हम यह सुनिश्चित करने के लिए इसके संस्करण की जांच कर सकते हैं कि हम HAProxy को सफलतापूर्वक स्थापित करने में कामयाब रहे।

$ हैप्रोक्सी--संस्करण

HAProxy को कैसे कॉन्फ़िगर करें

HAProxy स्थापित होने पर, अब आप इसकी कॉन्फ़िग फ़ाइल खोल सकते हैं ( / etc/haproxy/haproxy.cfg) और उन सेटिंग्स को परिभाषित करें जिन्हें आप अपने लोड बैलेंसर के लिए उपयोग करना चाहते हैं।

नैनो या विम जैसे संपादक का उपयोग करके कॉन्फ़िगरेशन फ़ाइल खोलें।

$ सुडो नैनो /etc/haproxy/haproxy.cfg

आपको निम्न की तरह एक कॉन्फ़िगरेशन फ़ाइल मिलती है:

कॉन्फ़िग फ़ाइल से, आप देखेंगे कि यह दो मुख्य अनुभागों के साथ आती है:

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

यहां 'डिफ़ॉल्ट' अनुभाग का एक उदाहरण दिया गया है:

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

आपके लोड बैलेंसर के अपेक्षा के अनुरूप काम करने के लिए तीन और अनुभाग हैं जिन्हें आपको परिभाषित करना चाहिए।

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

आइए एक उदाहरण देखें

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

चरण 1: डिफ़ॉल्ट अनुभाग को कॉन्फ़िगर करना

'डिफ़ॉल्ट' अनुभाग में, हम नोड्स में साझा किए जाने वाले मान सेट करते हैं। हमारे मामले में, हम मोड को HTTP पर सेट करते हैं और क्लाइंट और सर्वर के लिए टाइमआउट सेट करते हैं। आप अपनी आवश्यकताओं के अनुरूप समय को समायोजित कर सकते हैं।

याद रखें कि ये सभी संपादन '/etc/haproxy/haproxy.cfg' पर स्थित HAProxy कॉन्फ़िगरेशन में हैं। एक बार डिफ़ॉल्ट अनुभाग कॉन्फ़िगर हो जाने पर, आइए फ्रंटएंड को परिभाषित करें।

चरण 2: फ्रंटएंड अनुभाग को कॉन्फ़िगर करना

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

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

आपकी कॉन्फ़िगरेशन फ़ाइल में पिछली पंक्तियों को जोड़ने के बाद, हमें निम्नलिखित कमांड के साथ 'haproxy.service' को पुनः आरंभ करना होगा:

$ sudo systemctl पुनरारंभ हैप्रोक्सी

इस बिंदु पर, हम 'कर्ल' कमांड का उपयोग करके अपनी वेबसाइट पर अनुरोध भेजने का प्रयास कर सकते हैं। कमांड चलाएँ और लक्ष्य IP पता जोड़ें।

$ कर्ल <आईपी एड्रेस>

चूँकि हमने अभी तक यह परिभाषित नहीं किया है कि हमारे HAProxy का बैकएंड कैसा होगा, हमें 503 त्रुटि मिलती है जैसा कि निम्नलिखित में दिखाया गया है। हालाँकि लोड बैलेंसर अनुरोध प्राप्त करने में कामयाब रहा, लेकिन इसे संभालने के लिए वर्तमान में कोई सर्वर उपलब्ध नहीं है, इसलिए त्रुटि हुई।

चरण 3: बैकएंड को कॉन्फ़िगर करना

बैकएंड अनुभाग वह है जहां हम उन सर्वरों को परिभाषित करते हैं जो किसी भी आने वाले अनुरोध को संभालेंगे। लोड बैलेंसर यह जानने के लिए इस अनुभाग को संदर्भित करता है कि उसे आने वाले अनुरोधों को कैसे वितरित करना चाहिए ताकि यह सुनिश्चित हो सके कि कोई सर्वर ओवरलोड न हो।

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

इसके बाद, एक बैकएंड अनुभाग बनाएं जिसका वही नाम हो जो फ्रंटएंड अनुभाग में परिभाषित है। फिर आपको अपने सर्वर के नाम और उसके आईपी पते के बाद 'सर्वर' कीवर्ड का उपयोग करना होगा। निम्नलिखित छवि से पता चलता है कि हमने IP 127.0.0.1 और पोर्ट 8001 का उपयोग करके 'linuxhint1' सर्वर को परिभाषित किया है:

आपके पास बैकएंड सर्वरों का एक पूल हो सकता है, लेकिन हमने इस मामले के लिए केवल एक को परिभाषित किया है। सुनिश्चित करें कि आप फ़ाइल सहेजें। हमें HAProxy सेवा को फिर से पुनरारंभ करना होगा।

निर्मित HAProxy लोड बैलेंसर का परीक्षण करने के लिए, हम हमारे द्वारा निर्दिष्ट IP पते का उपयोग करके बैकएंड पोर्ट को बाइंड करने के लिए Python3 का उपयोग करके एक वेब सर्वर बनाते हैं। हम कमांड को इस प्रकार चलाते हैं:

$ Python3 -m http.server 8001 --बाइंड 127.0.0.1

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

दूसरे टर्मिनल पर, सर्वर को अनुरोध भेजने के लिए 'कर्ल' कमांड का उपयोग करें।

$ कर्ल <आईपी एड्रेस>

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

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

इस प्रकार आप अपनी वेबसाइट या एप्लिकेशन के लिए एक सरल HAProxy सेट कर सकते हैं।

नियमों के साथ कार्य करना

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

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

इसके अलावा, हमारे पास अपना 'default_backend' और दूसरा 'use_backend' है जो सर्वरों का एक अलग पूल है जिसका उपयोग हम उस पोर्ट के आधार पर करेंगे जहां से अनुरोध आ रहे हैं। निम्नलिखित कॉन्फ़िगरेशन में, पोर्ट 81 के माध्यम से सभी अनुरोधों को 'Linux2_backend' में सर्वर द्वारा नियंत्रित किया जाता है। किसी भी अन्य अनुरोध को 'default_backend' द्वारा नियंत्रित किया जाता है।

फिर हम फ्रंटएंड में परिभाषित अनुसार बैकएंड अनुभाग बनाते हैं। ध्यान दें कि प्रत्येक बैकएंड के लिए, हमारे पास एक अलग सर्वर है जिसे हम अनुरोधों को संभालने के लिए उपयोग करने के लिए निर्दिष्ट करते हैं।

HAProxy सेवा को तुरंत पुनः आरंभ करें।

आइए Python3 का उपयोग करके वेब सर्वर बनाएं और अनुरोधों को पोर्ट 8002 पर बाइंड करें जो वैकल्पिक बैकएंड सर्वर है।

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

अपने वेब सर्वर की दोबारा जांच करने पर, हम देख सकते हैं कि यह अनुरोधों को प्राप्त करने और संभालने का प्रबंधन करता है और 200 (सफलता) प्रतिक्रिया देता है।

इस प्रकार आप नियमों को परिभाषित कर सकते हैं कि आपका लोड बैलेंसर अनुरोधों को कैसे प्राप्त करेगा और कैसे संभालेगा।

निष्कर्ष

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