1. परिचय
नेटवर्क लोड बैलेंसर को कॉन्फ़िगर किया जा सकता है, ताकि वह लोड बैलेंसर के बैकएंड इंस्टेंस में ट्रैफ़िक को डिस्ट्रिब्यूट कर सके. ऐसा, एचटीटीपी हेल्थ चेक से मिले वज़न के आधार पर किया जाता है. इसके लिए, वज़न के हिसाब से लोड बैलेंसिंग का इस्तेमाल किया जाता है.
वेटेड लोड बैलेंसिंग के लिए, आपको इन दोनों को कॉन्फ़िगर करना होगा:
- आपको बैकएंड सेवा की लोकल लोड बैलेंसर नीति (localityLbPolicy) को WEIGHTED_MAGLEV पर सेट करना होगा.
- आपको बैकएंड सेवा को एचटीटीपी/एचटीटीपी2/एचटीटीपीएस हेल्थ चेक के साथ कॉन्फ़िगर करना होगा. एचटीटीपी हेल्थ चेक के रिस्पॉन्स में, कस्टम एचटीटीपी रिस्पॉन्स हेडर फ़ील्ड X-Load-Balancing-Endpoint-Weight होना चाहिए. इससे हर बैकएंड इंस्टेंस के लिए, 0 से 1000 तक की पूर्णांक वैल्यू के साथ वज़न तय किया जा सकता है. यह वैल्यू डेसिमल फ़ॉर्मैट में होनी चाहिए.
अगर आपने वज़न के हिसाब से लोड बैलेंसिंग का इस्तेमाल करके, बैकएंड सेवा पर आधारित कई नेटवर्क लोड बैलेंसर के लिए एक ही इंस्टेंस ग्रुप को बैकएंड के तौर पर इस्तेमाल किया है, तो हमारा सुझाव है कि बैकएंड सेवा की हर हेल्थ जांच के लिए, यूनीक अनुरोध-पाथ का इस्तेमाल करें. ज़्यादा जानकारी के लिए, एचटीटीपी, एचटीटीपीएस, और एचटीटीपी/2 की हेल्थ जांच के लिए ज़रूरी शर्तें देखें.
एचटीटीपी हेल्थ चेक को एचटीटीपी 200 (OK) रिस्पॉन्स देना चाहिए, ताकि हेल्थ-चेक पास हो सकें और बैकएंड इंस्टेंस को सही माना जा सके. अगर सभी बैकएंड इंस्टेंस, हेल्थ चेक पास कर लेते हैं और X-Load-Balancing-Endpoint-Weight को शून्य वज़न के साथ दिखाते हैं, तो लोड बैलेंसर नए कनेक्शन को सही बैकएंड के बीच बांट देता है. साथ ही, उन्हें एक जैसा वज़न देता है. लोड बैलेंसर, नए कनेक्शन को ऐसे बैकएंड के बीच भी बांट सकता है जो ठीक से काम नहीं कर रहे हैं. ज़्यादा जानकारी के लिए, ट्रैफ़िक डिस्ट्रिब्यूशन देखें.
वज़न के हिसाब से लोड बैलेंसिंग के उदाहरणों के लिए, बैकएंड का चुनाव और कनेक्शन ट्रैकिंग देखें.
वज़न के हिसाब से लोड बैलेंसिंग का इस्तेमाल इन स्थितियों में किया जा सकता है:
- अगर कुछ कनेक्शन, दूसरों की तुलना में ज़्यादा डेटा प्रोसेस करते हैं या कुछ कनेक्शन दूसरों की तुलना में ज़्यादा समय तक चालू रहते हैं, तो बैकएंड लोड डिस्ट्रिब्यूशन में अंतर आ सकता है. हर इंस्टेंस के लिए कम वेट का सिग्नल देने पर, ज़्यादा लोड वाले इंस्टेंस के लिए नए कनेक्शन का शेयर कम हो सकता है. हालांकि, यह मौजूदा कनेक्शन को सेवा देता रहता है.
- अगर कोई बैकएंड ओवरलोड हो जाता है और ज़्यादा कनेक्शन असाइन करने से मौजूदा कनेक्शन टूट सकते हैं, तो ऐसे बैकएंड खुद को शून्य वेट असाइन करते हैं. वज़न को शून्य पर सेट करने से, बैकएंड इंस्टेंस नए कनेक्शन के लिए सेवा देना बंद कर देता है. हालांकि, यह मौजूदा कनेक्शन के लिए सेवा देना जारी रखता है.
- अगर कोई बैकएंड, रखरखाव से पहले मौजूदा कनेक्शन खत्म कर रहा है, तो वह खुद को ज़ीरो वेट असाइन करता है. वज़न को शून्य पर सेट करने से, बैकएंड इंस्टेंस नए कनेक्शन के लिए सेवा देना बंद कर देता है. हालांकि, यह मौजूदा कनेक्शन के लिए सेवा देना जारी रखता है.
आपको क्या सीखने को मिलेगा
- वेटेड लोड बैलेंसिंग का इस्तेमाल करके, लोड बैलेंसर के बैकएंड इंस्टेंस में ट्रैफ़िक को डिस्ट्रिब्यूट करने के लिए, नेटवर्क लोड बैलेंसर को कैसे कॉन्फ़िगर करें. इसके लिए, एचटीटीपी हेल्थ चेक से मिले वज़न के आधार पर ट्रैफ़िक को डिस्ट्रिब्यूट किया जाता है.
अपने हिसाब से एनवायरमेंट सेट अप करना
- Google Cloud Console में साइन इन करें. इसके बाद, नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_ID
के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक बना रहेगा. - आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ पढ़ें.
- इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, बनाए गए संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या पूरे प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त में आज़माने वाले प्रोग्राम में शामिल हो सकते हैं.
Cloud Shell शुरू करें
Google Cloud को अपने लैपटॉप से रिमोटली ऐक्सेस किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जाएगा. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.
Google Cloud Console में, सबसे ऊपर दाएं कोने में मौजूद टूलबार पर, Cloud Shell आइकॉन पर क्लिक करें:
इसे चालू करने और एनवायरमेंट से कनेक्ट करने में सिर्फ़ कुछ सेकंड लगेंगे. यह प्रोसेस पूरी होने के बाद, आपको कुछ ऐसा दिखेगा:
इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है. साथ ही, Google Cloud पर काम करता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में मौजूद सभी टास्क, ब्राउज़र में किए जा सकते हैं. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.
2. कॉन्फ़िगरेशन शुरू करें
इस कोडलैब के लिए, सिर्फ़ एक प्रोजेक्ट की ज़रूरत होती है.
इस ट्यूटोरियल में, तीन वीएम इंस्टेंस वाला एक इंस्टेंस ग्रुप बनाया जाता है. साथ ही, हर इंस्टेंस के लिए वेट असाइन किए जाते हैं. बैकएंड इंस्टेंस के वेट की जानकारी देने के लिए, एचटीटीपी हेल्थ चेक बनाया जाता है. बैकएंड सेवा पर वेटेड नेटवर्क लोड बैलेंसर चालू है. साथ ही, लोकैलिटी लोड बैलेंसर की नीति WEIGHTED_MAGLEV के तौर पर सेट है.
शुरू करने से पहले
- बैकएंड सेवा पर आधारित एक्सटर्नल नेटवर्क लोड बैलेंसिंग की खास जानकारी पढ़ें.
- Google Cloud CLI इंस्टॉल करें. इस टूल के बारे में पूरी जानकारी पाने के लिए, gcloud सीएलआई की खास जानकारी देखें. आपको लोड बैलेंसिंग से जुड़े निर्देश, एपीआई और gcloud सीएलआई के रेफ़रंस में मिल सकते हैं. अगर आपने पहले कभी Google Cloud CLI का इस्तेमाल नहीं किया है, तो पुष्टि करने के लिए सबसे पहले gcloud init चलाएं.
- Compute API को चालू करें.
gcloud services enable compute.googleapis.com
ध्यान दें: Google Cloud Console का इस्तेमाल करके, लोकल लोड बैलेंसर की नीति को कॉन्फ़िगर नहीं किया जा सकता. साथ ही, वीएम इंस्टेंस को वेट असाइन नहीं किए जा सकते. इसके बजाय, Google Cloud CLI का इस्तेमाल करें.
VPC नेटवर्क, सबनेट, और फ़ायरवॉल के नियम बनाना
अपने लोड बैलेंसर के बैकएंड वीएम से कनेक्शन की अनुमति देने के लिए, वीपीसी नेटवर्क, सबनेट, और इन्ग्रेस डेटा ट्रैफ़िक को अनुमति देने वाले फ़ायरवॉल के नियम बनाएं.
- एक वीपीसी नेटवर्क और सबनेट बनाएं. a. वीपीसी नेटवर्क बनाने के लिए,
gcloud compute networks create
कमांड:
चलाएं
gcloud compute networks create NETWORK_NAME --subnet-mode custom
b. इस उदाहरण में, सबनेट के प्राइमरी आईपीवी4 पते की रेंज 10.10.0.0/24
है.
सबनेट बनाने के लिए, gcloud compute networks subnets create
कमांड चलाएं:
gcloud compute networks subnets create SUBNET_NAME \ --network=NETWORK_NAME \ --range=10.10.0.0/24 \ --region=us-central1
इनकी जगह ये डालें:
NETWORK_NAME
: यह बनाए जाने वाले वीपीसी नेटवर्क का नाम है.SUBNET_NAME
: बनाए जाने वाले सबनेटवर्क का नाम.
- इन्ग्रेस डेटा ट्रैफ़िक को अनुमति देने वाला फ़ायरवॉल नियम बनाएं. इससे डेस्टिनेशन टीसीपी पोर्ट 80 और 443 पर भेजे गए पैकेट, बैकएंड वीएम तक डिलीवर किए जा सकेंगे. इस उदाहरण में, फ़ायरवॉल का नियम किसी भी सोर्स आईपी पते से कनेक्शन की अनुमति देता है. फ़ायरवॉल का नियम,
network-lb-tag
नेटवर्क टैग वाले वीएम पर लागू होता है. फ़ायरवॉल का नियम बनाने के लिए,gcloud compute firewall-rules create
कमांड चलाएं:
gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --direction=INGRESS \ --priority=1000 \ --network=NETWORK_NAME \ --action=ALLOW \ --rules=tcp:80,tcp:443 \ --source-ranges=0.0.0.0/0 \ --target-tags=network-lb-tag
FIREWALL_RULE_NAME
की जगह, बनाए जाने वाले फ़ायरवॉल के नियम का नाम डालें.
वीएम इंस्टेंस बनाना और उन्हें वेट असाइन करना
तीन वीएम इंस्टेंस बनाएं और उन्हें ये वेट असाइन करें:
- तीन बैकएंड वीएम इंस्टेंस को कॉन्फ़िगर करें, ताकि वे एचटीटीपी रिस्पॉन्स के साथ X-Load-Balancing-Endpoint-Weight हेडर में वेट दिखा सकें. इस ट्यूटोरियल के लिए, आपको एक बैकएंड इंस्टेंस को कॉन्फ़िगर करना होगा, ताकि वह शून्य का वेट रिपोर्ट करे. दूसरे बैकएंड इंस्टेंस को कॉन्फ़िगर करना होगा, ताकि वह 100 का वेट रिपोर्ट करे. तीसरे बैकएंड इंस्टेंस को कॉन्फ़िगर करना होगा, ताकि वह 900 का वेट रिपोर्ट करे. इंस्टेंस बनाने के लिए,
gcloud compute instances create
कमांड चलाएं:
gcloud compute instances create instance-0 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet= SUBNET_NAME \ --metadata=load-balancing-weight=0,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-100 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet=SUBNET_NAME \ --metadata=load-balancing-weight=100,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-900 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet= SUBNET_NAME \ --metadata=load-balancing-weight=900,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
इंस्टेंस ग्रुप बनाना
इस ट्यूटोरियल में, आपको एक ऐसा अनमैनेज्ड इंस्टेंस ग्रुप बनाने के निर्देश दिए गए हैं जिसमें तीनों वीएम इंस्टेंस(instance-0, instance-100, and instance-900
) शामिल हों.
- इंस्टेंस ग्रुप बनाने के लिए,
gcloud compute instance-groups unmanaged create
कमांड चलाएं:
gcloud compute instance-groups unmanaged create INSTANCE_GROUP --zone=us-central1-a
gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP \ --zone=us-central1-a \ --instances=instance-0,instance-100,instance-900
बनाए जाने वाले इंस्टेंस ग्रुप के नाम से INSTANCE_GROUP
को बदलें.
एचटीटीपी हेल्थ चेक बनाना
इस ट्यूटोरियल में, एचटीटीपी हेल्थ चेक बनाने के लिए निर्देश दिए गए हैं. इससे बैकएंड वीएम के वेट के बारे में बताने वाला एचटीटीपी रिस्पॉन्स पढ़ा जा सकता है."
- एचटीटीपी हेल्थ चेक बनाने के लिए,
gcloud compute health-checks create
कमांड चलाएं:
gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --region=us-central1
HTTP_HEALTH_CHECK_NAME
को उस एचटीटीपी हेल्थ चेक के नाम से बदलें जिसे बनाना है.
बैकएंड सेवा बनाना
यहां दिए गए उदाहरण में, वेटेड लोड बैलेंसिंग का इस्तेमाल करने के लिए कॉन्फ़िगर की गई, क्षेत्रीय एक्सटर्नल बैकएंड सेवा बनाने के निर्देश दिए गए हैं.
- एचटीटीपी हेल्थ चेक के साथ एक बैकएंड सेवा बनाएं और लोकल लोड बैलेंसर की नीति को WEIGHTED_MAGLEV पर सेट करें.
- बैकएंड सेवा बनाने के लिए,
gcloud compute backend-services create
कमांड चलाएं:
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=external \ --protocol=tcp \ --region=us-central1 \ --health-checks=HTTP_HEALTH_CHECK_NAME \ --health-checks-region=us-central1 \ --locality-lb-policy=WEIGHTED_MAGLEV
BACKEND_SERVICE_NAME
की जगह, बैकएंड सेवा का नाम डालें.
- इंस्टेंस ग्रुप को बैकएंड सेवा में जोड़ें.
- इंस्टेंस ग्रुप जोड़ने के लिए,
gcloud compute backend-services add-backend
कमांड चलाएं:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=INSTANCE_GROUP \ --instance-group-zone=us-central1-a \ --region=us-central1
- लोड बैलेंसर के लिए, रीजनल एक्सटर्नल आईपी पता रिज़र्व करें.
- एक या उससे ज़्यादा आईपी पते रिज़र्व करने के लिए,
gcloud compute addresses create
कमांड चलाएं:
gcloud compute addresses create ADDRESS_NAME \ --region us-central1
बनाए जाने वाले आईपी पते के नाम के साथ ADDRESS_NAME
को बदलें. नतीजा देखने के लिए, compute addresses describe
कमांड का इस्तेमाल करें. आरक्षित किए गए स्टैटिक एक्सटर्नल आईपी पते (‘IP_ADDRESS'
) को नोट करें.
gcloud compute addresses describe ADDRESS_NAME
- रिज़र्व किए गए रीजनल एक्सटर्नल आईपी पते ‘IP_ADDRESS' का इस्तेमाल करके, फ़ॉरवर्ड करने का नियम बनाएं. फ़ॉरवर्ड करने के नियम को बैकएंड सेवा से कनेक्ट करें.
- फ़ॉरवर्ड करने का नियम बनाने के लिए,
gcloud compute forwarding-rules create
कमांड चलाएं:
gcloud compute forwarding-rules create FORWARDING_RULE \ --region=us-central1 \ --ports=80 \ --address=IP_ADDRESS \ --backend-service=BACKEND_SERVICE_NAME
- इनकी जगह पर ये वैल्यू डालें:
FORWARDING_RULE
: फ़ॉरवर्ड करने से जुड़ा नियम बनाने के लिए नाम.IP_ADDRESS:
इंस्टेंस को असाइन किया जाने वाला आईपी पता. रिज़र्व किए गए स्टैटिक बाहरी आईपी पते का इस्तेमाल करें, न कि पते के नाम का.
बैकएंड सेवा के एपीआई का इस्तेमाल करके, बैकएंड के वेट की पुष्टि करना
पुष्टि करें कि बैकएंड के वेट, एचटीटीपी हेल्थ चेक को सही तरीके से रिपोर्ट किए गए हों.
- बैकएंड सेवा से बैकएंड वेट (साथ ही, स्टेटस की जानकारी) पाने के लिए,
gcloud compute backend-services get-health
कमांड चलाएं:
gcloud compute backend-services get-health HTTP_HEALTH_CHECK_NAME \ --region=us-central1
आउटपुट इस तरह का होना चाहिए:
backend: https://www.googleapis.com/compute/projects/project-name/{project}/zones/us-central1-a/instanceGroups/{instance-group-name} status: healthStatus: - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-0 ipAddress: 10.10.0.5 port: 80 weight: '0' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-100 ipAddress: 10.10.0.6 port: 80 weight: '100' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-900 ipAddress: 10.10.0.7 port: 80 weight: '900' kind: compute#backendServiceGroupHealth