1. परिचय
वेटेड लोड बैलेंसिंग का इस्तेमाल करके, एचटीटीपी हेल्थ जांच की ओर से रिपोर्ट किए गए वेट के आधार पर, लोड बैलेंसर के बैकएंड इंस्टेंस में ट्रैफ़िक बांटने के लिए, नेटवर्क लोड बैलेंसर को कॉन्फ़िगर किया जा सकता है.
वेटेड लोड बैलेंसिंग के लिए आपको ये दोनों कॉन्फ़िगर करने होंगे:
- आपको बैकएंड सेवा के लिए, लोकल लोड बैलेंसर नीति (localityLbPolicy) को WEIGHTED_MAGLEV पर सेट करना होगा.
- आपको बैकएंड सेवा को एचटीटीपी/एचटीटीपी2/एचटीटीपीएस की परफ़ॉर्मेंस की जांच के साथ कॉन्फ़िगर करना होगा. एचटीटीपी हेल्थ की जांच के रिस्पॉन्स में एक कस्टम एचटीटीपी रिस्पॉन्स हेडर फ़ील्ड X-Load-Balancing-Endpoint-weight होना ज़रूरी है, ताकि हर बैकएंड इंस्टेंस के लिए दशमलव में 0 से 1,000 तक के पूर्णांक मान वाले वेट तय किए जा सकें.
अगर वेटेड लोड बैलेंसिंग का इस्तेमाल करके, कई बैकएंड सेवा पर आधारित नेटवर्क लोड बैलेंसर के लिए, एक ही इंस्टेंस ग्रुप का इस्तेमाल बैकएंड के तौर पर किया जाता है, तो हमारा सुझाव है कि बैकएंड सेवा की हर हेल्थ जांच के लिए, एक यूनीक अनुरोध पाथ का इस्तेमाल किया जाए. ज़्यादा जानकारी के लिए, एचटीटीपी, एचटीटीपीएस, और एचटीटीपी/2 की परफ़ॉर्मेंस की जांच के लिए ज़रूरी शर्तें देखें.
एचटीटीपी हेल्थ चेक को पास करने के लिए, एचटीटीपी 200 (ठीक है) रिस्पॉन्स और बैकएंड इंस्टेंस को सही माना जाना चाहिए. ऐसी स्थितियों में, जहां सभी बैकएंड इंस्टेंस अपनी हेल्थ जांच में पास होते हैं और शून्य वेट के साथ X-Load-Balancing-Endpoint-weight देते हैं, वहां लोड बैलेंसर स्वस्थ बैकएंड के बीच नए कनेक्शन बांटता है और उन्हें बराबर अहमियत देता है. लोड बैलेंसर, खराब बैकएंड के बीच नए कनेक्शन भी शेयर कर सकता है. ज़्यादा जानकारी के लिए, ट्रैफ़िक डिस्ट्रिब्यूशन देखें.
वेटेड लोड बैलेंसिंग के उदाहरण के लिए, बैकएंड चुनना और कनेक्शन ट्रैकिंग देखें.
वेट लोड बैलेंसिंग का इस्तेमाल, इन स्थितियों में किया जा सकता है:
- अगर कुछ कनेक्शन दूसरों की तुलना में ज़्यादा डेटा प्रोसेस करते हैं या कुछ कनेक्शन दूसरों के मुकाबले ज़्यादा समय तक चलते हैं, तो हो सकता है कि बैकएंड लोड का डिस्ट्रिब्यूशन एक जैसा न हो. हर इंस्टेंस पर कम वेट दिखाने का मतलब है कि ज़्यादा लोड वाला इंस्टेंस, नए कनेक्शन का अपना हिस्सा कम कर सकता है. साथ ही, यह मौजूदा कनेक्शन को ठीक करता रहता है.
- अगर बैकएंड ओवरलोड हो गया है और ज़्यादा कनेक्शन असाइन करने पर, मौजूदा कनेक्शन टूट सकते हैं, तो ऐसे बैकएंड खुद को ज़ीरो वेट असाइन करते हैं. ज़ीरो वेट का सिग्नल देने पर, बैकएंड इंस्टेंस नए कनेक्शन की सेवा बंद कर देता है, लेकिन मौजूदा कनेक्शन को सेवा देना जारी रखता है.
- अगर कोई बैकएंड रखरखाव से पहले मौजूदा कनेक्शन को खाली कर रहा है, तो यह खुद को ज़ीरो वेट असाइन करेगा. ज़ीरो वेट सिग्नल मिलने पर, बैकएंड इंस्टेंस नए कनेक्शन की सेवा बंद कर देता है, लेकिन मौजूदा कनेक्शन को सेवा देना जारी रखता है.
आपको इनके बारे में जानकारी मिलेगी
- वेटेड लोड बैलेंसिंग का इस्तेमाल करके, एचटीटीपी हेल्थ जांच की ओर से रिपोर्ट किए गए वेट के आधार पर, लोड बैलेंसर के बैकएंड इंस्टेंस में ट्रैफ़िक को बांटने के लिए, नेटवर्क लोड बैलेंसर को कैसे कॉन्फ़िगर करें.
अपने हिसाब से एनवायरमेंट सेटअप करना
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_ID
के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. इसके अलावा, खुद भी आज़माया जा सकता है और देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद इसे बदला नहीं जा सकता और प्रोजेक्ट के कुल समय तक बना रहेगा. - आपकी जानकारी के लिए, एक तीसरी वैल्यू यानी प्रोजेक्ट नंबर है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, संसाधनों को बंद करने के लिए कि आपको बिलिंग न करनी पड़े. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या पूरा प्रोजेक्ट मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.
Cloud Shell शुरू करना
Google Cloud को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जा रहा है. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.
Google Cloud Console में जाकर, सबसे ऊपर दाईं ओर मौजूद टूलबार पर क्लाउड शेल आइकॉन पर क्लिक करें:
प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा. उसके पूरा हो जाने पर, आपको कुछ ऐसा दिखाई देगा:
इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud पर चलता है. यह नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रक्रिया को बेहतर बनाता है. इस कोडलैब (कोड बनाना सीखना) में आपका सारा काम ब्राउज़र में किया जा सकता है. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.
2. कॉन्फ़िगरेशन शुरू करें
कोडलैब के लिए एक प्रोजेक्ट होना ज़रूरी है.
इस ट्यूटोरियल में, तीन वीएम इंस्टेंस वाला एक इंस्टेंस ग्रुप बनाया गया है और हर इंस्टेंस के लिए वेट असाइन किया गया है. बैकएंड इंस्टेंस वेट की जानकारी देने के लिए, एचटीटीपी हेल्थ की जांच करें. लोकलिटी लोड बैलेंसर नीति के साथ, WEIGHTED_MAGLEV के तौर पर वेटेड नेटवर्क लोड बैलेंसर, बैकएंड सेवा पर चालू है.
शुरू करने से पहले
- बैकएंड सेवा पर आधारित एक्सटर्नल नेटवर्क लोड बैलेंसिंग की खास जानकारी लेख पढ़ें.
- Google Cloud सीएलआई इंस्टॉल करें. टूल की पूरी जानकारी पाने के लिए, gcloud सीएलआई की खास जानकारी देखें. एपीआई और gcloud सीएलआई रेफ़रंस में, लोड बैलेंसिंग से जुड़े निर्देश आपको मिल सकते हैं. अगर आपने Google Cloud सीएलआई को पहले नहीं चलाया है, तो पुष्टि करने के लिए सबसे पहले gcloud init चलाएं.
- कंप्यूट एपीआई को चालू करें.
gcloud services enable compute.googleapis.com
ध्यान दें: लोकलिटी लोड बैलेंसर नीति को कॉन्फ़िगर करने और वीएम इंस्टेंस को वेट असाइन करने के लिए, Google Cloud Console का इस्तेमाल नहीं किया जा सकता. इसके बजाय, Google Cloud सीएलआई का इस्तेमाल करें.
VPC नेटवर्क, सबनेट, और फ़ायरवॉल के नियम बनाना
VPC नेटवर्क, सबनेट, और इन्ग्रेस डेटा ट्रैफ़िक बनाने से, फ़ायरवॉल के नियमों से आपके लोड बैलेंसर के बैकएंड वीएम से कनेक्शन की अनुमति मिल जाती है.
- VPC नेटवर्क और सबनेट बनाएं. ए. VPC नेटवर्क बनाने के लिए,
gcloud compute networks create
कमांड:
चलाएं
gcloud compute networks create NETWORK_NAME --subnet-mode custom
b. इस उदाहरण में, सबनेट की मुख्य IPv4 पता रेंज 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
: बनाने के लिए VPC नेटवर्क का नाम.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