इंटरनल टीसीपी/यूडीपी लोड बैलेंसर के लिए, Cloud DNS रूटिंग नीतियों और हेल्थ चेक का इस्तेमाल करके एक से ज़्यादा इलाकों का फ़ेलओवर

1. परिचय

पिछला अपडेट: 22-09-2022

डीएनएस राउटिंग की नीति क्या होती है

Cloud DNS की राउटिंग नीतियां, उपयोगकर्ताओं को डीएनएस आधारित ट्रैफ़िक स्टीयरिंग को कॉन्फ़िगर करने की सुविधा देती हैं. यह सुविधा, वज़न, भौगोलिक जगह या हेल्थ चेक जैसे कुछ खास मानदंड पर निर्भर करती है.

Cloud DNS, राउटिंग की इन नीतियों के साथ काम करता है:

  • वेटेड राउंड रॉबिन रूटिंग नीति
  • जियोलोकेशन के हिसाब से कॉल रूट करने की नीति
  • जियोफ़ेंसिंग के आधार पर रूटिंग की नीति
  • फ़ेलओवर रूटिंग की नीति

इस लैब में, फ़ेलओवर राउटिंग नीति को कॉन्फ़िगर और टेस्ट किया जाएगा.

फ़ेलओवर रूटिंग की नीति

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

सेहत से जुड़े आकलन

डीएनएस राउटिंग की नीति, नेटिव इंटरनल लोड बैलेंसर की यूनीफ़ाइड हेल्थ चेक(यूएचसी) पर निर्भर करेगी. अगर 20% (या इससे ज़्यादा) बैकएंड सही तरीके से काम कर रहे हैं, तो इंटरनल लोड बैलेंसर को सही माना जाता है. इंटरनल टीसीपी/यूडीपी और इंटरनल एचटीटीपीएस या एचटीटीपी लोड बैलेंसर के लिए, हेल्थ चेक अलग-अलग जानकारी देते हैं. इंटरनल एचटीटीपी या एचटीटीपीएस लोड बैलेंसर के लिए, यूएचसी सभी Envoy प्रॉक्सी की सेहत की स्थिति के बारे में जानकारी देता है. हालांकि, इंटरनल टीसीपी/यूडीपी लोड बैलेंसर के लिए, Cloud DNS को अलग-अलग बैकएंड इंस्टेंस से सीधे तौर पर सेहत की स्थिति के बारे में सिग्नल मिलते हैं. सेहत की जांच के बारे में जानकारी यहां देखी जा सकती है .

आपको क्या बनाने को मिलेगा

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

चालू संसाधन -

  • REGION_1 में L4 इंटरनल लोड बैलेंसर
  • REGION_1 में Apache वेब सर्वर चलाने वाली वीएम

बैकअप के संसाधन -

  • REGION_2 में L4 इंटरनल लोड बैलेंसर
  • REGION_2 में Apache वेब सर्वर चलाने वाली वीएम

सेट अप करने का तरीका यहां दिया गया है -

d0a91d3d3698f544.png

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

  • फ़ेलओवर राउटिंग नीति बनाने का तरीका
  • डीएनएस फ़ेलओवर ट्रिगर करना
  • बैकअप सेट पर ट्रैफ़िक को धीरे-धीरे कैसे भेजा जाता है

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

  • डीएनएस की बुनियादी जानकारी
  • Google Compute Engine की बुनियादी जानकारी
  • लेयर 4 इंटरनल लोड बैलेंसर की बुनियादी जानकारी

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.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 पर काम करता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में मौजूद सभी टास्क, ब्राउज़र में किए जा सकते हैं. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.

3. Google Cloud SDK का वर्शन

यह लेख लिखते समय, 401.0.0, Google Cloud SDK का सबसे नया वर्शन है. इस लैब में मौजूद सभी कमांड को Google Cloud SDK के नए वर्शन का इस्तेमाल करके टेस्ट किया गया है. आगे बढ़ने से पहले, कृपया पक्का करें कि Cloud Shell में एसडीके का नया वर्शन इस्तेमाल किया जा रहा हो.

एसडीके टूल का वर्शन देखना

एसडीके टूल का वर्शन देखने के लिए, gcloud version कमांड का इस्तेमाल करें. Cloud Shell में ये कमांड चलाएं

Command

gcloud version | grep "Google Cloud SDK"

आउटपुट का उदाहरण

Google Cloud SDK 401.0.0

अगले चरण

  1. अगर एसडीके टूल का वर्शन 401.0.0 या इसके बाद का है, तो अगले सेक्शन पर जाएं.
  2. अगर एसडीके का वर्शन 401.0.0 से कम है, तो एसडीके को अपडेट करने के लिए यहां दी गई कमांड चलाएं.

ज़रूरी नहीं है

sudo apt-get update && sudo apt-get install google-cloud-sdk

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

ऊपर बताए गए आर्किटेक्चर को डिप्लॉय करने से पहले, आइए यह पक्का कर लें कि Cloud Shell को सही तरीके से कॉन्फ़िगर किया गया हो और सभी ज़रूरी एपीआई चालू हों.

प्रोजेक्ट आईडी सेट अप करना

Cloud Shell में, पक्का करें कि आपका प्रोजेक्ट आईडी सेट अप हो. अगर आपका Cloud Shell प्रॉम्प्ट, यहां दिए गए आउटपुट की तरह दिखता है और आपको प्रोजेक्ट आईडी नहीं बदलना है, तो अगले चरण (एनवायरमेंट वैरिएबल सेट करना) पर जाएं.

USER@cloudshell:~ (PROJECT_ID)$

अगर आपको अब भी प्रोजेक्ट आईडी बदलना है, तो यहां दिया गया निर्देश इस्तेमाल करें. इससे Cloud Shell प्रॉम्प्ट, (PROJECT_ID) से बदलकर (YOUR-PROJECT-ID) हो जाएगा

ज़रूरी नहीं है

gcloud config set project [YOUR-PROJECT-ID]

आउटपुट का उदाहरण

Updated property [core/project].
USER@cloudshell:~ (YOUR-PROJECT-ID)$

एनवायरमेंट वैरिएबल सेट करना

एनवायरमेंट वैरिएबल सेट करना

हम एनवायरमेंट वैरिएबल सेट करने के लिए, export कमांड का इस्तेमाल करेंगे. Cloud Shell में ये कमांड चलाएं

कमांड

export REGION_1=us-west1
export REGION_1_ZONE=us-west1-a
export REGION_2=us-east4
export REGION_2_ZONE=us-east4-a

पुष्टि करें

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

कमांड

echo $REGION_1
echo $REGION_1_ZONE
echo $REGION_2
echo $REGION_2_ZONE

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

Compute और DNS API चालू करने के लिए, gcloud services enable कमांड का इस्तेमाल करें. Cloud Shell में ये कमांड चलाएं

Compute API चालू करना

Command

gcloud services enable compute.googleapis.com

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

Command

gcloud services enable dns.googleapis.com

पुष्टि करें

अब जब सेवाएं चालू हो गई हैं, तो आइए gcloud services list कमांड का इस्तेमाल करके पुष्टि करें. इससे चालू किए गए सभी एपीआई की सूची दिखेगी.

Command

gcloud services list | grep -E 'compute|dns'

आउटपुट का उदाहरण

NAME: compute.googleapis.com
NAME: dns.googleapis.com

5. VPC नेटवर्क, सबनेट, और फ़ायरवॉल के नियम बनाना

इस सेक्शन में, हम वीपीसी नेटवर्क, दो सबनेट (हर क्षेत्र में एक) और फ़ायरवॉल के ज़रूरी नियम बनाएंगे.

VPC नेटवर्क बनाना

वीपीसी नेटवर्क बनाने के लिए, gcloud compute networks create कमांड का इस्तेमाल करें. हम सबनेट मोड को कस्टम के तौर पर सेट कर रहे हैं, क्योंकि अगले चरण में हम अपने सबनेट बनाएंगे. Cloud Shell में ये कमांड चलाएं.

Command

gcloud compute networks create my-vpc --subnet-mode custom

सबनेट बनाना

REGION_1 और REGION_2 में एक-एक सबनेट बनाने के लिए, gcloud compute networks subnets create कमांड का इस्तेमाल करें. Cloud Shell में ये कमांड चलाएं

REGION_1 सबनेट

Command

gcloud compute networks subnets create ${REGION_1}-subnet \
--network my-vpc \
--range 10.1.0.0/24 \
--region $REGION_1

REGION_2 सबनेट

Command

gcloud compute networks subnets create ${REGION_2}-subnet \
--network my-vpc \
--range 10.2.0.0/24 \
--region $REGION_2

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

आपको वीपीसी सबनेट और लोड बैलेंसर के हेल्थ चेक की आईपी रेंज से, पोर्ट 80 पर ट्रैफ़िक की अनुमति देनी होगी.

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

फ़ायरवॉल के नियम बनाने के लिए, gcloud compute firewall-rules create कमांड का इस्तेमाल करें. Cloud Shell में ये कमांड चलाएं

पोर्ट 80 पर ट्रैफ़िक की अनुमति दें

Command

gcloud compute firewall-rules create allow-http-lb-hc \
--allow tcp:80 --network my-vpc \
--source-ranges 10.1.0.0/24,10.2.0.0/24,35.191.0.0/16,130.211.0.0/22 \
--target-tags=allow-http

क्लाइंट वीएम पर एसएसएच ट्रैफ़िक की अनुमति देना

Command

gcloud compute firewall-rules create allow-ssh \
--allow tcp:22 --network my-vpc \
--source-ranges 0.0.0.0/0 \
--target-tags=allow-ssh

6. क्लाउड एनएटी बनाना

निजी वीएम को इंटरनेट से पैकेज डाउनलोड और इंस्टॉल करने के लिए, आपको दोनों क्षेत्रों में Cloud NAT गेटवे की ज़रूरत होगी.

  • हमारे वेब सर्वर वीएम को Apache वेब सर्वर डाउनलोड और इंस्टॉल करना होगा.
  • क्लाइंट वीएम को dnsutils पैकेज डाउनलोड और इंस्टॉल करना होगा. हम इसका इस्तेमाल टेस्टिंग के लिए करेंगे.

हर Cloud NAT गेटवे, किसी एक वीपीसी नेटवर्क, क्षेत्र, और Cloud Router से जुड़ा होता है. इसलिए, NAT गेटवे बनाने से पहले, हमें हर क्षेत्र में Cloud Router बनाने होंगे.

क्लाउड राऊटर बनाना

us-west1 और us-east4 क्षेत्रों में Cloud Router बनाने के लिए, gcloud compute routers create कमांड का इस्तेमाल करें. Cloud Shell में ये कमांड चलाएं.

Region_1 Cloud Router

कमांड

gcloud compute routers create "${REGION_1}-cloudrouter" \
--region $REGION_1 --network=my-vpc --asn=65501

Region_2 Cloud Router

कमांड

gcloud compute routers create "${REGION_2}-cloudrouter" \
--region $REGION_2 --network=my-vpc --asn=65501

NAT गेटवे बनाना

us-west1 और us-east4 क्षेत्रों में NAT गेटवे बनाने के लिए, gcloud compute routers nat create कमांड का इस्तेमाल करें. Cloud Shell में ये कमांड चलाएं.

Region_1 NAT Gateway

कमांड

gcloud compute routers nats create "${REGION_1}-nat-gw" \
--router="${REGION_1}-cloudrouter" \
--router-region=$REGION_1 \
--nat-all-subnet-ip-ranges --auto-allocate-nat-external-ips

Region_2 NAT Gateway

कमांड

gcloud compute routers nats create "${REGION_2}-nat-gw" \
--router="${REGION_2}-cloudrouter" \
--router-region=$REGION_2 \
--nat-all-subnet-ip-ranges --auto-allocate-nat-external-ips

7. Compute Engine VM बनाना

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

वेब सर्वर वीएम बनाना

वेब सर्वर बनाने के लिए, gcloud compute instances create कमांड का इस्तेमाल करें. हमें दो वेब सर्वर बनाने हैं. एक REGION_1 में और दूसरा REGION_2 में. हम वेब सर्वर पर Apache को इंस्टॉल और कॉन्फ़िगर करने के लिए, स्टार्टअप स्क्रिप्ट का इस्तेमाल कर रहे हैं.

REGION_1 Web Server

Cloud Shell में यह कमांड चलाएं

Command

gcloud compute instances create "${REGION_1}-instance" \
--image-family=debian-11 --image-project=debian-cloud \
--zone=$REGION_1_ZONE \
--network-interface=network=my-vpc,subnet=${REGION_1}-subnet,no-address \
--tags=allow-http \
--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'

REGION_2 Web Server

Cloud Shell में यह कमांड चलाएं

Command

gcloud compute instances create "${REGION_2}-instance" \
--image-family=debian-11 --image-project=debian-cloud \
--zone=$REGION_2_ZONE \
--network-interface=network=my-vpc,subnet=${REGION_2}-subnet,no-address \
--tags=allow-http \
--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'

अनमैनेज्ड इंस्टेंस ग्रुप बनाना

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

अनमैनेज्ड इंस्टेंस ग्रुप बनाना

gcloud compute instance-groups unmanaged create कमांड का इस्तेमाल करके, दो अनमैनेज्ड इंस्टेंस ग्रुप बनाएं. एक us-west1 वेब सर्वर के लिए और दूसरा us-east4 वेब सर्वर के लिए.

Region_1 इंस्टेंस ग्रुप

कमांड

gcloud compute instance-groups unmanaged create \
"${REGION_1}-instance-group" --zone=$REGION_1_ZONE

Region_2 इंस्टेंस ग्रुप

कमांड

gcloud compute instance-groups unmanaged create \
"${REGION_2}-instance-group" --zone=$REGION_2_ZONE

इंस्टेंस ग्रुप में वीएम जोड़ना

अभी बनाए गए इंस्टेंस ग्रुप में इंस्टेंस जोड़ने के लिए, gcloud compute instance-groups unmanaged add-instances कमांड का इस्तेमाल करें. REGION_1 वेब सर्वर को REGION_1 इंस्टेंस ग्रुप में और REGION_2 वेब सर्वर को REGION_2 इंस्टेंस ग्रुप में जोड़ें

Region_1 इंस्टेंस ग्रुप

कमांड

gcloud compute instance-groups unmanaged add-instances \
"${REGION_1}-instance-group" --instances $REGION_1-instance \
--zone=$REGION_1_ZONE

Region_2 इंस्टेंस ग्रुप

कमांड

gcloud compute instance-groups unmanaged add-instances \
"${REGION_2}-instance-group" --instances $REGION_2-instance \
--zone=$REGION_2_ZONE

क्लाइंट वीएम बनाना

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

Command

gcloud compute instances create client-instance --image-family=debian-11 \
--image-project=debian-cloud \
--zone=$REGION_1_ZONE \
--network-interface=network=my-vpc,subnet=${REGION_1}-subnet,no-address \
--tags=allow-ssh \
--metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install dnsutils -y'

8. L4 इंटरनल लोड बैलेंसर बनाना

L4 आईएलबी बनाने के लिए, हमें हेल्थ चेक, बैकएंड सेवा, और फ़ॉरवर्डिंग का नियम बनाना होगा.

हेल्थ चेक बनाना

हेल्थ चेक बनाने के लिए, gcloud compute health-checks create कमांड का इस्तेमाल करें. हम बुनियादी एचटीटीपी हेल्थ चेक बना रहे हैं. साथ ही, टारगेट पोर्ट 80 है. Cloud Shell में ये कमांड चलाएं

Command

gcloud compute health-checks create http http-hc --port 80

बैकएंड सेवाओं को कॉन्फ़िगर करना

बैकएंड सेवा बनाने के लिए, gcloud compute backend-services create कमांड का इस्तेमाल करें. बैकएंड सेवाएं बनाने के बाद, हम gcloud compute backend-services add-backend कमांड का इस्तेमाल करके, मैनेज न किए गए इंस्टेंस ग्रुप को बैकएंड सेवाओं में जोड़ेंगे. Cloud Shell में ये कमांड चलाएं.

बैकएंड सेवा बनाएं

कमांड

gcloud compute backend-services create $REGION_1-backend-service \
--load-balancing-scheme=INTERNAL --protocol=TCP \
--health-checks=http-hc --region=$REGION_1
gcloud compute backend-services create $REGION_2-backend-service \
--load-balancing-scheme=INTERNAL --protocol=TCP \
--health-checks=http-hc --region=$REGION_2

बैकएंड जोड़ें

Command

gcloud compute backend-services add-backend $REGION_1-backend-service \
--instance-group=$REGION_1-instance-group \
--region=$REGION_1 \
--instance-group-zone=$REGION_1_ZONE
gcloud compute backend-services add-backend $REGION_2-backend-service \
--instance-group=$REGION_2-instance-group \
--region=$REGION_2 \
--instance-group-zone=$REGION_2_ZONE

ईमेल फ़ॉरवर्ड करने के नियम बनाना

दोनों क्षेत्रों में फ़ॉरवर्ड करने के नियम बनाने के लिए, gcloud compute forwarding-rules create कमांड का इस्तेमाल करें. Cloud Shell में ये कमांड चलाएं

REGION_1 के लिए फ़ॉरवर्ड करने का नियम

कमांड

gcloud compute forwarding-rules create $REGION_1-ilb \
    --region=$REGION_1 \
    --load-balancing-scheme=internal \
    --network=my-vpc \
    --subnet=$REGION_1-subnet \
    --ip-protocol=TCP \
    --ports=80 \
    --backend-service=$REGION_1-backend-service \
    --backend-service-region=$REGION_1 \
    --allow-global-access

REGION_2 के लिए फ़ॉरवर्ड करने का नियम

gcloud compute forwarding-rules create $REGION_2-ilb \
    --region=$REGION_2 \
    --load-balancing-scheme=internal \
    --network=my-vpc \
    --subnet=$REGION_2-subnet \
    --ip-protocol=TCP \
    --ports=80 \
    --backend-service=$REGION_2-backend-service \
    --backend-service-region=$REGION_2 \
    --allow-global-access

9. डीएनएस कॉन्फ़िगर करना

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

निजी डीएनएस ज़ोन बनाना

उदाहरण के लिए, example.com के लिए एक निजी ज़ोन बनाने के लिए, gcloud dns managed-zones create कमांड का इस्तेमाल करें. हम इस ज़ोन का इस्तेमाल, फ़ेलओवर राउटिंग नीति के साथ एक संसाधन रिकॉर्ड सेट बनाने के लिए करेंगे. Cloud Shell में यह कमांड चलाएं

कमांड

gcloud dns managed-zones create example-com \
--dns-name example.com. --description="My private zone" \
--visibility=private --networks my-vpc 

फ़ेलओवर राउटिंग की नीति के साथ डीएनएस रिकॉर्ड बनाना

फ़ेलओवर राउटिंग नीति के साथ डीएनएस रिकॉर्ड बनाने के लिए, gcloud dns record-sets create कमांड का इस्तेमाल करें. मुख्य टारगेट, REGION_1 में मौजूद लोड बैलेंसर है. Cloud DNS, सिर्फ़ भौगोलिक जगह के हिसाब से बैकअप टारगेट की सुविधा देता है. बैकअप सेट, REGION_1 और REGION_2, दोनों के लिए टारगेट के तौर पर REGION_2 लोड बैलेंसर वाली जियोलोकेशन नीति है. Cloud Shell में ये कमांड चलाएं

Command

gcloud dns record-sets create failover.example.com --ttl 5 --type A \
--routing-policy-type=FAILOVER \
--routing-policy-primary-data=$REGION_1-ilb \
--routing-policy-backup-data="${REGION_1}=${REGION_2}-ilb;${REGION_2}=${REGION_2}-ilb" \
--routing-policy-backup-data-type=GEO \
--zone=example-com \
--enable-health-checking

आउटपुट का उदाहरण

NAME: failover.example.com.
TYPE: A
TTL: 5
DATA: Primary: "10.1.0.4, 80, tcp, https://www.googleapis.com/compute/v1/projects/my-clouddns-codelab/global/networks/my-vpc, my-clouddns-codelab, us-west1, regionalL4ilb" Backup: us-west1: "10.2.0.3, 80, tcp, https://www.googleapis.com/compute/v1/projects/my-clouddns-codelab/global/networks/my-vpc, my-clouddns-codelab, us-east4, regionalL4ilb";us-east4: "10.2.0.3, 80, tcp, https://www.googleapis.com/compute/v1/projects/my-clouddns-codelab/global/networks/my-vpc, my-clouddns-codelab, us-east4, regionalL4ilb"

10. डीएनएस रिज़ॉल्यूशन की जांच करना

फ़ेलओवर सेटअप की जांच करने से पहले, दोनों इंटरनल लोड बैलेंसर के आईपी पतों को नोट कर लें. Cloud Shell में ये कमांड चलाएं.

Command

gcloud compute forwarding-rules list --filter="name:($REGION_1-ilb $REGION_2-ilb)"

आउटपुट का उदाहरण

इस उदाहरण में, us-west1-ilb का आईपी पता 10.1.0.4 है और us-east4-ilb का आईपी पता 10.2.0.3 है

NAME: us-west1-ilb
REGION: us-west1
IP_ADDRESS: 10.1.0.4
IP_PROTOCOL: TCP
TARGET: us-west1/backendServices/us-west1-backend-service

NAME: us-east4-ilb
REGION: us-east4
IP_ADDRESS: 10.2.0.3
IP_PROTOCOL: TCP
TARGET: us-east4/backendServices/us-east4-backend-service

अब हम क्लाइंट-इंस्टेंस में लॉग इन करेंगे और डीएनएस रिज़ॉल्यूशन की जांच करेंगे. वेब कंसोल में, "Compute Engine | VM इंस्टेंस" पर जाएं

5c824940bf414501.png

कंसोल से क्लाइंट-इंस्टेंस में लॉग इन करने के लिए, एसएसएच बटन पर क्लिक करें.

b916eb32c60a4156.png

अब हम क्लाइंट वीएम में हैं. इसलिए, dig डोमेन नेम को हल करने के लिए, dig कमांड का इस्तेमाल करें.failover.example.com

लूप को इस तरह कॉन्फ़िगर किया गया है कि यह कमांड को छह सेकंड के स्लीप टाइमर के साथ दस बार चलाएगा.

Command

for i in {1..10}; do echo $i; dig failover.example.com +short; sleep 6; done

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

आउटपुट में, आपको रिसोर्स रिकॉर्ड के प्राइमरी सेट में लोड बैलेंसर का आईपी पता दिखेगा. हमारे सेटअप में, यह us-west1 इलाके में मौजूद लोड बैलेंसर का आईपी पता होगा.

11. बैकअप एन्कोडर को चलाकर देखें

हम REGION_1 VM से नेटवर्क टैग हटाकर, फ़ेलओवर की प्रोसेस को सिम्युलेट करेंगे. इससे पोर्ट 80 का ऐक्सेस ब्लॉक हो जाएगा. इस वजह से, हेल्थ चेक काम नहीं करेंगे.

नेटवर्क टैग हटाना

वर्चुअल मशीन से नेटवर्क टैग हटाने के लिए, gcloud compute instances remove-tags कमांड का इस्तेमाल करें. Cloud Shell में यह कमांड चलाएं

Command

gcloud compute instances remove-tags $REGION_1-instance \
--zone=$REGION_1_ZONE --tags=allow-http

सेहत की जांच 10 सेकंड में पूरी नहीं हो पाएगी. डीएनएस रिज़ॉल्यूशन टेस्ट को फिर से चलाएं.

डीएनएस रिज़ॉल्यूशन

क्लाइंट-इंस्टेंस से यह कमांड चलाएं

Command

for i in {1..10}; do echo $i; dig failover.example.com +short; sleep 6; done

आउटपुट में, आपको संसाधन रिकॉर्ड के बैकअप सेट में लोड बैलेंसर का आईपी पता दिखेगा. हमारे सेटअप में, यह us-east4 इलाके में लोड बैलेंसर का आईपी पता होगा.

12. ट्रैफ़िक को धीरे-धीरे बढ़ाने की सुविधा की जांच करना

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

इसे आज़माने के लिए, REGION_1 वेब सर्वर में नेटवर्क टैग को फिर से जोड़ते हैं.

नेटवर्क टैग जोड़ना

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

Command

gcloud compute instances add-tags $REGION_1-instance \
--zone $REGION_1_ZONE --tags allow-http

जांच के नतीजे 10 सेकंड में मिल जाएंगे

पुष्टि करें कि डीएनएस रिज़ॉल्यूशन, प्राइमरी लोड बैलेंसर की ओर इशारा करता हो. हमारे सेटअप में, यह us-west1 इलाके में लोड बैलेंसर का आईपी पता होगा.

क्लाइंट-इंस्टेंस से यह कमांड चलाएं

Command

dig +short failover.example.com

डीएनएस रिकॉर्ड अपडेट करना

अब हम failover.example.com के डीएनएस रिकॉर्ड में बदलाव करेंगे, ताकि प्राइमरी सर्वर के ठीक से काम करने पर भी, 30% ट्रैफ़िक बैकअप सेट पर भेजा जा सके. Cloud Shell में यह कमांड चलाएं

Command

gcloud dns record-sets update failover.example.com --ttl 30 --type A \
--routing-policy-type=FAILOVER \
--routing-policy-primary-data=$REGION_1-ilb \
--routing-policy-backup-data="${REGION_1}=${REGION_2}-ilb;${REGION_2}=${REGION_2}-ilb" \
--routing-policy-backup-data-type=GEO \
--zone=example-com --enable-health-checking \
--backup-data-trickle-ratio=0.3

डीएनएस रिज़ॉल्यूशन

क्लाइंट वीएम से यह कमांड चलाएं. आपको दिखेगा कि डीएनएस रिकॉर्ड failover.example.com, प्राइमरी लोड बैलेंसर के आईपी पते पर करीब 70% समय और बैकअप लोड बैलेंसर के आईपी पते पर करीब 30% समय तक काम करेगा.

for i in {1..10}; do echo $i; dig failover.example.com +short; sleep 6; done

13. क्लीनअप करने का तरीका

इस लैब में इस्तेमाल किए गए संसाधनों को हटाने के लिए, CloudShell में जाकर ये कमांड चलाएं

gcloud dns record-sets delete failover.example.com --type=A \
--zone=example-com --quiet

gcloud dns managed-zones delete example-com --quiet

gcloud compute forwarding-rules delete $REGION_1-ilb \
--region=$REGION_1 --quiet

gcloud compute forwarding-rules delete $REGION_2-ilb \
--region=$REGION_2 --quiet

gcloud compute backend-services delete $REGION_1-backend-service \
--region=$REGION_1 --quiet

gcloud compute backend-services delete $REGION_2-backend-service \
--region=$REGION_2 --quiet

gcloud compute health-checks delete http-hc --quiet

gcloud compute instances delete client-instance --zone=$REGION_1_ZONE --quiet

gcloud compute instance-groups unmanaged delete $REGION_1-instance-group \
--zone=$REGION_1_ZONE --quiet

gcloud compute instance-groups unmanaged delete $REGION_2-instance-group \
--zone=$REGION_2_ZONE --quiet

gcloud compute instances delete $REGION_1-instance \
--zone=$REGION_1_ZONE --quiet

gcloud compute instances delete $REGION_2-instance \
--zone=$REGION_2_ZONE --quiet

gcloud compute routers nats delete $REGION_1-nat-gw \
--router=$REGION_1-cloudrouter --region=$REGION_1 --quiet

gcloud compute routers nats delete $REGION_2-nat-gw \
--router=$REGION_2-cloudrouter --region=$REGION_2 --quiet

gcloud compute routers delete $REGION_1-cloudrouter \
--region=$REGION_1 --quiet

gcloud compute routers delete $REGION_2-cloudrouter \
--region=$REGION_2 --quiet

gcloud compute firewall-rules delete allow-ssh allow-http-lb-hc --quiet

gcloud compute networks subnets delete $REGION_1-subnet \
--region=$REGION_1 --quiet

gcloud compute networks subnets delete $REGION_2-subnet \
--region=$REGION_2 --quiet

gcloud compute networks delete my-vpc --quiet

14. बधाई हो

बधाई हो, आपने Cloud DNS की फ़ेलओवर राउटिंग नीति को डिप्लॉय और टेस्ट कर लिया है

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

  • Cloud DNS की फ़ेलओवर राउटिंग नीति को कॉन्फ़िगर करने का तरीका
  • डीएनएस फ़ेलओवर की जांच करना
  • बैकअप सेट पर ट्रैफ़िक को धीरे-धीरे कैसे डाइवर्ट करें

आगे क्या करना है?

  • चालू और बैकअप सेट के लिए, एक से ज़्यादा आईपी पते सेट अप करने की कोशिश करें
  • अपने अनमैनेज्ड इंस्टेंस ग्रुप में कई बैकएंड वीएम जोड़कर देखें
  • बैकअप सेट में जियोलोकेशन की नीति के लिए, अलग-अलग क्षेत्रों में कई लोड बैलेंसर सेट अप करने की कोशिश करें.

ज़्यादा जानें

https://cloud.google.com/dns/docs/zones/manage-routing-policies