خطای چند منطقه‌ای با استفاده از سیاست‌های مسیریابی Cloud DNS و بررسی سلامت برای متعادل‌کننده بار TCP/UDP داخلی

۱. مقدمه

آخرین به‌روزرسانی: 2022-09-22

سیاست مسیریابی DNS چیست؟

سیاست‌های مسیریابی DNS ابری به کاربران این امکان را می‌دهد که بسته به معیارهای خاصی مانند وزن، موقعیت جغرافیایی یا بررسی‌های سلامت، هدایت ترافیک مبتنی بر DNS را پیکربندی کنند.

Cloud DNS از سیاست‌های مسیریابی زیر پشتیبانی می‌کند:

  • سیاست مسیریابی وزن‌دار نوبتی
  • سیاست مسیریابی مبتنی بر موقعیت جغرافیایی
  • سیاست مسیریابی جغرافیایی
  • سیاست مسیریابی در هنگام خرابی

در این آزمایش، شما سیاست مسیریابی failover را پیکربندی و آزمایش خواهید کرد.

سیاست مسیریابی در هنگام خرابی

Cloud DNS از بررسی‌های سلامت برای متعادل‌کننده‌های بار داخلی TCP/UDP که دسترسی سراسری فعال دارند، پشتیبانی می‌کند. با یک سیاست مسیریابی failover، می‌توانید IPهای اصلی و پشتیبان را برای یک رکورد منبع پیکربندی کنید. در حالت عادی، Cloud DNS به درخواست‌ها با آدرس‌های IP ارائه شده در مجموعه اصلی پاسخ می‌دهد. هنگامی که همه آدرس‌های IP در مجموعه اصلی از کار می‌افتند (وضعیت سلامت به ناسالم تغییر می‌کند)، Cloud DNS شروع به سرویس‌دهی به آدرس‌های IP در مجموعه پشتیبان می‌کند.

بررسی‌های بهداشتی

سیاست مسیریابی DNS به بررسی‌های سلامت یکپارچه (UHC) داخلیِ متعادل‌کننده بار بستگی دارد. یک متعادل‌کننده بار داخلی در صورتی سالم در نظر گرفته می‌شود که 20٪ (یا بیشتر) از backendها سالم باشند. بررسی‌های سلامت برای متعادل‌کننده‌های بار TCP/UDP داخلی و HTTP(S) داخلی اطلاعات متفاوتی ارائه می‌دهند. برای متعادل‌کننده بار HTTP(S)، UHC وضعیت سلامت همه پروکسی‌های Envoy را ارائه می‌دهد، اما برای متعادل‌کننده بار TCP/UDP داخلی، Cloud DNS سیگنال‌های سلامت مستقیم را از نمونه‌های backend جداگانه دریافت می‌کند. جزئیات بررسی‌های سلامت را می‌توانید اینجا بیابید.

آنچه خواهید ساخت

در این Codelab، شما قرار است یک وب‌سایت بسازید که در ۲ منطقه اجرا شود و یک سیاست مسیریابی DNS در هنگام failover را به آن مرتبط کنید. تنظیمات شامل موارد زیر خواهد بود:

منابع فعال -

  • متعادل‌کننده بار داخلی L4 در REGION_1
  • یک ماشین مجازی که وب سرور آپاچی را در منطقه REGION_1 اجرا می‌کند

منابع پشتیبان -

  • متعادل‌کننده بار داخلی L4 در REGION_2
  • یک ماشین مجازی که وب سرور آپاچی را در منطقه REGION_2 اجرا می‌کند

تنظیمات به صورت زیر نشان داده شده است -

d0a91d3d3698f544.png

آنچه یاد خواهید گرفت

  • نحوه ایجاد یک سیاست مسیریابی failover
  • فعال کردن DNS failover
  • چگونه ترافیک را به مجموعه پشتیبان هدایت کنیم

آنچه نیاز دارید

  • آشنایی اولیه با DNS
  • آشنایی اولیه با موتور محاسباتی گوگل
  • دانش پایه در مورد متعادل‌کننده بار داخلی L4

۲. تنظیمات و الزامات

  1. وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه ، نام نمایشی برای شرکت‌کنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمی‌شود. می‌توانید آن را در هر زمانی به‌روزرسانی کنید.
  • شناسه پروژه باید در تمام پروژه‌های گوگل کلود منحصر به فرد باشد و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید می‌کند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاه‌های کد، باید شناسه پروژه را ارجاع دهید (که معمولاً با عنوان PROJECT_ID شناخته می‌شود). اگر شناسه تولید شده را دوست ندارید، می‌توانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، می‌توانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی خواهد ماند.
  • برای اطلاع شما، یک مقدار سوم هم وجود دارد، شماره پروژه که برخی از APIها از آن استفاده می‌کنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
  1. در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینه‌ای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، می‌توانید منابعی را که ایجاد کرده‌اید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

شروع پوسته ابری

اگرچه می‌توان از راه دور و از طریق لپ‌تاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده خواهید کرد.

از کنسول گوگل کلود ، روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

55efc1aaa7a4d3ad.png

آماده‌سازی و اتصال به محیط فقط چند لحظه طول می‌کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه‌ای که نیاز دارید، مجهز شده است. این ماشین مجازی یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه می‌دهد و روی فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. تمام کارهای شما در این آزمایشگاه کد را می‌توان در یک مرورگر انجام داد. نیازی به نصب چیزی ندارید.

۳. نسخه Google Cloud SDK

در زمان نگارش این مطلب، نسخه 401.0.0 آخرین نسخه Google Cloud SDK است. تمام دستورات موجود در این آزمایشگاه با استفاده از آخرین نسخه Google Cloud SDK آزمایش شده‌اند. قبل از ادامه، لطفاً مطمئن شوید که Cloud Shell از آخرین نسخه SDK استفاده می‌کند.

بررسی نسخه SDK

برای بررسی نسخه SDK از دستور gcloud version استفاده کنید. دستورات زیر را در Cloud Shell اجرا کنید.

فرمان

gcloud version | grep "Google Cloud SDK"

مثال خروجی

Google Cloud SDK 401.0.0

مراحل بعدی

  1. اگر نسخه SDK شما 401.0.0 یا بالاتر است، به بخش بعدی بروید.
  2. اگر نسخه SDK پایین‌تر از 401.0.0 است، دستور زیر را برای به‌روزرسانی SDK اجرا کنید.

دستور اختیاری

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

۴. قبل از شروع

قبل از شروع به استقرار معماری که در بالا توضیح دادیم، بیایید مطمئن شویم که Cloud Shell به درستی پیکربندی شده و تمام API های مورد نیاز فعال هستند.

تنظیم شناسه پروژه

در داخل Cloud Shell، مطمئن شوید که شناسه پروژه شما تنظیم شده است. اگر اعلان پوسته Cloud شما مانند خروجی زیر است و قصد تغییر شناسه پروژه را ندارید، می‌توانید به مرحله بعدی (تنظیم متغیرهای محیطی) بروید.

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

فعال کردن تمام سرویس‌های لازم

از دستور gcloud services enable برای فعال کردن APIهای Compute و DNS استفاده کنید. دستورات زیر را در Cloud Shell اجرا کنید.

فعال کردن API محاسباتی

فرمان

gcloud services enable compute.googleapis.com

فعال کردن API DNS

فرمان

gcloud services enable dns.googleapis.com

تأیید

اکنون که سرویس‌ها فعال شده‌اند، بیایید با استفاده از دستور gcloud services list تمام APIهای فعال را بررسی کنیم.

فرمان

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

مثال خروجی

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

۵. ایجاد قوانین شبکه، زیرشبکه‌ها و فایروال VPC

در این بخش، شبکه VPC، دو زیرشبکه (یکی در هر منطقه) و قوانین فایروال مورد نیاز را ایجاد خواهیم کرد.

ایجاد شبکه VPC

برای ایجاد شبکه VPC از دستور gcloud compute networks create استفاده کنید. ما حالت زیرشبکه را به صورت سفارشی تنظیم می‌کنیم زیرا در مرحله بعدی زیرشبکه‌های خودمان را ایجاد خواهیم کرد. دستورات زیر را در Cloud Shell اجرا کنید.

فرمان

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

ایجاد زیرشبکه‌ها

از دستور gcloud compute networks subnets create برای ایجاد دو زیرشبکه، یکی در REGION_1 و دیگری در REGION_2، استفاده کنید. دستورات زیر را در Cloud Shell اجرا کنید.

زیرشبکه REGION_1

فرمان

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

زیرشبکه REGION_2

فرمان

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

ایجاد قوانین فایروال

شما باید اجازه دهید ترافیک روی پورت ۸۰ از زیرشبکه‌های VPC و از محدوده‌های IP بررسی سلامت متعادل‌کننده بار عبور کند.

علاوه بر آن، شما همچنین باید یک قانون فایروال ایجاد کنید تا ترافیک SSH روی ماشین‌های مجازی کلاینت مجاز باشد.

برای ایجاد قوانین فایروال از دستور gcloud compute firewall-rules create استفاده کنید. دستورات زیر را در Cloud Shell اجرا کنید.

اجازه دادن به ترافیک روی پورت ۸۰

فرمان

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

اجازه عبور ترافیک SSH روی ماشین مجازی کلاینت

فرمان

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

۶. ایجاد NAT ابری

برای اینکه ماشین‌های مجازی خصوصی بتوانند بسته‌ها را از اینترنت دانلود و نصب کنند، به دروازه‌های Cloud NAT در هر دو منطقه نیاز دارید.

  • ماشین‌های مجازی وب سرور ما باید وب سرور آپاچی را دانلود و نصب کنند.
  • ماشین مجازی کلاینت باید بسته dnsutils را که برای آزمایش خود استفاده خواهیم کرد، دانلود و نصب کند.

هر دروازه NAT ابری با یک شبکه VPC، منطقه و روتر ابری مرتبط است. بنابراین قبل از ایجاد دروازه‌های NAT، باید روترهای ابری را در هر منطقه ایجاد کنیم.

ایجاد روترهای ابری

از دستور gcloud compute routers create برای ایجاد Cloud Routers در مناطق us-west1 و us-east4 استفاده کنید. دستورات زیر را در Cloud Shell اجرا کنید.

روتر ابری Region_1

دستورات

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

روتر ابری Region_2

دستورات

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

ایجاد دروازه‌های NAT

از دستور gcloud compute routers nat create برای ایجاد دروازه‌های NAT در مناطق us-west1 و us-east4 استفاده کنید. دستورات زیر را در Cloud Shell اجرا کنید.

دروازه NAT منطقه ۱

دستورات

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

دروازه NAT منطقه ۲

دستورات

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

۷. ایجاد ماشین‌های مجازی موتور محاسباتی

در این بخش، شما سرورهای وب، گروه‌های نمونه مدیریت نشده برای سرورهای وب و ماشین مجازی کلاینت را ایجاد خواهید کرد.

ایجاد ماشین‌های مجازی وب سرور

برای ایجاد سرورهای وب از دستور gcloud compute instances create استفاده کنید. ما باید دو سرور وب ایجاد کنیم، یکی در REGION_1 و دیگری در REGION_2. ما از اسکریپت‌های راه‌اندازی برای نصب و پیکربندی آپاچی روی سرورهای وب استفاده می‌کنیم.

سرور وب REGION_1

دستور زیر را در Cloud Shell اجرا کنید

فرمان

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

دستور زیر را در Cloud Shell اجرا کنید

فرمان

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'

ایجاد گروه‌های نمونه مدیریت نشده

در این بخش، دو گروه نمونه مدیریت نشده ایجاد می‌کنیم. در بخش بعدی از این گروه‌های نمونه برای پیکربندی سرویس‌های پشتیبان ILB استفاده خواهیم کرد. پس از ایجاد گروه‌های نمونه، ماشین‌های مجازی وب سرور را به این گروه‌های نمونه اضافه خواهیم کرد.

ایجاد گروه‌های نمونه مدیریت نشده

از دستور 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

ایجاد یک ماشین مجازی کلاینت

ما از این ماشین مجازی برای اجرای تست‌ها و تأیید پیکربندی DNS خود استفاده خواهیم کرد. ما از یک اسکریپت راه‌اندازی برای نصب بسته dnsutils استفاده می‌کنیم. دستورات زیر را در Cloud Shell اجرا کنید.

فرمان

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'

۸. ایجاد متعادل‌کننده‌های بار داخلی سطح ۴

برای ایجاد L4 ILB، باید یک بررسی سلامت، یک سرویس backend و یک قانون forwarding ایجاد کنیم.

ایجاد بررسی سلامت

برای ایجاد بررسی سلامت از دستور gcloud compute health-checks create استفاده کنید. ما در حال ایجاد یک بررسی سلامت http اولیه هستیم و پورت هدف پورت ۸۰ است. دستورات زیر را در Cloud Shell اجرا کنید.

فرمان

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

پیکربندی سرویس‌های بک‌اند

برای ایجاد سرویس backend از دستور gcloud compute backend-services create استفاده کنید. پس از ایجاد سرویس‌های backend، گروه‌های نمونه مدیریت نشده را با استفاده از دستور gcloud compute backend-services add-backend به سرویس‌های 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

افزودن بخش پشتیبانی

فرمان

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

۹. پیکربندی DNS

در این بخش، ما یک منطقه خصوصی و یک مجموعه رکورد DNS با سیاست مسیریابی failover ایجاد خواهیم کرد.

ایجاد یک منطقه DNS خصوصی

از دستور gcloud dns managed-zones create برای ایجاد یک منطقه خصوصی برای example.com استفاده کنید. ما از این منطقه برای ایجاد یک مجموعه رکورد منابع با سیاست مسیریابی failover استفاده خواهیم کرد. دستور زیر را در Cloud Shell اجرا کنید

دستورات

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

یک رکورد DNS با سیاست مسیریابی failover ایجاد کنید

از دستور gcloud dns record-sets create برای ایجاد یک رکورد DNS با سیاست مسیریابی failover استفاده کنید. هدف اصلی، متعادل‌کننده بار در REGION_1 است. Cloud DNS فقط از اهداف پشتیبان‌گیری مبتنی بر موقعیت جغرافیایی پشتیبانی می‌کند، مجموعه پشتیبان‌گیری یک سیاست موقعیت جغرافیایی با متعادل‌کننده بار REGION_2 به عنوان هدف برای هر دو REGION_1 و REGION_2 است. دستورات زیر را در Cloud Shell اجرا کنید.

فرمان

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"

۱۰. تست وضوح DNS

قبل از آزمایش تنظیمات failover، بیایید آدرس‌های IP هر دو متعادل‌کننده بار داخلی را یادداشت کنیم. دستورات زیر را در Cloud Shell اجرا کنید.

فرمان

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

مثال خروجی

در این مثال، us-west1-ilb دارای آدرس IP 10.1.0.4 و us-east4-ilb دارای آدرس IP 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

حالا به نمونه کلاینت وارد می‌شویم و وضوح DNS را آزمایش می‌کنیم. در کنسول وب، به "Compute Engine | VM Instances" بروید.

5c824940bf414501.png

برای ورود به نمونه کلاینت از کنسول، روی دکمه SSH کلیک کنید.

b916eb32c60a4156.png

اکنون که در ماشین مجازی کلاینت هستیم، از دستور dig برای یافتن نام دامنه failover.example.com استفاده کنید.

این حلقه طوری پیکربندی شده است که دستور را ده بار با تایمر خواب ۶ ثانیه‌ای اجرا کند.

فرمان

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

از آنجایی که TTL در رکورد DNS روی ۵ ثانیه تنظیم شده است، یک تایمر خواب ۶ ثانیه‌ای اضافه شده است. تایمر خواب تضمین می‌کند که برای هر درخواست DNS، یک پاسخ DNS ذخیره نشده دریافت کنید. اجرای این دستور تقریباً یک دقیقه طول می‌کشد.

در خروجی، آدرس IP مربوط به متعادل‌کننده بار را در مجموعه اصلی رکورد منبع مشاهده خواهید کرد. در تنظیمات ما، این آدرس IP متعادل‌کننده بار در ناحیه us-west1 خواهد بود.

۱۱. تست failover

ما با حذف برچسب شبکه از ماشین مجازی REGION_1، یک failover را شبیه‌سازی خواهیم کرد. این کار دسترسی به پورت ۸۰ را مسدود می‌کند و در نتیجه، بررسی‌های سلامت شروع به شکست می‌کنند.

برچسب شبکه را حذف کنید

برای حذف تگ شبکه از ماشین مجازی، از دستور gcloud compute instances remove-tags استفاده کنید. دستور زیر را در Cloud Shell اجرا کنید.

فرمان

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

بررسی سلامت ظرف 10 ثانیه با شکست مواجه خواهد شد. تست وضوح DNS را دوباره اجرا کنید.

وضوح DNS

از نمونه کلاینت، دستور زیر را اجرا کنید

فرمان

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

در خروجی، آدرس IP مربوط به متعادل‌کننده بار در مجموعه پشتیبان رکورد منبع را مشاهده خواهید کرد. در تنظیمات ما، این آدرس IP متعادل‌کننده بار در ناحیه us-east4 خواهد بود.

۱۲. تست چکیدن ترافیک

به طور پیش‌فرض، سیاست failover، IP نقطه پایانی اصلی را برای همه درخواست‌های DNS برمی‌گرداند و فقط در صورتی که IP اصلی در بررسی‌های سلامت با شکست مواجه شود، IPهای پشتیبان را برمی‌گرداند. Cloud DNS به کاربران اجازه می‌دهد Trickle Ratio را پیکربندی کنند که به Cloud DNS اجازه می‌دهد بخشی از ترافیک را به اهداف پشتیبان ارسال کند، حتی زمانی که اهداف اصلی سالم هستند. این نسبت باید مقداری بین 0 و 1 باشد. مقدار پیش‌فرض 0 است.

برای آزمایش این موضوع، بیایید تگ شبکه را به وب سرور REGION_1 اضافه کنیم.

افزودن برچسب شبکه

تگ را به ماشین مجازی وب سرور اضافه کنید تا ترافیک http به ماشین مجازی منطقه اصلی اجازه داده شود. دستور زیر را در Cloud Shell اجرا کنید.

فرمان

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

بررسی‌های سلامت در عرض ۱۰ ثانیه انجام خواهد شد

تأیید کنید که DNS resolution به load balancer اصلی اشاره می‌کند. در تنظیمات ما، این آدرس IP load balancer در ناحیه us-west1 خواهد بود.

از نمونه کلاینت، دستور زیر را اجرا کنید

فرمان

dig +short failover.example.com

رکورد DNS را به‌روزرسانی کنید

حالا، رکورد DNS مربوط به failover.example.com را طوری تغییر می‌دهیم که حتی زمانی که سرور اصلی سالم است، 30 درصد از ترافیک به سرور پشتیبان اختصاص داده شود. دستور زیر را در Cloud Shell اجرا کنید.

فرمان

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

وضوح DNS

دستور زیر را از ماشین مجازی کلاینت اجرا کنید. مشاهده خواهید کرد که رکورد DNS failover.example.com تقریباً ۷۰٪ مواقع به IP اصلی متعادل‌کننده بار و تقریباً ۳۰٪ مواقع به IP پشتیبان متعادل‌کننده بار متصل می‌شود.

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

۱۳. مراحل پاکسازی

برای پاکسازی منابع مورد استفاده در این آزمایش، دستورات زیر را از 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

۱۴. تبریک

تبریک می‌گویم، شما با موفقیت سیاست مسیریابی عدم موفقیت Cloud DNS را مستقر و آزمایش کردید.

آنچه ما پوشش داده‌ایم

  • نحوه پیکربندی سیاست مسیریابی failover در Cloud DNS
  • تست DNS failover
  • چگونه ترافیک را به مجموعه پشتیبان هدایت کنیم

بعدش چی؟

  • سعی کنید چندین IP برای مجموعه‌های فعال و پشتیبان تنظیم کنید
  • سعی کنید چندین ماشین مجازی بک‌اند را به گروه‌های نمونه مدیریت نشده خود اضافه کنید
  • سعی کنید چندین متعادل‌کننده بار را در مناطق مختلف برای سیاست موقعیت جغرافیایی در مجموعه پشتیبان تنظیم کنید.

بیشتر بدانید

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