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

1. مقدمة

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

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

تتيح سياسات توجيه Cloud 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 على إشارات مباشرة لحالة الصحة من مثيلات الواجهة الخلفية الفردية. يمكنك الاطّلاع هنا على تفاصيل عمليات التحقّق من الصحة .

ما الذي ستنشئه

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

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

  • جهاز موازنة الحمل الداخلي في L4 في {/1}
  • جهاز افتراضي (VM) يشغّل خادم ويب Apache في AR_1

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

  • جهاز موازنة الحمل الداخلي في L4 في {/1}
  • جهاز افتراضي (VM) يشغّل خادم ويب Apache في AR_2

تظهر عملية الإعداد أدناه:

d0a91d3d3698f544.png

المعلومات التي ستطّلع عليها

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

المتطلبات

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.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- إصدار حزمة تطوير البرامج (SDK) لخدمة Google Cloud

في وقت كتابة هذه الرسالة، كان 401.0.0 هو أحدث إصدار من حزمة Google Cloud SDK. تم اختبار جميع الأوامر في هذا التمرين المعملي باستخدام أحدث إصدار من Google Cloud SDK. قبل المتابعة، يُرجى التأكّد من استخدام Cloud Shell أحدث إصدار من حزمة تطوير البرامج (SDK).

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

استخدِم الأمر gcloud version للتحقّق من إصدار حزمة SDK. تشغيل الأوامر التالية في 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

4. قبل البدء

قبل البدء في نشر البنية التي أوضحناها أعلاه، علينا التأكّد من ضبط Cloud Shell بشكلٍ صحيح وتفعيل جميع واجهات برمجة التطبيقات المطلوبة.

إعداد رقم تعريف المشروع

داخل Cloud Shell، تأكَّد من إعداد رقم تعريف مشروعك. إذا كان طلب Cloud Shell يشبه الناتج أدناه ولا تخطِّط لتغيير رقم تعريف المشروع، يمكنك التخطّي إلى الخطوة التالية (Set Environment Variables).

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

الأمر

gcloud services enable compute.googleapis.com

تفعيل DNS API

الأمر

gcloud services enable dns.googleapis.com

إثبات الملكية

والآن بعد أن تم تفعيل الخدمات، لنتحقق من ذلك باستخدام الأمر gcloud services list لإدراج جميع واجهات برمجة التطبيقات المفعَّلة.

الأمر

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.

الأمر

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

إنشاء قواعد جدار الحماية

يجب السماح بالزيارات على المنفذ 80 من الشبكات الفرعية لشبكة VPC ومن نطاقات عناوين IP الخاصة بالتحقق من صحة جهاز موازنة الحمل.

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

استخدِم الأمر gcloud compute firewall-rules create لإنشاء قواعد جدار الحماية. تشغيل الأوامر التالية في Cloud Shell

السماح بالزيارات في المنفذ 80

الأمر

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

السماح بزيارات بروتوكول النقل الآمن على الجهاز الافتراضي للعميل

الأمر

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- إنشاء ترجمة عنوان الشبكة في السحابة الإلكترونية

تحتاج إلى مداخل آلية ترجمة عنوان الشبكة في السحابة الإلكترونية في كلتا المنطقتين حتى تتمكّن الأجهزة الافتراضية الخاصة من تنزيل الحزم وتثبيتها من الإنترنت.

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

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

إنشاء أجهزة توجيه السحابة الإلكترونية

استخدِم الأمر gcloud compute routers create لإنشاء أجهزة توجيه السحابة الإلكترونية في منطقتَي 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_1 في Region

الأوامر

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_2

الأوامر

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 والآخر في بعد تتمّ المنشآت. نستخدم النصوص البرمجية لبدء التشغيل لتثبيت Apache وتهيئته على خوادم الويب.

خادم الويب 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 لإضافة المثيلات إلى مجموعات المثيلات التي أنشأناها للتو. إضافة خادم الويب بعد A

مجموعة المثيلات 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.

الأمر

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 ILB، نحتاج إلى إنشاء فحص صحي وخدمة خلفية وقاعدة إعادة توجيه.

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

استخدِم الأمر gcloud compute health-checks create لإنشاء ميزة التحقّق من الصحة. نحن بصدد إنشاء فحص أساسي للتحقق من سلامة http والمنفذ المستهدف هو المنفذ 80. تشغيل الأوامر التالية في Cloud Shell

الأمر

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

إضافة خلفية

الأمر

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 لإنشاء سجلّ نظام أسماء النطاقات يتضمّن سياسة توجيه تجاوز الإخفاق. الهدف الأساسي هو جهاز موازنة الحمل في {/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"

10. اختبار التحويل باستخدام نظام أسماء النطاقات (DNS)

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

الأمر

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

مثال على الناتج

في هذا المثال، يتضمّن us-west1-ilb عنوان IP هو 10.1.0.4 وعنوان IP الخاص بالوحدة 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

سنسجل الدخول الآن إلى مثيل العميل ونختبر التحويل باستخدام نظام أسماء النطاقات (DNS). في وحدة تحكم الويب، انتقل إلى "Compute Engine | مثيلات الأجهزة الافتراضية"

5c824940bf414501.png

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

b916eb32c60a4156.png

والآن بعد أن أصبحنا في الجهاز الافتراضي (VM) الخاص بالعميل، استخدِم الأمر dig لحلّ اسم النطاق failover.example.com.

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

الأمر

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

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

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

11. اختبار تجاوز الأعطال

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

إزالة علامة الشبكة

استخدِم الأمر gcloud compute instances remove-tags لإزالة علامة الشبكة من الجهاز الافتراضي (VM). نفِّذ الأمر التالي في Cloud Shell

الأمر

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

سيتعذّر التحقّق من الصحة بعد 10 ثوانٍ. شغِّل اختبار تحليل نظام أسماء النطاقات مرة أخرى.

تحليل نظام أسماء النطاقات

من مثيل العميل، شغّل الأمر التالي

الأمر

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.

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

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

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

الأمر

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

سيتم اجتياز عمليات التحقق من الصحة خلال 10 ثوانٍ

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

من مثيل العميل، شغّل الأمر التالي

الأمر

dig +short failover.example.com

تعديل سجلّ نظام أسماء النطاقات

سنُعدّل الآن سجلّ نظام أسماء النطاقات الخاص بـ 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

تحليل نظام أسماء النطاقات

نفِّذ الطلب التالي من الجهاز الافتراضي (VM) الخاص بالعميل. ستلاحظ أنّ سجلّ نظام أسماء النطاقات 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