تجاوز الأعطال في مناطق متعدّدة باستخدام سياسات توجيه نظام أسماء النطاقات في 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.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- إصدار Google Cloud SDK

في وقت كتابة هذا المقال، كان الإصدار 401.0.0 هو أحدث إصدار من حزمة تطوير البرامج (SDK) من Google Cloud. تم اختبار جميع الأوامر في هذا المختبر باستخدام أحدث إصدار من 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.

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

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

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

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

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

الأوامر

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

الأوامر

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 ثوانٍ. سيضمن موقّت إيقاف التشغيل حصولك على استجابة غير مخزّنة مؤقتًا لكل طلب DNS. سيستغرق تنفيذ هذا الأمر دقيقة واحدة تقريبًا.

في الناتج، سيظهر لك عنوان 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