ऐडवांस ट्रैफ़िक मैनेजमेंट (एनवाय) कोडलैब के साथ एक्सटर्नल एचटीटीपी एलबी

1. परिचय

बेहतर ट्रैफ़िक मैनेजमेंट (Envoy) की सुविधा वाले एक्सटर्नल एचटीटीपीएस एलबी के कोडलैब में आपका स्वागत है!

बेहतर ट्रैफ़िक मैनेजमेंट की सुविधा वाले एचटीटीपीएस या एचटीटीपी एक्सटर्नल लोड बैलेंसर के नए वर्शन में, हमारे मौजूदा क्लासिक ग्लोबल एक्सटर्नल एचटीटीपीएस या एचटीटीपी लोड बैलेंसर की सभी सुविधाएं शामिल हैं. हालांकि, इसमें बेहतर ट्रैफ़िक मैनेजमेंट की सुविधाओं की सूची लगातार बढ़ती जा रही है. इनमें से कुछ सुविधाएं, हमारे लोड बैलेंसर के लिए नई हैं. वहीं, कुछ सुविधाएं मौजूदा सुविधाओं को बेहतर बनाती हैं. इन क्षमताओं की आंशिक सूची में ये शामिल हैं:

  • वज़न के हिसाब से ट्रैफ़िक को बांटना
  • स्क्रीन शेयर करने की सुविधा का अनुरोध करना
  • आउटलायर डिटेक्शन
  • बार-बार अनुरोध करने की कोशिशें
  • गड़बड़ी डालना
  • बैकएंड सेशन अफ़िनिटी के अन्य विकल्प
  • हेडर में बदलाव करने के अन्य विकल्प
  • क्रॉस-ऑरिजिन रिसॉर्स शेयरिंग (सीओआरएस)
  • लोड बैलेंसिंग के नए एल्गोरिदम

आपको क्या सीखने को मिलेगा

  • मैनेज किए गए इंस्टेंस ग्रुप और उससे जुड़े वीपीसी और फ़ायरवॉल के नियमों को सेट अप करने का तरीका
  • नए लोड बैलेंसर की ट्रैफ़िक मैनेजमेंट से जुड़ी बेहतर सुविधाओं का इस्तेमाल करने का तरीका
  • यह पुष्टि करने का तरीका कि ट्रैफ़िक मैनेजमेंट की बेहतर सुविधाएं, उम्मीद के मुताबिक काम कर रही हैं.

आपको इन चीज़ों की ज़रूरत होगी

  • नेटवर्किंग की बुनियादी जानकारी और एचटीटीपी के बारे में जानकारी
  • Unix/Linux कमांड लाइन की बुनियादी जानकारी

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

dd8bd5e8e1341878.png

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

इस कोड लैब के दौरान, मैनेज किए गए तीन इंस्टेंस ग्रुप सेट अप किए जाएंगे. इनमें से एक ग्रुप ईस्ट, एक वेस्ट, और एक सेंट्रल में होगा. आपको एक ग्लोबल एक्सटर्नल एचटीटीपीएस लोड बैलेंसर बनाना होगा. लोड बैलेंसर, उन ऐडवांस सुविधाओं का इस्तेमाल करेगा जो Envoy पर आधारित लोड बैलेंसर के साथ काम करती हैं. इसे डिप्लॉय करने के बाद, कुछ लोड जनरेट करें और पुष्टि करें कि आपने जो कॉन्फ़िगरेशन सेट किए हैं वे सही तरीके से काम कर रहे हैं.

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेट अप करना

  1. Google Cloud Console में साइन इन करें. इसके बाद, नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको अपने प्रोजेक्ट आईडी (आम तौर पर PROJECT_ID के तौर पर पहचाना जाता है) का रेफ़रंस देना होगा. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक बना रहता है.
  • आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ पढ़ें.
  1. इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा समय नहीं लगेगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, बनाए गए संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त में आज़माने वाले प्रोग्राम के लिए ज़रूरी शर्तें पूरी करते हैं.

Cloud Shell शुरू करें

Google Cloud को अपने लैपटॉप से रिमोटली ऐक्सेस किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जाएगा. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

Google Cloud Console में, सबसे ऊपर दाएं कोने में मौजूद टूलबार पर, Cloud Shell आइकॉन पर क्लिक करें:

55efc1aaa7a4d3ad.png

इसे चालू करने और एनवायरमेंट से कनेक्ट करने में सिर्फ़ कुछ सेकंड लगेंगे. यह प्रोसेस पूरी होने के बाद, आपको कुछ ऐसा दिखेगा:

7ffe5cbb04455448.png

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है. साथ ही, Google Cloud पर काम करता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में मौजूद सभी टास्क, ब्राउज़र में किए जा सकते हैं. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.

शुरू करने से पहले

Cloud Shell में, पक्का करें कि आपका प्रोजेक्ट आईडी सेट अप हो

gcloud config list project

gcloud config set project [YOUR-PROJECT-NAME]

PROJECT_ID=[YOUR-PROJECT-NAME]

echo $PROJECT_ID

एपीआई चालू करना

सभी ज़रूरी सेवाएं चालू करें

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com

3. वीपीसी नेटवर्क बनाना

वीपीसी नेटवर्क बनाना

Cloud Shell से

gcloud compute networks create httplbs --subnet-mode=auto

आउटपुट

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs].
NAME: httplbs
SUBNET_MODE: AUTO
BGP_ROUTING_MODE: REGIONAL
IPV4_RANGE:
GATEWAY_IPV4:

वीपीसी फ़ायरवॉल के नियम बनाना

VPC बनाने के बाद, अब फ़ायरवॉल के नियम बनाए जाएंगे. फ़ायरवॉल के इस नियम का इस्तेमाल, सभी आईपी को एचटीटीपी ट्रैफ़िक के लिए पोर्ट 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: httplb-allow-http-rule
NETWORK: httplbs
DIRECTION: INGRESS
PRIORITY: 700
ALLOW: tcp:80
DENY:
DISABLED: False

4. मैनेज किए गए इंस्टेंस ग्रुप सेट अप करना

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

मैनेज किए गए इंस्टेंस ग्रुप, ज़ोनल या रीजनल हो सकते हैं. इस लैब के लिए, हम तीन रीजनल मैनेज्ड इंस्टेंस ग्रुप बनाएंगे. इनमें से एक us-east1, दूसरा us-west1, और तीसरा us-central1 में होगा.

इस सेक्शन में, आपको पहले से बनाई गई स्टार्टअप स्क्रिप्ट दिखेगी. इंस्टेंस बनाते समय इसका रेफ़रंस दिया जाएगा. यह स्टार्टअप स्क्रिप्ट, वेब सर्वर की उन सुविधाओं को इंस्टॉल और चालू करती है जिनका इस्तेमाल हम वेब ऐप्लिकेशन को सिम्युलेट करने के लिए करेंगे. इस स्क्रिप्ट को बेझिझक एक्सप्लोर करें.

पूर्वी, पश्चिमी, और मध्य क्षेत्र के इंस्टेंस टेंप्लेट बनाना

पहला चरण, us-east-1 इंस्टेंस टेंप्लेट बनाना है.

Cloud Shell से

gcloud compute instance-templates create us-east1-template \
   --region=us-east1 \
   --network=httplbs \
   --tags=http-server, \
   --image-family=debian-12 \
   --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'

आउटपुट

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/us-east1-template].
NAME: us-east1-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2021-11-11T11:02:37.511-08:00

अगला चरण, us-west-1 इंस्टेंस टेंप्लेट बनाना है.

Cloud Shell से

gcloud compute instance-templates create us-west1-template \
   --region=us-west1 \
   --network=httplbs \
   --tags=http-server, \
   --image-family=debian-12 \
   --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'

आउटपुट

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/us-west1-template].
NAME: us-west1-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2021-11-11T11:03:08.577-08:00

अगला चरण, us-central-1 इंस्टेंस टेंप्लेट बनाना है.

Cloud Shell से

gcloud compute instance-templates create us-central1-template \
   --region=us-central1 \
   --network=httplbs \
   --tags=http-server, \
   --image-family=debian-12 \
   --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'

आउटपुट

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/us-central1-template].
NAME: us-central1-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2021-11-11T11:03:44.179-08:00

अब यह पुष्टि की जा सकती है कि हमारे इंस्टेंस टेंप्लेट, gcloud के इस कमांड का इस्तेमाल करके बनाए गए हैं:

Cloud Shell से

gcloud compute instance-templates list

आउटपुट

NAME                  MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
us-central1-template   n1-standard-1         2021-11-09T09:25:37.263-08:00
us-east1-template      n1-standard-1         2021-11-09T09:24:35.275-08:00
us-west1-template      n1-standard-1         2021-11-09T09:25:08.016-08:00

पूर्वी, पश्चिमी, और मध्य क्षेत्र के मैनेज किए गए इंस्टेंस ग्रुप बनाना

अब हमें उन इंस्टेंस टेंप्लेट से मैनेज किया गया इंस्टेंस ग्रुप बनाना होगा जिन्हें हमने पहले बनाया था.

Cloud Shell से

gcloud compute instance-groups managed create us-east1-mig \
--base-instance-name=us-east1-mig \
--size=1 \
--template=us-east1-template \
--zone=us-east1-b 

आउटपुट

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-mig].
NAME: us-east1-mig
LOCATION: us-east1-b
SCOPE: zone
BASE_INSTANCE_NAME: us-east1-mig
SIZE: 0
TARGET_SIZE: 1
INSTANCE_TEMPLATE: us-east1-template
AUTOSCALED: no

Cloud Shell से

gcloud compute instance-groups managed create us-west1-mig \
--base-instance-name=us-west1-mig \
--size=1 \
--template=us-west1-template \
--zone=us-west1-a  

आउटपुट

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroupManagers/us-west1-mig].
NAME: us-west1-mig
LOCATION: us-west1-a
SCOPE: zone
BASE_INSTANCE_NAME: us-west1-mig
SIZE: 0
TARGET_SIZE: 1
INSTANCE_TEMPLATE: us-west1-template
AUTOSCALED: no

Cloud Shell से

gcloud compute instance-groups managed create us-central1-mig \
--base-instance-name=us-central1-mig \
--size=1 \
--template=us-central1-template \
--zone=us-central1-a 

आउटपुट

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-central1-a/instanceGroupManagers/us-central1-mig].
NAME: us-central1-mig
LOCATION: us-central1-a
SCOPE: zone
BASE_INSTANCE_NAME: us-central1-mig
SIZE: 0
TARGET_SIZE: 1
INSTANCE_TEMPLATE: us-central1-template
AUTOSCALED: no

हम यह पुष्टि कर सकते हैं कि हमारे इंस्टेंस ग्रुप, gcloud के इस निर्देश का इस्तेमाल करके बनाए गए हैं:

Cloud Shell से

gcloud compute instance-groups list

आउटपुट

NAME                  LOCATION      SCOPE   NETWORK         MANAGED INSTANCES
us-central1-mig       us-central1   zone    httplbs          Yes      1
us-west1-mig          us-west1      zone    httplbs          Yes      1
us-east1-mig          us-east1      zone    httplbs          Yes      1

वेब सर्वर के काम करने की पुष्टि करना

हर इंस्टेंस को, Apache वेब-सर्वर चलाने के लिए कॉन्फ़िगर किया जाता है. इसमें एक सामान्य PHP स्क्रिप्ट होती है, जो यह रेंडर करती है:

c87ca81d3125ac61.png

यह पक्का करने के लिए कि आपके वेब सर्वर ठीक से काम कर रहे हैं, Compute Engine -> वीएम इंस्टेंस पर जाएं. पक्का करें कि आपके नए इंस्टेंस (जैसे, us-east1-mig-xxx) को उनके इंस्टेंस ग्रुप की परिभाषाओं के मुताबिक बनाया गया हो.

अब अपने ब्राउज़र में, वेब सर्वर को वेब अनुरोध भेजें. इससे यह पक्का किया जा सकेगा कि वेब सर्वर काम कर रहा है. इसे शुरू होने में एक मिनट लग सकता है. Compute Engine में जाकर, वीएम इंस्टेंस पेज पर जाएं. इसके बाद, अपने इंस्टेंस ग्रुप से बनाए गए किसी इंस्टेंस को चुनें और उसके बाहरी (सार्वजनिक) आईपी पते पर क्लिक करें.

इसके अलावा, अपने ब्राउज़र में http://<IP_Address> पर जाएं

5. लोड बैलेंसर सेट अप करना

सेहत की जाँच की सुविधा बनाना

सबसे पहले, हमें बुनियादी हेल्थ चेक बनाना होगा, ताकि यह पक्का किया जा सके कि हमारी सेवाएं सही तरीके से काम कर रही हैं. हम बुनियादी स्वास्थ्य जांच की सुविधा बना रहे हैं. हालांकि, इसमें कई और बेहतर सुविधाएं भी उपलब्ध हैं.

Cloud Shell से

gcloud compute health-checks create http http-basic-check \
    --port 80

एक्सटर्नल आईपी पता रिज़र्व करना

इस चरण के लिए, आपको दुनिया भर में उपलब्ध एक स्टैटिक आईपी पता रिज़र्व करना होगा. इसे बाद में लोड बैलेंसर से जोड़ा जाएगा.

Cloud Shell से

gcloud compute addresses create lb-ipv4-2 \
    --ip-version=IPV4 \
    --global

पक्का करें कि आपने रिज़र्व किए गए आईपी पते को नोट कर लिया हो.

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

वेस्ट मैनेज किए गए इंस्टेंस ग्रुप के लिए बैकएंड सेवा बनाई जा रही है.

Cloud Shell से

gcloud compute backend-services create west-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

सेंट्रल मैनेज किए गए इंस्टेंस ग्रुप के लिए, बैकएंड सेवा बनाना.

Cloud Shell से

gcloud compute backend-services create central-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

बैकएंड सेवाओं में एमआईजी जोड़ना

अब हमने हर ऐप्लिकेशन क्लस्टर के लिए, बैकएंड सेवाएं बना ली हैं. इसलिए, अब हमें उन मैनेज किए गए इंस्टेंस ग्रुप को हर बैकएंड सेवा में जोड़ना होगा जिन्हें हमने पहले बनाया था.

बैकएंड सेवा में East MIG जोड़ें.

Cloud Shell से

gcloud compute backend-services add-backend east-backend-service \
    --balancing-mode='UTILIZATION' \
    --instance-group=us-east1-mig \
    --instance-group-zone=us-east1-b \
    --global

बैकएंड सेवा में West MIG जोड़ें.

Cloud Shell से

gcloud compute backend-services add-backend west-backend-service \
    --balancing-mode='UTILIZATION' \
    --instance-group=us-west1-mig \
    --instance-group-zone=us-west1-a \
    --global

बैकएंड सेवा में सेंट्रल एमआईजी जोड़ें.

Cloud Shell से

gcloud compute backend-services add-backend central-backend-service \
    --balancing-mode='UTILIZATION' \
    --instance-group=us-central1-mig \
    --instance-group-zone=us-central1-a \
    --global

यूआरएल मैप बनाना

यूआरएल मैप में, इस लैब के लिए ट्रैफ़िक मैनेज करने की ऐडवांस सुविधाएं उपलब्ध होंगी. हमें एक .yaml फ़ाइल बनानी होगी, जिसमें कॉन्फ़िगरेशन शामिल होगा. हमने .yaml फ़ाइल में /roundrobbin पर प्रीफ़िक्स मैच बनाया है. इसलिए, इन कॉन्फ़िगरेशन का असर सिर्फ़ /roundrobbin से मैच करने वाले ट्रैफ़िक पर पड़ेगा. हमने यह तय किया है कि 50% ट्रैफ़िक, east-backend-service पर और 50% ट्रैफ़िक, west-backend-service पर जाना चाहिए. हमने रिस्पॉन्स हेडर वैल्यू:{test} को भी जोड़ा है. यह सभी रिस्पॉन्स में मौजूद होगी. आखिर में, हमने यह भी जोड़ा है कि सभी ट्रैफ़िक को central-backend-service पर मिरर किया जाना चाहिए. ट्रैफ़िक को डुप्लीकेट किया जाता है और यहां सिर्फ़ टेस्टिंग के लिए भेजा जाता है.

उदाहरण को अपनी मशीन पर .yaml फ़ाइल के तौर पर सेव करें.

defaultService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/east-backend-service
kind: compute #urlMap
name: web-map-http
hostRules:
- hosts:
  - '*'
  pathMatcher: matcher1
pathMatchers:
- defaultService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/east-backend-service
  name: matcher1
  routeRules:
  - matchRules:
    - prefixMatch: /roundrobbin
    priority: 2
    headerAction:
        responseHeadersToAdd:
          - headerName: test
            headerValue: value
            replace: True
    routeAction:
        weightedBackendServices:
        - backendService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/east-backend-service
          weight: 50
        - backendService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/west-backend-service
          weight: 50
        retryPolicy:
            retryConditions: ['502', '504']
            numRetries: 3
            perTryTimeout:
                seconds: 1
                nanos: 50
        requestMirrorPolicy:
          backendService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/central-backend-service

अपने डिवाइस से दस्तावेज़ इंपोर्ट करके, यूआरएल मैप बनाएं. ध्यान दें कि .yaml फ़ाइल को सेव करने की जगह के हिसाब से, सोर्स पाथ अलग-अलग होगा.

Cloud Shell से

gcloud compute url-maps import web-map-http \
   --source /Users/[USERNAME]/Documents/Codelab/lbconfig.yaml \
   --global

एचटीटीपी फ़्रंटएंड बनाएं

लोड बैलेंसर बनाने का आखिरी चरण, फ़्रंटएंड बनाना है. इससे, पहले से रिज़र्व किए गए आईपी पते को लोड बैलेंसर के उस यूआरएल मैप से मैप किया जाएगा जिसे आपने बनाया है.

Cloud Shell से

gcloud compute target-http-proxies create http-lb-proxy-adv \
    --url-map=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. पुष्टि करना कि ट्रैफ़िक से जुड़ी ऐडवांस सुविधाएं काम कर रही हैं

यह पुष्टि करने के लिए कि ट्रैफ़िक स्प्लिट करने की सुविधा काम कर रही है, आपको कुछ लोड जनरेट करना होगा. इसके लिए, हम लोड को सिम्युलेट करने के लिए एक नई वीएम बनाएंगे.

एसएसएच की अनुमति देने वाला फ़ायरवॉल नियम बनाना

जिस वीएम से हम ट्रैफ़िक जनरेट करेंगे उसमें एसएसएच करने के लिए, आपको सबसे पहले फ़ायरवॉल का एक नियम बनाना होगा. इससे वीएम को एसएसएच ट्रैफ़िक की अनुमति मिलेगी.

Cloud Shell से

gcloud compute firewall-rules create fw-allow-ssh \
    --network=httplbs \
    --action=allow \
    --direction=ingress \
    --target-tags=allow-ssh \
    --rules=tcp:22

आउटपुट

NAME          NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
fw-allow-ssh  httplbs  INGRESS    1000      tcp:22        False

Siege-vm बनाएं

अब आपको siege-vm बनाना होगा. इसका इस्तेमाल लोड जनरेट करने के लिए किया जाएगा

Cloud Shell से

gcloud compute instances create siege-vm \
    --network=httplbs \
    --zone=us-east4-c \
    --machine-type=e2-medium \
    --tags=allow-ssh,http-server \
    --metadata=startup-script='sudo apt-get -y install siege'

आउटपुट

NAME     ZONE        MACHINE_TYPE INTERNAL_IP  EXTERNAL_IP    STATUS
siege-vm us-east4-c  e2-medium    10.150.0.3   34.85.218.119  RUNNING

इसके बाद, बनाई गई वीएम में SSH किया जा सकता है. बन जाने के बाद, टर्मिनल लॉन्च करने और कनेक्ट करने के लिए SSH पर क्लिक करें.

कनेक्ट होने के बाद, लोड जनरेट करने के लिए यहां दिया गया निर्देश चलाएं. उस आईपी पते का इस्तेमाल करें जिसे आपने पहले बाहरी एचटीटीपी लोड बैलेंसर के लिए रिज़र्व किया था.

Cloud Shell से

siege -c 250 http://[$lb-ipv4-2]/roundrobbin

आउटपुट

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file
[alert] Zip encoding disabled; siege requires zlib support to enable it: No such file or directory
** SIEGE 4.0.2
** Preparing 250 concurrent users for battle.
The server is now under siege...

लोड डिस्ट्रिब्यूशन की जांच करना

अब जब Siege चल रहा है, तो यह जांच करने का समय है कि ट्रैफ़िक को मैनेज किए गए ईस्ट और वेस्ट इंस्टेंस ग्रुप के बीच बराबर बांटा जा रहा है या नहीं. इसके अलावा, यह भी जांच की जा सकती है कि ट्रैफ़िक मिररिंग की सुविधा काम कर रही है या नहीं और ट्रैफ़िक को मैनेज किए गए सेंट्रल इंस्टेंस ग्रुप को भेजा जा रहा है या नहीं.

Cloud Console में, नेविगेशन मेन्यू पर जाकर, नेटवर्क सेवाएं > लोड बैलेंसिंग पर क्लिक करें. load balancer web-map-http को चुनें. 'मॉनिटरिंग' टैब पर जाएं. इसके बाद, आपको नीचे दिया गया चार्ट दिखेगा.

f4d6803db44be253.png

आपको इस एमआईजी में रीयल टाइम में ट्रैफ़िक स्प्लिट होता हुआ दिखेगा. आपने राउंड रॉबिन के हिसाब से 50/50 का बंटवारा कॉन्फ़िगर किया है. इसलिए, ट्रैफ़िक को बराबर बांटा गया है.

यह देखने के लिए कि आपने जो ट्रैफ़िक मिररिंग नीति बनाई है वह काम कर रही है, आपको मैनेज किए गए सेंट्रल-बैकएंड-सर्विस इंस्टेंस ग्रुप के इस्तेमाल की जांच करनी होगी. इसके लिए, Compute, Compute Engine, इंस्टेंस ग्रुप पर जाएं. इसके बाद, us-central1-mig चुनें. इसके बाद, मॉनिटरिंग टैब पर जाएं.

cf25e44d511529e7.png

आपको चार्ट में यह जानकारी दिखेगी कि ट्रैफ़िक को इस मैनेज किए गए इंस्टेंस ग्रुप में मिरर किया गया है.

Stop the Siege

आपने यह दिखा दिया है कि ऐडवांस ट्रैफ़िक स्प्लिटिंग की सुविधा काम कर रही है. अब इस सुविधा को बंद करने का समय आ गया है. इसके लिए, siege-vm के एसएसएच टर्मिनल पर वापस जाएं और CTRL+C दबाकर, चल रहे सीज को रोकें.

भेजे जा रहे रिस्पॉन्स हेडर की पुष्टि करना

डेटा को हटाने से पहले, यह तुरंत पुष्टि की जा सकती है कि एचटीटीपी लोड बैलेंसर, सही रिस्पॉन्स हेडर भेज रहा है. आपने इसे कॉन्टेंट की वैल्यू के साथ हेडर टेस्ट भेजने के लिए कॉन्फ़िगर किया था. क्लाउड शेल से कर्ल कमांड चलाने पर, आपको उम्मीद के मुताबिक जवाब मिलेगा.

Cloud Shell से

curl -svo /dev/null http://lb-ipv4-2/roundrobbin

आउटपुट

*   Trying lb-ipv4-2..
* TCP_NODELAY set
* Connected to  lb-ipv4-2 ( lb-ipv4-2) port 80 (#0)
> GET /roundrobbin HTTP/1.1
> Host:  lb-ipv4-2
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 404 Not Found
< date: Wed, 10 Nov 2021 17:05:27 GMT
< server: envoy
< Content-Length: 273
< content-type: text/html; charset=iso-8859-1
< via: 1.1 google
< test: value
<
{ [273 bytes data]
* Connection #0 to host 34.149.2.26 left intact
* Closing connection 0

7. लैब में मौजूद डेटा हटाना

अब जब हमने लैब एनवायरमेंट का इस्तेमाल कर लिया है, तो इसे बंद करने का समय आ गया है. टेस्ट एनवायरमेंट को मिटाने के लिए, कृपया ये कमांड चलाएं.

Cloud Shell से

gcloud compute instances delete siege-vm --zone=us-east4-c

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 backend-services delete west-backend-service --global
gcloud compute backend-services delete central-backend-service --global

gcloud compute addresses delete lb-ipv4-2 --global
gcloud compute health-checks delete http-basic-check 

gcloud compute instance-groups managed delete us-east1-mig --zone us-east1-b
gcloud compute instance-groups managed delete us-west1-mig --zone us-west1-a
gcloud compute instance-groups managed delete us-central1-mig --zone us-central1-a

gcloud compute instance-templates delete "us-east1-template" 
gcloud compute instance-templates delete "us-west1-template" 
gcloud compute instance-templates delete "us-central1-template" 

gcloud compute firewall-rules delete httplb-allow-http-rule
gcloud compute firewall-rules delete fw-allow-ssh

gcloud compute networks delete httplbs 

8. बधाई हो!

आपने बेहतर ट्रैफ़िक मैनेजमेंट (Envoy) की सुविधा वाले एक्सटर्नल एचटीटीपीएस लोड बैलेंसर का कोडलैब पूरा कर लिया है!

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

  • मैनेज किए गए इंस्टेंस ग्रुप और उससे जुड़े वीपीसी और फ़ायरवॉल के नियमों को सेट अप करने का तरीका
  • नए लोड बैलेंसर की ट्रैफ़िक मैनेजमेंट से जुड़ी बेहतर सुविधाओं का इस्तेमाल करने का तरीका
  • यह पुष्टि करने का तरीका कि ट्रैफ़िक मैनेजमेंट की बेहतर सुविधाएं, उम्मीद के मुताबिक काम कर रही हैं.

अगले चरण

  • राउटिंग की कुछ अन्य बेहतर सुविधाओं का इस्तेमाल करें. जैसे, यूआरएल फिर से लिखना, सीओआरएस हेडर जोड़ना वगैरह ( लिंक)