ऐडवांस लोड बैलेंसिंग ऑप्टिमाइज़ेशन के लिए कोडलैब

1. परिचय

एडवांस लोड बैलेंसिंग ऑप्टिमाइज़ेशन के कोडलैब में आपका स्वागत है!

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

c3fb1d3f027e8640.png

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

कोडलैब टोपोलॉजी और इस्तेमाल के उदाहरण

2f7368df335d3de9.png

दूसरी इमेज. एचटीटीपी लोड बैलेंसर की राउटिंग टोपोलॉजी

इस कोड लैब के दौरान, आपको मैनेज किए गए दो इंस्टेंस ग्रुप सेट अप करने होंगे. आपको ग्लोबल एक्सटर्नल एचटीटीपीएस लोड बैलेंसर बनाना होगा. लोड बैलेंसर, उन ऐडवांस सुविधाओं का इस्तेमाल करेगा जो 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. बधाई हो!

कोडलैब पूरा करने के लिए बधाई.

हमने क्या-क्या बताया

  • सर्विस एलबी नीति के साथ बाहरी ऐप्लिकेशन लोड बैलेंसर बनाना.
  • अपने बैकएंड की सेवा को, क्षमता अपने-आप कम होने की सुविधा के साथ कॉन्फ़िगर करें.

अगले चरण

  • सेवा की एलबी नीति के तहत उपलब्ध अन्य सुविधाएं आज़माएं.