1. परिचय
एडवांस लोड बैलेंसिंग ऑप्टिमाइज़ेशन के कोडलैब में आपका स्वागत है!
इस कोडलैब में, आपको ग्लोबल एक्सटर्नल ऐप्लिकेशन लोड बैलेंसर के लिए, लोड बैलेंसिंग के ऐडवांस विकल्पों को कॉन्फ़िगर करने का तरीका बताया जाएगा. शुरू करने से पहले, हमारा सुझाव है कि आप क्लाउड लोड बैलेंसिंग के बारे में दस्तावेज़ पढ़ लें ( https://cloud.google.com/load-balancing/docs/load-balancing-overview)

पहली इमेज. ग्लोबल एक्सटर्नल ऐप्लिकेशन लोड बैलेंसर की मदद से, डेस्टिनेशन एंड पॉइंट चुनने का वर्कफ़्लो.
कोडलैब टोपोलॉजी और इस्तेमाल के उदाहरण

दूसरी इमेज. एचटीटीपी लोड बैलेंसर की राउटिंग टोपोलॉजी
इस कोड लैब के दौरान, आपको मैनेज किए गए दो इंस्टेंस ग्रुप सेट अप करने होंगे. आपको ग्लोबल एक्सटर्नल एचटीटीपीएस लोड बैलेंसर बनाना होगा. लोड बैलेंसर, उन ऐडवांस सुविधाओं का इस्तेमाल करेगा जो Envoy पर आधारित लोड बैलेंसर के साथ काम करती हैं. इसे डिप्लॉय करने के बाद, कुछ लोड जनरेट करें और पुष्टि करें कि आपने जो कॉन्फ़िगरेशन सेट किए हैं वे सही तरीके से काम कर रहे हैं.
आपको क्या सीखने को मिलेगा
- लोड बैलेंसर को बेहतर बनाने के लिए, ServiceLbPolicy को कॉन्फ़िगर करने का तरीका.
आपको इन चीज़ों की ज़रूरत होगी
- External HTTPS Load Balancing के बारे में जानकारी. इस कोडलैब का पहला हिस्सा, बेहतर ट्रैफ़िक मैनेजमेंट (Envoy) की सुविधा वाले बाहरी एचटीटीपीएस एलबी कोडलैब ( https://codelabs.developers.google.com/codelabs/externalhttplb-adv) से मिलता-जुलता है. हमारा सुझाव है कि आप पहले उसे पढ़ लें.
2. शुरू करने से पहले
Cloud Shell में, पक्का करें कि आपका प्रोजेक्ट आईडी सेट अप हो
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
एपीआई चालू करना
सभी ज़रूरी सेवाएं चालू करें
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com gcloud services enable networkservices.googleapis.com
3. वीपीसी नेटवर्क बनाना
VPC नेटवर्क बनाना
Cloud Shell से
gcloud compute networks create httplbs --subnet-mode=auto
आउटपुट
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 httplbs AUTO REGIONAL
वीपीसी फ़ायरवॉल के नियम बनाना
वीपीसी बनाने के बाद, अब आपको फ़ायरवॉल का नियम बनाना होगा. फ़ायरवॉल के इस नियम का इस्तेमाल, सभी आईपी को एचटीटीपी ट्रैफ़िक के लिए पोर्ट 80 पर, टेस्ट ऐप्लिकेशन की वेबसाइट के बाहरी आईपी को ऐक्सेस करने की अनुमति देने के लिए किया जाएगा.
Cloud Shell से
gcloud compute firewall-rules create httplb-allow-http-rule \ --allow tcp:80 \ --network httplbs \ --source-ranges 0.0.0.0/0 \ --priority 700
आउटपुट
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED httplb-allow-http-rule httplbs INGRESS 700 tcp:80 False
इस कोडलैब में, हम वीएम की सेहत को बेहतर बनाने के लिए कुछ बदलाव करेंगे. इसलिए, हम एसएसएच की अनुमति देने के लिए फ़ायरवॉल के नियम भी बनाएंगे.
Cloud Shell से
gcloud compute firewall-rules create fw-allow-ssh \
--network=httplbs \
--action=allow \
--direction=ingress \
--target-tags=allow-ssh \
--rules=tcp:22
आउटपुट
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/fw-allow-ssh]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED fw-allow-ssh httplbs INGRESS 1000 tcp:22 False
4. मैनेज किए गए इंस्टेंस ग्रुप सेट अप करना
आपको मैनेज किए गए इंस्टेंस ग्रुप सेट अप करने होंगे. इनमें एचटीटीपी लोड बैलेंसर के इस्तेमाल किए गए बैकएंड रिसॉर्स के पैटर्न शामिल होते हैं. सबसे पहले, हम इंस्टेंस टेंप्लेट बनाएंगे. ये टेंप्लेट, हर इलाके के लिए बनाए जाने वाले वीएम के कॉन्फ़िगरेशन तय करते हैं. इसके बाद, हम हर इलाके में बैकएंड के लिए एक मैनेज किया गया इंस्टेंस ग्रुप बनाएंगे. यह इंस्टेंस टेंप्लेट को रेफ़रंस करेगा.
मैनेज किए गए इंस्टेंस ग्रुप, ज़ोनल या रीजनल हो सकते हैं. इस लैब के लिए, हम ज़ोनल मैनेज किए गए इंस्टेंस ग्रुप बनाएंगे.
इस सेक्शन में, आपको पहले से बनाई गई स्टार्टअप स्क्रिप्ट दिखेगी. इंस्टेंस बनाते समय इसका रेफ़रंस दिया जाएगा. यह स्टार्टअप स्क्रिप्ट, वेब सर्वर की उन सुविधाओं को इंस्टॉल और चालू करती है जिनका इस्तेमाल हम वेब ऐप्लिकेशन को सिम्युलेट करने के लिए करेंगे. इस स्क्रिप्ट को बेझिझक एक्सप्लोर करें.
इंस्टेंस टेंप्लेट बनाना
सबसे पहले, इंस्टेंस टेंप्लेट बनाएं.
Cloud Shell से
gcloud compute instance-templates create test-template \
--network=httplbs \
--tags=allow-ssh,http-server \
--image-family=debian-9 \
--image-project=debian-cloud \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
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
systemctl restart apache2'
आउटपुट
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
अब यह पुष्टि की जा सकती है कि हमारे इंस्टेंस टेंप्लेट, gcloud के इस कमांड का इस्तेमाल करके बनाए गए हैं:
Cloud Shell से
gcloud compute instance-templates list
आउटपुट
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
इंस्टेंस ग्रुप बनाना
अब हमें उन इंस्टेंस टेंप्लेट से मैनेज किया गया इंस्टेंस ग्रुप बनाना होगा जिन्हें हमने पहले बनाया था.
Cloud Shell से
gcloud compute instance-groups managed create us-east1-a-mig \ --size=1 \ --template=test-template \ --zone=us-east1-a
आउटपुट
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instanceGroupManagers/us-east1-a-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-a-mig us-east1-a zone us-east1-a-mig 0 1 test-template no
Cloud Shell से
gcloud compute instance-groups managed create us-east1-b-mig \ --size=5 \ --template=test-template \ --zone=us-east1-b
आउटपुट
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-b-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-b-mig us-east1-b zone us-east1-b-mig 0 5 test-template no
हम यह पुष्टि कर सकते हैं कि हमारे इंस्टेंस ग्रुप, gcloud के इस निर्देश का इस्तेमाल करके बनाए गए हैं:
Cloud Shell से
gcloud compute instance-groups list
आउटपुट
NAME LOCATION SCOPE NETWORK MANAGED INSTANCES us-east1-a-mig us-east1-a zone httplbs Yes 1 us-east1-b-mig us-east1-b zone httplbs Yes 5
वेब सर्वर के काम करने की पुष्टि करना
हर इंस्टेंस को Apache वेब-सर्वर चलाने के लिए कॉन्फ़िगर किया जाता है. इसमें एक सामान्य PHP स्क्रिप्ट होती है, जो इस तरह से रेंडर करती है:
इस पेज को इस सर्वर से दिखाया गया है: us-east1-a-mig-ww2h
यह पक्का करने के लिए कि आपके वेब सर्वर ठीक से काम कर रहे हैं, Compute Engine -> वीएम इंस्टेंस पर जाएं. पक्का करें कि आपके नए इंस्टेंस (जैसे, us-east1-a-mig-xxx) को उनके इंस्टेंस ग्रुप की परिभाषाओं के मुताबिक बनाया गया हो.
अब अपने ब्राउज़र में, वेब सर्वर को वेब अनुरोध भेजें. इससे यह पक्का किया जा सकेगा कि वेब सर्वर काम कर रहा है. इसे शुरू होने में एक मिनट लग सकता है. Compute Engine में मौजूद वीएम इंस्टेंस पेज पर, अपने इंस्टेंस ग्रुप से बनाया गया कोई इंस्टेंस चुनें. इसके बाद, उसके बाहरी (सार्वजनिक) आईपी पर क्लिक करें.
इसके अलावा, अपने ब्राउज़र में http://<IP_Address> पर जाएं
5. लोड बैलेंसर सेट अप करना
सेहत की जांच की सुविधा बनाना
सबसे पहले, हमें बुनियादी हेल्थ चेक बनाना होगा, ताकि यह पक्का किया जा सके कि हमारी सेवाएं ठीक से काम कर रही हैं. हम बुनियादी स्वास्थ्य जांच की सुविधा बना रहे हैं. हालांकि, इसमें कई और बेहतर सुविधाएं भी उपलब्ध हैं.
Cloud Shell से
gcloud compute health-checks create http http-basic-check \
--port 80
आउटपुट
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check]. NAME PROTOCOL http-basic-check HTTP
एक्सटर्नल आईपी पता रिज़र्व करना
इस चरण के लिए, आपको दुनिया भर में उपलब्ध एक स्टैटिक आईपी पता रिज़र्व करना होगा. इसे बाद में लोड बैलेंसर से जोड़ा जाएगा.
Cloud Shell से
gcloud compute addresses create lb-ipv4-2 \
--ip-version=IPV4 \
--global
आउटपुट
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].
पक्का करें कि आपने रिज़र्व किए गए आईपी पते को नोट कर लिया हो.
gcloud compute addresses describe lb-ipv4-2 \
--format="get(address)" \
--global
बैकएंड सेवाएं बनाना
अब हमें उन मैनेज किए गए इंस्टेंस ग्रुप के लिए एक बैकएंड सेवा बनानी होगी जिन्हें हमने पहले बनाया था.
Cloud Shell से
gcloud compute backend-services create east-backend-service \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTP \
--port-name=http \
--health-checks=http-basic-check \
--global
आउटपुट
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service]. NAME BACKENDS PROTOCOL east-backend-service HTTP
बैकएंड सेवाओं में MIG जोड़ना
बैकएंड सेवाएं बनाने के बाद, हमें उन मैनेज किए गए इंस्टेंस ग्रुप को हर बैकएंड सेवा में जोड़ना होगा जिन्हें हमने पहले बनाया था.
Cloud Shell से
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global
Cloud Shell से
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global
यह पुष्टि की जा सकती है कि बैकएंड जोड़े गए हैं या नहीं. इसके लिए, यह कमांड चलाएं.
Cloud Shell से
gcloud compute backend-services list
आउटपुट
NAME BACKENDS PROTOCOL east-backend-service us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig HTTP
यूआरएल मैप बनाना
अब हम यूआरएल मैप बनाएंगे.
gcloud compute url-maps create web-map-http \
--default-service=east-backend-service \
--global
आउटपुट
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http]. NAME DEFAULT_SERVICE web-map-http backendServices/east-backend-service
एचटीटीपी फ़्रंटएंड बनाएं
लोड बैलेंसर बनाने का आखिरी चरण, फ़्रंटएंड बनाना है. इससे, पहले से रिज़र्व किए गए आईपी पते को लोड बैलेंसर यूआरएल मैप से मैप किया जाएगा.
Cloud Shell से
gcloud compute target-http-proxies create http-lb-proxy-adv \
--url-map=web-map-http
आउटपुट
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxies/http-lb-proxy-adv]. NAME URL_MAP http-lb-proxy-adv web-map-http
इसके बाद, आपको एक ग्लोबल फ़ॉरवर्डिंग नियम बनाना होगा. इससे पहले से रिज़र्व किए गए आईपी पते को एचटीटीपी प्रॉक्सी पर मैप किया जा सकेगा.
Cloud Shell से
gcloud compute forwarding-rules create http-content-rule \
--load-balancing-scheme EXTERNAL_MANAGED \
--address=lb-ipv4-2 \
--global \
--target-http-proxy=http-lb-proxy-adv \
--ports=80
इस समय, यह पुष्टि की जा सकती है कि लोड बैलेंसर, उस आईपी पते के साथ काम कर रहा है जिसे आपने पहले नोट किया था.
6. पुष्टि करना कि लोड बैलेंसर काम कर रहा है या नहीं
यह पुष्टि करने के लिए कि लोड बैलेंसिंग की सुविधा काम कर रही है, आपको कुछ लोड जनरेट करना होगा. इसके लिए, हम लोड को सिम्युलेट करने के लिए एक नई वीएम बनाएंगे.
Siege-vm बनाएं
अब आपको siege-vm बनाना होगा, जिसका इस्तेमाल लोड जनरेट करने के लिए किया जाएगा
Cloud Shell से
gcloud compute instances create siege-vm \
--network=httplbs \
--zone=us-east1-a \
--machine-type=e2-medium \
--tags=allow-ssh,http-server \
--metadata=startup-script='sudo apt-get -y install siege'
आउटपुट
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instances/siege-vm]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS siege-vm us-central1-ir1 e2-medium 10.132.0.15 34.143.20.68 RUNNING
इसके बाद, बनाई गई वीएम में SSH किया जा सकता है. बन जाने के बाद, टर्मिनल लॉन्च करने और कनेक्ट करने के लिए, SSH पर क्लिक करें.
कनेक्ट होने के बाद, लोड जनरेट करने के लिए यहां दिया गया निर्देश चलाएं. उस आईपी पते का इस्तेमाल करें जिसे आपने पहले बाहरी एचटीटीपी लोड बैलेंसर के लिए रिज़र्व किया था.
Cloud Shell से
siege -c 20 http://$lb-ipv4-2
आउटपुट
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
लोड डिस्ट्रिब्यूशन की जांच करना
अब जब सीज चल रहा है, तो यह देखने का समय है कि ट्रैफ़िक को दोनों मैनेज किए गए इंस्टेंस ग्रुप में बराबर बांटा जा रहा है या नहीं.
Stop the Siege
अब आपने यह दिखा दिया है कि ऐडवांस ट्रैफ़िक स्प्लिटिंग की सुविधा काम कर रही है. इसलिए, अब इस सुविधा को बंद किया जा सकता है. इसके लिए, siege-vm के एसएसएच टर्मिनल पर वापस जाएं और CTRL+C दबाकर, चल रहे सीज को रोकें.
7. सर्विस एलबी की नीति कॉन्फ़िगर करना
Service LB की नीति बनाना
बुनियादी सेटिंग हो जाने के बाद, हम सेवा के लिए एलबी नीति बनाएंगे और ऐडवांस सुविधाओं को आज़माएंगे. उदाहरण के तौर पर, हम सेवा को कॉन्फ़िगर करके, लोड बैलेंसिंग की कुछ ऐडवांस सेटिंग का इस्तेमाल करेंगे. इस उदाहरण में, हम सिर्फ़ ऑटो कैपेसिटी ड्रेन की सुविधा का इस्तेमाल करने के लिए एक नीति बनाएंगे. हालांकि, अन्य सुविधाओं को आज़माया जा सकता है.
Cloud Shell से
gcloud beta network-services service-lb-policies create http-policy \
--auto-capacity-drain --location=global
नीति के सही तरीके से बनाए जाने की पुष्टि, इस gcloud कमांड से की जा सकती है:
Cloud Shell से
gcloud beta network-services service-lb-policies list --location=global
आउटपुट
NAME http-policy
बैकएंड सेवा से सर्विस एलबी की नीति अटैच करना
अब हम ऊपर दी गई आपकी मौजूदा बैकएंड सेवा से नई नीति को जोड़ देंगे.
Cloud Shell से
gcloud beta compute backend-services update east-backend-service \
--service-lb-policy=http-policy --global
8. बैकएंड की परफ़ॉर्मेंस को बेहतर बनाना
इस समय, आपकी बैकएंड सेवा पर नई सेवा एलबी नीति लागू कर दी गई है. इसलिए, सीधे तौर पर क्लीनअप पर जाया जा सकता है. हालांकि, कोडलैब के हिस्से के तौर पर, हम कुछ और प्रोडक्शन ट्विक भी करेंगे, ताकि आपको यह दिखाया जा सके कि नई नीति कैसे काम करती है.
क्षमता अपने-आप कम होने की सुविधा, लोड बैलेंसर से बैकएंड एमआईजी को अपने-आप हटा देगी. ऐसा तब होगा, जब ठीक से काम कर रहे बैकएंड की कुल संख्या, तय सीमा (25%) से कम हो जाएगी. इस सुविधा को आज़माने के लिए, हम us-east1-b-mig में मौजूद वीएम में SSH करेंगे और उन्हें अस्वस्थ बना देंगे. 25% थ्रेशोल्ड के साथ, आपको चार वीएम में एसएसएच करना होगा और Apache सर्वर को बंद करना होगा.
इसके लिए, चार वीएम चुनें और टर्मिनल लॉन्च करके कनेक्ट करने के लिए, एसएसएच पर क्लिक करके एसएसएच करें. इसके बाद, यह कमांड चलाएं.
sudo apachectl stop
इस समय, क्षमता अपने-आप कम होने की सुविधा चालू हो जाएगी. साथ ही, us-east1-b-mig को नए अनुरोध नहीं मिलेंगे.
9. पुष्टि करना कि बैटरी खत्म होने की समस्या का पता लगाने वाली सुविधा काम कर रही है या नहीं
Siege को रीस्टार्ट करें
नई सुविधा की पुष्टि करने के लिए, हम सीज वीएम का फिर से इस्तेमाल करेंगे. आइए, पिछले चरण में बनाए गए वीएम में एसएसएच करें. बन जाने के बाद, टर्मिनल लॉन्च करने और कनेक्ट करने के लिए, SSH पर क्लिक करें.
कनेक्ट होने के बाद, लोड जनरेट करने के लिए यहां दिया गया निर्देश चलाएं. उस आईपी पते का इस्तेमाल करें जिसे आपने पहले बाहरी एचटीटीपी लोड बैलेंसर के लिए रिज़र्व किया था.
Cloud Shell से
siege -c 20 http://$lb-ipv4-2
आउटपुट
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
इस समय, आपको दिखेगा कि सभी अनुरोध us-east1-a-mig को भेजे गए हैं.
Stop the Siege
अब आपने यह दिखा दिया है कि ऐडवांस ट्रैफ़िक स्प्लिटिंग की सुविधा काम कर रही है. इसलिए, अब इस सुविधा को बंद किया जा सकता है. इसके लिए, siege-vm के एसएसएच टर्मिनल पर वापस जाएं और CTRL+C दबाकर, चल रहे सीज को रोकें.
10. क्लीनअप करने का तरीका
अब जब लैब एनवायरमेंट का काम पूरा हो गया है, तो इसे बंद करने का समय आ गया है. टेस्ट एनवायरमेंट को मिटाने के लिए, कृपया ये कमांड चलाएं.
Cloud Shell से
gcloud compute instances delete siege-vm --zone=us-east1-a gcloud compute forwarding-rules delete http-content-rule --global gcloud compute target-http-proxies delete http-lb-proxy-adv gcloud compute url-maps delete web-map-http gcloud compute backend-services delete east-backend-service --global gcloud compute addresses delete lb-ipv4-2 --global gcloud compute health-checks delete http-basic-check gcloud beta network-services service-lb-policies delete http-policy --location=global gcloud compute instance-groups managed delete us-east1-a-mig --zone=us-east1-a gcloud compute instance-groups managed delete us-east1-b-mig --zone=us-east1-b gcloud compute instance-templates delete test-template gcloud compute firewall-rules delete httplb-allow-http-rule gcloud compute firewall-rules delete fw-allow-ssh gcloud compute networks delete httplbs
11. बधाई हो!
कोडलैब पूरा करने के लिए बधाई.
हमने क्या-क्या बताया
- सर्विस एलबी नीति के साथ बाहरी ऐप्लिकेशन लोड बैलेंसर बनाना.
- अपने बैकएंड की सेवा को, क्षमता अपने-आप कम होने की सुविधा के साथ कॉन्फ़िगर करें.
अगले चरण
- सेवा की एलबी नीति के तहत उपलब्ध अन्य सुविधाएं आज़माएं.