تجاوز الأعطال في مناطق متعدّدة باستخدام سياسات توجيه نظام أسماء النطاقات في Cloud وعمليات التحقّق من الصحة لجهاز موازنة الحمل الداخلي لبروتوكول TCP/UDP

1. مقدمة

تاريخ آخر تعديل: 2022-09-22

ما هي سياسة توجيه نظام أسماء النطاقات؟

تتيح سياسات التوجيه في Cloud DNS للمستخدمين إعداد توجيه الزيارات المستند إلى نظام أسماء النطاقات (DNS) استنادًا إلى معايير محدّدة، مثل الوزن أو الموقع الجغرافي أو عمليات التحقّق من الصحة.

تتيح خدمة Cloud DNS سياسات التوجيه التالية:

  • سياسة التوجيه بالتناوب المرجّح
  • سياسة توجيه الموقع الجغرافي
  • سياسة التوجيه المستندة إلى الموقع الجغرافي
  • سياسة التوجيه عند تجاوز الأعطال

في هذا التمرين العملي، ستضبط سياسة التوجيه الاحتياطية وتختبرها.

سياسة التوجيه الاحتياطي

تتيح خدمة Cloud DNS عمليات التحقّق من الصحة لأجهزة موازنة حمل TCP/UDP الداخلية التي تم تفعيل إمكانية الوصول إليها على مستوى العالم. باستخدام سياسة توجيه تجاوز الفشل، يمكنك ضبط عناوين IP الأساسية والاحتياطية لسجلّ الموارد. في الوضع العادي، ستردّ خدمة Cloud DNS على طلبات البحث بعناوين IP المتوفّرة في المجموعة الأساسية. عندما يتعذّر الوصول إلى جميع عناوين IP في المجموعة الأساسية (تتغيّر حالة الصحة إلى غير صحية)، يبدأ Cloud DNS في عرض عناوين IP في المجموعة الاحتياطية.

عمليات التحقّق من الصحة

ستعتمد سياسة توجيه نظام أسماء النطاقات على عمليات التحقّق الموحّدة من الصحة(UHC) في موازن الحمل الداخلي الأصلية. يُعدّ جهاز موازنة الحمل الداخلي سليمًا إذا كانت %20 (أو أكثر) من الخلفيات سليمة. تقدّم عمليات التحقّق من السلامة لأجهزة موازنة حمل TCP/UDP الداخلية وHTTP(S) الداخلية معلومات مختلفة. بالنسبة إلى جهاز موازنة حمل HTTP(S) الداخلي، يوفّر UHC حالة الصحة لجميع خوادم وكيل Envoy، ولكن بالنسبة إلى جهاز موازنة حمل TCP/UDP الداخلي، تتلقّى خدمة Cloud DNS إشارات الصحة المباشرة من مثيلات الخلفية الفردية. يمكنك الاطّلاع على تفاصيل عمليات التحقّق من الصحة هنا .

ما ستنشئه

في هذا الدرس التطبيقي حول الترميز، ستنشئ موقعًا إلكترونيًا يعمل في منطقتَين وتربط به سياسة توجيه نظام أسماء النطاقات (DNS) الاحتياطية. ستتضمّن عملية الإعداد ما يلي:

الموارد النشطة:

  • جهاز موازنة الحمل الداخلي من الطبقة 4 في REGION_1
  • جهاز افتراضي يشغّل خادم ويب Apache في REGION_1

مصادر النسخ الاحتياطي -

  • جهاز موازنة الحمل الداخلي من الطبقة 4 في REGION_2
  • جهاز افتراضي يشغّل خادم ويب Apache في REGION_2

يتم الإعداد على النحو الموضّح أدناه:

d0a91d3d3698f544.png

ما ستتعلمه

  • كيفية إنشاء سياسة توجيه تجاوز الفشل
  • بدء عملية تجاوز تعذُّر نظام أسماء النطاقات
  • كيفية توجيه عدد قليل من الزيارات إلى مجموعة النسخ الاحتياطية

المتطلبات

  • معرفة أساسية بنظام أسماء النطاقات
  • معرفة أساسية بخدمة Google Compute Engine
  • معرفة أساسية بجهاز موازنة الحمل الداخلي من الطبقة 4

2. الإعداد والمتطلبات

  1. سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
  • يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع 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 يستخدم أحدث إصدار من حزمة SDK.

التحقّق من إصدار حزمة تطوير البرامج (SDK)

استخدِم الأمر gcloud version للتحقّق من إصدار حزمة تطوير البرامج (SDK). نفِّذ الأوامر التالية في Cloud Shell

Command

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

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

تفعيل جميع الخدمات اللازمة

استخدِم الأمر gcloud services enable لتفعيل واجهات برمجة التطبيقات Compute وDNS. نفِّذ الأوامر التالية في Cloud Shell

تفعيل Compute API

Command

gcloud services enable compute.googleapis.com

تفعيل DNS API

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 وشبكتَين فرعيتَين (واحدة في كل منطقة) وقواعد جدار الحماية المطلوبة.

إنشاء شبكة VPC

استخدِم الأمر gcloud compute networks create لإنشاء شبكة VPC. سنضبط وضع الشبكة الفرعية على "مخصّص" لأنّنا سننشئ شبكاتنا الفرعية في الخطوة التالية. نفِّذ الأوامر التالية في Cloud Shell.

Command

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

إنشاء شبكات فرعية

استخدِم الأمر gcloud compute networks subnets create لإنشاء شبكتَين فرعيتَين، إحداهما في REGION_1 والأخرى في REGION_2. نفِّذ الأوامر التالية في 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 من الشبكات الفرعية لشبكة VPC ومن نطاقات عناوين IP الخاصة بفحص صحة موازن التحميل.

بالإضافة إلى ذلك، عليك أيضًا إنشاء قاعدة جدار الحماية للسماح بمرور بيانات بروتوكول النقل الآمن (SSH) على الأجهزة الافتراضية للعميل.

استخدِم الأمر 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

السماح بنقل البيانات عبر بروتوكول النقل الآمن (SSH) على الجهاز الظاهري للعميل

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

تحتاج إلى بوابات Cloud NAT في كلتا المنطقتين لتتمكّن الأجهزة الافتراضية الخاصة من تنزيل الحِزم وتثبيتها من الإنترنت.

  • ستحتاج الأجهزة الافتراضية لخادم الويب إلى تنزيل خادم ويب Apache وتثبيته.
  • يجب أن تنزّل الآلة الافتراضية للعميل حزمة dnsutils وتثبّتها، وهي الحزمة التي سنستخدمها في الاختبار.

يرتبط كلّ مدخل Cloud NAT بشبكة VPC واحدة ومنطقة واحدة وCloud Router واحد. لذا، قبل إنشاء بوابات NAT، علينا إنشاء أجهزة توجيه Cloud Router في كل منطقة.

إنشاء أجهزة توجيه Cloud Router

استخدِم الأمر gcloud compute routers create لإنشاء أجهزة توجيه Cloud في منطقتَي us-west1 وus-east4. نفِّذ الأوامر التالية في 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

استخدِم الأمر gcloud compute routers nat create لإنشاء بوابات NAT في منطقتَي us-west1 وus-east4. نفِّذ الأوامر التالية في Cloud Shell.

بوابة NAT في المنطقة 1

الأوامر

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 الافتراضية

في هذا القسم، ستنشئ خوادم الويب ومجموعات المثيلات غير المُدارة لخوادم الويب والجهاز الظاهري للعميل.

إنشاء أجهزة افتراضية لخادم الويب

استخدِم الأمر gcloud compute instances create لإنشاء خوادم الويب. علينا إنشاء خادمَي ويب، أحدهما في REGION_1 والآخر في REGION_2. نستخدم نصوصًا برمجية عند بدء التشغيل لتثبيت Apache وضبطه على خوادم الويب.

خادم الويب في المنطقة 1

نفِّذ الأمر التالي في 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

نفِّذ الأمر التالي في 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 Instance Group

الأوامر

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 Instance Group

الأوامر

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. إنشاء أجهزة موازنة حمل داخلية من الطبقة 4

لإنشاء موازن تحميل داخلي من الطبقة 4، علينا إنشاء عملية فحص سلامة وخدمة خلفية وقاعدة إعادة توجيه.

إنشاء عملية تحقّق من الصحة

استخدِم الأمر gcloud compute health-checks create لإنشاء عملية التحقّق من الصحة. نحن بصدد إنشاء عملية تحقّق أساسية من سلامة http، والمنفذ المستهدف هو المنفذ 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. إعداد نظام أسماء النطاقات

في هذا القسم، سننشئ المنطقة الخاصة ومجموعة سجلات نظام أسماء النطاقات باستخدام سياسة توجيه تجاوز الفشل.

إنشاء منطقة نظام أسماء نطاقات خاص

استخدِم الأمر gcloud dns managed-zones create لإنشاء منطقة خاصة للنطاق example.com. سنستخدم هذه المنطقة لإنشاء مجموعة سجلات موارد مع سياسة توجيه تجاوز الفشل. نفِّذ الأمر التالي في 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_2 كهدف لكل من REGION_1 و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. اختبار التحويل باستخدام نظام أسماء النطاقات

قبل اختبار إعداد تجاوز الفشل، لنحتفظ بعناوين IP لكلّ من موازنات الحمل الداخلية. نفِّذ الأوامر التالية في Cloud Shell.

Command

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 | الآلات الافتراضية".

5c824940bf414501.png

انقر على زر SSH لتسجيل الدخول إلى مثيل العميل من وحدة التحكّم.

b916eb32c60a4156.png

بعد الانتقال إلى الجهاز الظاهري للعميل، استخدِم الأمر dig لحلّ اسم النطاق failover.example.com.

تم ضبط التكرار لتنفيذ الأمر عشر مرات مع مؤقّت إيقاف التشغيل لمدة 6 ثوانٍ.

Command

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

بما أنّ مدة البقاء (TTL) في سجلّ نظام أسماء النطاقات مضبوطة على 5 ثوانٍ، تمت إضافة موقّت إيقاف التشغيل مدته 6 ثوانٍ. سيضمن موقّت إيقاف التشغيل حصولك على استجابة غير مخزّنة مؤقتًا من نظام أسماء النطاقات لكل طلب من نظام أسماء النطاقات. سيستغرق تنفيذ هذا الأمر دقيقة واحدة تقريبًا.

في الناتج، سيظهر لك عنوان IP الخاص بجهاز موازنة الحمل في المجموعة الأساسية لسجلّ الموارد. في عملية الإعداد، سيكون هذا هو عنوان IP لجهاز موازنة الحمل في منطقة us-west1.

11. اختبار تجاوز الفشل

سنحاكي عملية تجاوز الفشل من خلال إزالة علامة الشبكة من الجهاز الظاهري REGION_1. سيؤدي ذلك إلى حظر الوصول إلى المنفذ 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

في الناتج، سيظهر لك عنوان IP لجهاز موازنة الحمل في مجموعة النسخ الاحتياطية لسجلّ الموارد. في عملية الإعداد، سيكون هذا هو عنوان IP لجهاز موازنة الحمل في المنطقة us-east4.

12. اختبار تدفّق الزيارات

بشكلٍ تلقائي، تعرض سياسة التبديل التلقائي عنوان IP لنقطة النهاية الأساسية لجميع طلبات نظام أسماء النطاقات، ولا تعرض عناوين IP الاحتياطية إلا إذا لم تجتَز نقطة النهاية الأساسية عمليات التحقّق من الصحة. تسمح خدمة Cloud DNS للمستخدمين بإعداد "نسبة التوزيع التدريجي" التي تتيح لخدمة Cloud DNS إرسال جزء من عدد الزيارات إلى الأهداف الاحتياطية، حتى عندما تكون الأهداف الأساسية سليمة. يجب أن تكون النسبة قيمة بين 0 و1. القيمة التلقائية هي 0

لاختبار ذلك، لنضِف علامة الشبكة مرة أخرى إلى خادم الويب REGION_1.

إضافة علامة شبكة

أضِف العلامة مرة أخرى إلى الجهاز الافتراضي لخادم الويب للسماح بنقل بيانات http إلى الجهاز الافتراضي للمنطقة الأساسية. نفِّذ الأمر التالي في Cloud Shell.

Command

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

سيتم اجتياز عمليات التحقّق من الصحة في غضون 10 ثوانٍ

تأكَّد من أنّ التحويل باستخدام نظام أسماء النطاقات (DNS) يشير إلى موازن التحميل الأساسية. في عملية الإعداد، سيكون هذا هو عنوان IP لجهاز موازنة الحمل في منطقة 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 سيتم تحويله إلى عنوان IP لموازنة التحميل الأساسية بنسبة% 70 تقريبًا، وإلى عنوان IP لموازنة التحميل الاحتياطية بنسبة% 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
  • اختبار تجاوز تعذُّر نظام أسماء النطاقات
  • كيفية توجيه عدد قليل من الزيارات إلى مجموعة النسخ الاحتياطية

ما هي الخطوات التالية؟

  • محاولة إعداد عناوين IP متعددة للمجموعات النشطة والاحتياطية
  • جرِّب إضافة العديد من الأجهزة الافتراضية الخلفية إلى مجموعات الأجهزة الافتراضية غير المُدارة
  • حاوِل إعداد عدّة موازنات تحميل في مناطق مختلفة لسياسة الموقع الجغرافي في مجموعة النسخ الاحتياطية.

مزيد من المعلومات

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