1. परिचय
लोड बैलेंसिंग ऑप्टिमाइज़ेशन के बेहतर तरीके के बारे में बताने वाले कोडलैब में आपका स्वागत है!
इस कोडलैब में, आपको ग्लोबल एक्सटर्नल ऐप्लिकेशन लोड बैलेंसर के लिए, बेहतर लोड बैलेंसिंग के विकल्पों को कॉन्फ़िगर करने का तरीका पता चलेगा. हमारा सुझाव है कि शुरू करने से पहले, क्लाउड लोड बैलेंसिंग के बारे में जानकारी देने वाला दस्तावेज़ देखें ( https://cloud.google.com/load-balancing/docs/load-balancing-overview)
पहली इमेज. ग्लोबल एक्सटर्नल ऐप्लिकेशन लोड बैलेंसर की मदद से, डेस्टिनेशन एंड पॉइंट चुनने का वर्कफ़्लो.
कोडलैब की टोपोलॉजी और इस्तेमाल के उदाहरण
दूसरी इमेज. एचटीटीपी लोड बैलेंसर रूटिंग टोपोलॉजी
इस कोड लैब में, आपको दो मैनेज किए जा रहे इंस्टेंस ग्रुप सेट अप करने होंगे. आपको एक ग्लोबल एक्सटर्नल एचटीटीपीएस लोड बैलेंसर बनाना होगा. लोड बैलेंसर, बेहतर सुविधाओं की सूची में से कई सुविधाओं का इस्तेमाल करेगा. ये सुविधाएं, Envoy पर आधारित लोड बैलेंसर के साथ काम करती हैं. डिप्लॉय होने के बाद, आपको कुछ सिम्युलेटेड लोड जनरेट करने होंगे और पुष्टि करनी होगी कि आपके सेट किए गए कॉन्फ़िगरेशन सही तरीके से काम कर रहे हैं या नहीं.
आपको इनके बारे में जानकारी मिलेगी
- अपने लोड बैलेंसर को बेहतर बनाने के लिए, ServiceLbPolicy को कॉन्फ़िगर करने का तरीका.
आपको इन चीज़ों की ज़रूरत होगी
- एक्सटर्नल एचटीटीपीएस लोड बैलेंसिंग के बारे में जानकारी. इस कोडलैब का पहला आधा हिस्सा, बेहतर ट्रैफ़िक मैनेजमेंट (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 नेटवर्क बनाना
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
VPC फ़ायरवॉल के नियम बनाना
VPC बनाने के बाद, अब आपको फ़ायरवॉल का नियम बनाना होगा. फ़ायरवॉल नियम का इस्तेमाल, सभी आईपी को http ट्रैफ़िक के लिए, पोर्ट 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
वेब सर्वर की मुख्य सुविधाओं की पुष्टि करना
हर इंस्टेंस को एक साधारण PHP स्क्रिप्ट के साथ Apache वेब-सर्वर चलाने के लिए कॉन्फ़िगर किया गया है, जो कुछ इस तरह रेंडर करता है:
पेज को यहां से दिखाया गया है: us-east1-a-mig-ww2h
यह पक्का करने के लिए कि आपके वेब सर्वर सही तरीके से काम कर रहे हैं, Compute Engine -> VM इंस्टेंस पर जाएं. पक्का करें कि आपके नए इंस्टेंस (जैसे, us-east1-a-mig-xxx) उनके इंस्टेंस ग्रुप की परिभाषाओं के मुताबिक बनाए गए हों.
अब, अपने ब्राउज़र में वेब सर्वर को वेब अनुरोध भेजें, ताकि यह पक्का किया जा सके कि वेब सर्वर चालू है. इसे शुरू होने में एक मिनट लग सकता है. Compute Engine में, VM इंस्टेंस पेज पर, अपने इंस्टेंस ग्रुप से बनाया गया कोई इंस्टेंस चुनें और उसके बाहरी (सार्वजनिक) आईपी पर क्लिक करें.
इसके अलावा, अपने ब्राउज़र में 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
बैकएंड सेवाओं में एमआईजी जोड़ना
अब जबकि हमने बैकएंड सेवाएं बना ली हैं, तो अब हमें हर बैकएंड सेवा में पहले बनाए गए मैनेज किए गए इंस्टेंस ग्रुप जोड़ने होंगे.
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
इसके बाद, आपके पास अपने बनाए गए वीएम में एसएसएच करने का विकल्प होगा. जब यह बन जाए, तो टर्मिनल लॉन्च करने और कनेक्ट करने के लिए एसएसएच पर क्लिक करें.
कनेक्ट होने के बाद, लोड जनरेट करने के लिए यह कमांड चलाएं. उस आईपी पते का इस्तेमाल करें जिसे आपने बाहरी http लोड बैलेंसर के लिए पहले से रिज़र्व किया था.
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
लोड डिस्ट्रिब्यूशन की जांच करना
अब जब सीज़ (सिस्टम पर अचानक आने वाला बहुत ज़्यादा ट्रैफ़िक) चल रहा है, तो यह देखना ज़रूरी है कि ट्रैफ़िक, मैनेज किए जा रहे दो इंस्टेंस ग्रुप में बराबर बांटा जा रहा है या नहीं.
छेड़छाड़ को रोकें
अब आपने यह साबित कर दिया है कि बेहतर ट्रैफ़िक स्प्लिटिंग की सुविधा काम कर रही है. अब यह समय है कि आप इस सुविधा को बंद कर दें. ऐसा करने के लिए, sieg-vm के एसएसएच टर्मिनल पर वापस जाएं और चारों तरफ़ से हमला करने की गतिविधि को रोकने के लिए CTRL+C दबाएं.
7. सेवा एलबी नीति कॉन्फ़िगर करें
सेवा के लिए एलबी (लोड बंटवारे) नीति बनाना
बुनियादी सेटिंग पूरी हो जाने के बाद, हम सेवा के लिए एलबी पॉलिसी बनाएंगे और बेहतर सुविधाओं को आज़माएंगे. उदाहरण के लिए, हम लोड बैलेंसिंग की कुछ बेहतर सेटिंग का इस्तेमाल करने के लिए, सेवा को कॉन्फ़िगर करेंगे. इस उदाहरण में, हम सिर्फ़ बैटरी की क्षमता अपने-आप कम होने की सुविधा का इस्तेमाल करने के लिए नीति बनाएंगे. हालांकि, अन्य सुविधाओं को आज़माने में संकोच न करें.
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. बैकएंड की परफ़ॉर्मेंस को बेहतर बनाना
अब आपकी बैकएंड सेवा पर, सर्विस पाउंड से जुड़ी नई नीति लागू की गई है. इसलिए, तकनीकी तौर पर सीधे 'साफ़ करें' पर जाया जा सकता है. हालांकि, कोडलैब के तहत हम प्रोडक्शन में कुछ और बदलाव भी करेंगे, ताकि आपको यह पता चल सके कि नई नीति कैसे काम करती है.
अपने-आप क्षमता कम करने की सुविधा, लोड बैलेंसर से बैकएंड MIG को अपने-आप हटा देगी. ऐसा तब होगा, जब काम कर रहे बैकएंड की कुल संख्या, थ्रेशोल्ड (25%) से कम हो जाएगी. इस सुविधा की जांच करने के लिए, हम us-east1-b-mig में मौजूद वीएम में एसएसएच जाएंगे और उन्हें खराब बना देंगे. 25% थ्रेशोल्ड के साथ, आपको चार वीएम में एसएसएच का इस्तेमाल करके Apache सर्वर को बंद करना होगा.
ऐसा करने के लिए, चार वीएम चुनें और टर्मिनल लॉन्च करने और कनेक्ट करने के लिए, एसएसएच पर क्लिक करके उससे एसएसएच करें. इसके बाद, यह कमांड चलाएं.
sudo apachectl stop
ऐसा होने पर, अपने-आप कपैसिटी खत्म होने की सुविधा ट्रिगर होगी. साथ ही, us-east1-b-mig को नए अनुरोध नहीं मिलेंगे.
9. पुष्टि करना कि बैटरी की क्षमता अपने-आप कम होने की सुविधा काम कर रही है या नहीं
सीज़ करने की प्रोसेस फिर से शुरू करना
नई सुविधा की पुष्टि करने के लिए, हम फिर से सीज VM का इस्तेमाल करेंगे. आइए, पिछले चरण में बनाए गए वर्चुअल मशीन (VM) में एसएसएच का इस्तेमाल करके कनेक्ट करें. जब यह बन जाए, तो टर्मिनल लॉन्च करने और कनेक्ट करने के लिए एसएसएच पर क्लिक करें.
कनेक्ट होने के बाद, लोड जनरेट करने के लिए यह कमांड चलाएं. उस आईपी पते का इस्तेमाल करें जिसे आपने बाहरी http लोड बैलेंसर के लिए पहले से रिज़र्व किया था.
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 के एसएसएच टर्मिनल पर वापस जाएं और siege को बंद करने के लिए 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. बधाई हो!
कोडलैब पूरा करने के लिए बधाई.
इसमें हमने इन विषयों के बारे में बताया
- सेवा के लोड बैलेंसर की नीति की मदद से, बाहरी ऐप्लिकेशन लोड बैलेंसर बनाना.
- अपने-आप क्षमता कम करने की सुविधा की मदद से, अपनी बैकएंड सेवा को कॉन्फ़िगर करें.
अगले चरण
- सेवा के लेवल बढ़ाने की नीति से मिलने वाली अन्य सुविधाएं आज़माएं.