Codelab بهینه سازی های متعادل کننده بار پیشرفته

۱. مقدمه

به آزمایشگاه کد بهینه‌سازی‌های پیشرفته‌ی متعادل‌سازی بار خوش آمدید!

در این آزمایشگاه کد، نحوه پیکربندی گزینه‌های پیشرفته متعادل‌سازی بار برای متعادل‌کننده بار برنامه خارجی سراسری را خواهید آموخت. قبل از شروع، توصیه می‌شود ابتدا سند مربوط به متعادل‌سازی بار ابری ( https://cloud.google.com/load-balancing/docs/load-balancing-overview ) را بررسی کنید.

c3fb1d3f027e8640.png

شکل ۱. گردش کار انتخاب یک نقطه پایانی مقصد با متعادل‌کننده بار برنامه خارجی سراسری.

توپولوژی Codelab و موارد استفاده

2f7368df335d3de9.png

شکل 2. توپولوژی مسیریابی متعادل‌کننده بار HTTP

در طول این آزمایش کد، شما دو گروه نمونه مدیریت‌شده راه‌اندازی خواهید کرد. شما یک متعادل‌کننده بار خارجی سراسری https ایجاد خواهید کرد. متعادل‌کننده بار از چندین ویژگی از فهرست قابلیت‌های پیشرفته‌ای که متعادل‌کننده بار مبتنی بر نماینده پشتیبانی می‌کند، استفاده خواهد کرد. پس از استقرار، شما یک بار شبیه‌سازی شده ایجاد خواهید کرد و تأیید می‌کنید که پیکربندی‌هایی که تنظیم کرده‌اید به درستی کار می‌کنند.

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

  • چگونه ServiceLbPolicy را برای تنظیم دقیق متعادل‌کننده بار خود پیکربندی کنیم؟

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

  • آشنایی با متعادل‌سازی بار HTTPS خارجی. نیمه اول این آزمایشگاه کد کاملاً شبیه به آزمایشگاه کد مدیریت ترافیک پیشرفته (Envoy) با عنوان External HTTPs LB ( https://codelabs.developers.google.com/codelabs/externalhttplb-adv ) است. توصیه می‌شود ابتدا آن را مطالعه کنید.

۲. قبل از شروع

داخل Cloud Shell، مطمئن شوید که شناسه پروژه شما تنظیم شده است

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

فعال کردن APIها

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

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com
gcloud services enable networkservices.googleapis.com

۳. شبکه VPC را ایجاد کنید

ایجاد شبکه VPC

از پوسته ابری

gcloud compute networks create httplbs --subnet-mode=auto

خروجی

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs].
NAME     SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
httplbs  AUTO         REGIONAL

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

پس از ایجاد VPC، اکنون یک قانون فایروال ایجاد خواهید کرد. این قانون فایروال برای اجازه دادن به همه IP ها برای دسترسی به IP خارجی وب سایت برنامه آزمایشی در پورت 80 برای ترافیک http استفاده خواهد شد.

از پوسته ابری

gcloud compute firewall-rules create httplb-allow-http-rule \
--allow tcp:80 \
--network httplbs \
--source-ranges 0.0.0.0/0 \
--priority 700

خروجی

Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule].
Creating firewall...done.
NAME                    NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
httplb-allow-http-rule  httplbs  INGRESS    700       tcp:80        False

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

از پوسته ابری

gcloud compute firewall-rules create fw-allow-ssh \
    --network=httplbs \
    --action=allow \
    --direction=ingress \
    --target-tags=allow-ssh \
    --rules=tcp:22

خروجی

Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/fw-allow-ssh].
Creating firewall...done.
NAME          NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
fw-allow-ssh  httplbs  INGRESS    1000      tcp:22        False

۴. گروه‌های نمونه مدیریت‌شده را تنظیم کنید

شما باید گروه‌های نمونه مدیریت‌شده (Managed Instance Groups) را تنظیم کنید که شامل الگوهایی برای منابع backend مورد استفاده توسط HTTP Load Balancer باشد. ابتدا قالب‌های نمونه (Instance Templates) را ایجاد می‌کنیم که پیکربندی ماشین‌های مجازی (VM) ایجاد شده برای هر منطقه را تعریف می‌کنند. در مرحله بعد، برای یک backend در هر منطقه، یک گروه نمونه مدیریت‌شده (Managed Instance Group) ایجاد می‌کنیم که به یک قالب نمونه (Instance Template) ارجاع می‌دهد.

گروه‌های نمونه مدیریت‌شده می‌توانند از نظر دامنه، منطقه‌ای یا ناحیه‌ای باشند. برای این تمرین آزمایشگاهی، گروه‌های نمونه مدیریت‌شده منطقه‌ای ایجاد خواهیم کرد.

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

ایجاد الگوهای نمونه

اولین قدم ایجاد یک الگوی نمونه است.

از پوسته ابری

gcloud compute instance-templates create test-template \
   --network=httplbs \
   --tags=allow-ssh,http-server \
   --image-family=debian-9 \
   --image-project=debian-cloud \
   --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'

خروجی

NAME           MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
test-template  n1-standard-1               2021-11-09T09:24:35.275-08:00

اکنون می‌توانید با دستور gcloud زیر، ایجاد موفقیت‌آمیز الگوهای نمونه ما را تأیید کنید:

از پوسته ابری

gcloud compute instance-templates list

خروجی

NAME                  MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
test-template         n1-standard-1         2021-11-09T09:24:35.275-08:00

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

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

از پوسته ابری

gcloud compute instance-groups managed create us-east1-a-mig \
--size=1 \
--template=test-template \
--zone=us-east1-a

خروجی

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instanceGroupManagers/us-east1-a-mig].
NAME            LOCATION    SCOPE  BASE_INSTANCE_NAME   SIZE  TARGET_SIZE  INSTANCE_TEMPLATE  AUTOSCALED
us-east1-a-mig  us-east1-a  zone   us-east1-a-mig       0     1            test-template      no

از پوسته ابری

gcloud compute instance-groups managed create us-east1-b-mig \
--size=5 \
--template=test-template \
--zone=us-east1-b

خروجی

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-b-mig].
NAME            LOCATION    SCOPE  BASE_INSTANCE_NAME   SIZE  TARGET_SIZE  INSTANCE_TEMPLATE  AUTOSCALED
us-east1-b-mig  us-east1-b  zone   us-east1-b-mig       0     5            test-template      no

می‌توانیم با دستور gcloud زیر، ایجاد موفقیت‌آمیز گروه‌های نمونه خود را تأیید کنیم:

از پوسته ابری

gcloud compute instance-groups list

خروجی

NAME                  LOCATION      SCOPE   NETWORK         MANAGED INSTANCES
us-east1-a-mig        us-east1-a    zone    httplbs          Yes      1
us-east1-b-mig        us-east1-b    zone    httplbs          Yes      5

بررسی عملکرد وب سرور

هر نمونه طوری پیکربندی شده است که یک وب سرور آپاچی را با یک اسکریپت ساده PHP اجرا کند که چیزی شبیه به زیر را رندر می‌کند:

صفحه ارائه شده از: us-east1-a-mig-ww2h

برای اطمینان از عملکرد صحیح سرورهای وب خود، به Compute Engine -> VM instances بروید. مطمئن شوید که نمونه‌های جدید شما (مثلاً us-east1-a-mig-xxx) مطابق با تعاریف گروه نمونه آنها ایجاد شده‌اند.

اکنون، یک درخواست وب در مرورگر خود به آن ارسال کنید تا مطمئن شوید که وب سرور در حال اجرا است (شروع این کار ممکن است یک دقیقه طول بکشد). در صفحه نمونه‌های ماشین مجازی در زیر Compute Engine، نمونه‌ای را که توسط گروه نمونه شما ایجاد شده است انتخاب کنید و روی IP خارجی (عمومی) آن کلیک کنید.

یا در مرورگر خود، به آدرس http://<IP_Address> بروید.

۵. تنظیم متعادل‌کننده بار

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

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

از پوسته ابری

gcloud compute health-checks create http http-basic-check \
    --port 80

خروجی

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check].
NAME              PROTOCOL
http-basic-check  HTTP

رزرو آدرس IP خارجی

برای این مرحله، شما باید یک آدرس IP استاتیک جهانی رزرو کنید که بعداً به متعادل‌کننده بار متصل خواهد شد.

از پوسته ابری

gcloud compute addresses create lb-ipv4-2 \
    --ip-version=IPV4 \
    --global

خروجی

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].

حتماً آدرس IP رزرو شده را یادداشت کنید.

gcloud compute addresses describe lb-ipv4-2 \
    --format="get(address)" \
    --global

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

حالا باید یک سرویس backend برای گروه‌های نمونه مدیریت‌شده‌ای که قبلاً ایجاد کردیم، ایجاد کنیم.

از پوسته ابری

gcloud compute backend-services create east-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

خروجی

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service].
NAME                  BACKENDS  PROTOCOL
east-backend-service            HTTP

اضافه کردن MIG ها به سرویس های Backend

حالا که سرویس‌های بک‌اند را ایجاد کرده‌ایم، باید گروه‌های نمونه مدیریت‌شده‌ای که قبلاً ایجاد کرده‌ایم را به هر سرویس بک‌اند اضافه کنیم.

از پوسته ابری

gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global

از پوسته ابری

gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global

با اجرای دستور زیر می‌توانید تأیید کنید که backendها اضافه شده‌اند.

از پوسته ابری

gcloud compute backend-services list

خروجی

NAME                  BACKENDS                                                                                               PROTOCOL
east-backend-service  us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig  HTTP

ایجاد نقشه URL

حالا یک نقشه URL ایجاد خواهیم کرد.

gcloud compute url-maps create web-map-http \
    --default-service=east-backend-service \
    --global

خروجی

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http].
NAME          DEFAULT_SERVICE
web-map-http  backendServices/east-backend-service

ایجاد رابط کاربری HTTP

مرحله آخر در ایجاد متعادل‌کننده بار، ایجاد frontend است. این کار آدرس IP که قبلاً رزرو کرده‌اید را به نقشه URL متعادل‌کننده بار که ایجاد کرده‌اید، نگاشت می‌کند.

از پوسته ابری

gcloud compute target-http-proxies create http-lb-proxy-adv \
    --url-map=web-map-http

خروجی

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxies/http-lb-proxy-adv].
NAME               URL_MAP
http-lb-proxy-adv  web-map-http

در مرحله بعد باید یک قانون ارسال سراسری ایجاد کنید که آدرس IP رزرو شده قبلی را به پروکسی HTTP نگاشت کند.

از پوسته ابری

gcloud compute forwarding-rules create http-content-rule \
    --load-balancing-scheme EXTERNAL_MANAGED \
    --address=lb-ipv4-2 \
    --global \
    --target-http-proxy=http-lb-proxy-adv \
    --ports=80

در این مرحله، می‌توانید تأیید کنید که متعادل‌کننده بار با آدرس IP که قبلاً یادداشت کرده‌اید، کار می‌کند.

۶. تأیید کنید که متعادل‌کننده بار کار می‌کند

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

ایجاد Siege-vm

حالا شما siege-vm را ایجاد خواهید کرد که برای تولید بار از آن استفاده خواهید کرد.

از پوسته ابری

gcloud compute instances create siege-vm \
    --network=httplbs \
    --zone=us-east1-a \
    --machine-type=e2-medium \
    --tags=allow-ssh,http-server \
    --metadata=startup-script='sudo apt-get -y install siege'

خروجی

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instances/siege-vm].
NAME      ZONE             MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
siege-vm  us-central1-ir1  e2-medium                  10.132.0.15  34.143.20.68  RUNNING

سپس می‌توانید با استفاده از SSH به ماشین مجازی که ایجاد کرده‌اید، متصل شوید. پس از ایجاد، روی SSH کلیک کنید تا ترمینال اجرا شود و اتصال برقرار شود.

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

از پوسته ابری

siege -c 20 http://$lb-ipv4-2

خروجی

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file

بررسی توزیع بار

اکنون که Siege در حال اجرا است، زمان آن رسیده است که بررسی کنیم ترافیک به طور مساوی بین دو گروه نمونه مدیریت شده توزیع می‌شود.

محاصره را متوقف کنید

حالا که نشان دادید تقسیم ترافیک پیشرفته کار می‌کند، وقت آن رسیده که محاصره را متوقف کنید. برای انجام این کار، به ترمینال SSH در siege-vm برگردید و CTRL+C را فشار دهید تا محاصره متوقف شود.

۷. پیکربندی سیاست Lb سرویس

ایجاد یک سیاست LB سرویس

اکنون که تنظیمات اولیه انجام شد، یک سیاست Load Balancing برای سرویس ایجاد می‌کنیم و ویژگی‌های پیشرفته را امتحان می‌کنیم. به عنوان مثال، سرویس را طوری پیکربندی می‌کنیم که از برخی تنظیمات پیشرفته Load Balancing استفاده کند. در این مثال، ما فقط یک سیاست برای اعمال ویژگی تخلیه خودکار ظرفیت ایجاد می‌کنیم. اما می‌توانید ویژگی‌های دیگر را نیز امتحان کنید.

از پوسته ابری

gcloud beta network-services service-lb-policies create http-policy \
    --auto-capacity-drain --location=global

می‌توانیم با دستور gcloud زیر، تأیید کنیم که پالیسی ما با موفقیت ایجاد شده است:

از پوسته ابری

gcloud beta network-services service-lb-policies list --location=global

خروجی

NAME
http-policy

سیاست LB سرویس را به سرویس backend پیوست کنید

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

از پوسته ابری

gcloud beta compute backend-services update east-backend-service \
    --service-lb-policy=http-policy --global

۸. سلامت بک‌اند را تنظیم کنید

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

ویژگی تخلیه خودکار ظرفیت، زمانی که تعداد کل سرورهای سالم به زیر یک آستانه (25%) کاهش یابد، به طور خودکار یک سرور MIG بک‌اند را از متعادل‌کننده بار حذف می‌کند. برای آزمایش این ویژگی، ما به ماشین‌های مجازی در us-east1-b-mig از طریق SSH متصل می‌شویم و آنها را ناسالم می‌کنیم. با آستانه 25%، باید به چهار ماشین مجازی از طریق SSH متصل شوید و سرور آپاچی را خاموش کنید.

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

sudo apachectl stop

در این مرحله، ویژگی تخلیه خودکار ظرفیت فعال می‌شود و us-east1-b-mig درخواست‌های جدیدی دریافت نخواهد کرد.

۹. بررسی کنید که ویژگی تخلیه خودکار ظرفیت کار می‌کند

شروع مجدد محاصره

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

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

از پوسته ابری

siege -c 20 http://$lb-ipv4-2

خروجی

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file

در این مرحله، متوجه خواهید شد که همه درخواست‌ها به us-east1-a-mig ارسال می‌شوند.

محاصره را متوقف کنید

حالا که نشان دادید تقسیم ترافیک پیشرفته کار می‌کند، وقت آن رسیده که محاصره را متوقف کنید. برای انجام این کار، به ترمینال SSH در siege-vm برگردید و CTRL+C را فشار دهید تا محاصره متوقف شود.

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

حالا که کارمان با محیط آزمایشگاهی تمام شد، وقت آن رسیده که آن را از بین ببریم. لطفاً دستورات زیر را برای حذف محیط آزمایشی اجرا کنید.

از پوسته ابری

gcloud compute instances delete siege-vm --zone=us-east1-a

gcloud compute forwarding-rules delete http-content-rule --global
gcloud compute target-http-proxies delete http-lb-proxy-adv

gcloud compute url-maps delete web-map-http

gcloud compute backend-services delete east-backend-service --global

gcloud compute addresses delete lb-ipv4-2 --global
gcloud compute health-checks delete http-basic-check 

gcloud beta network-services service-lb-policies delete http-policy --location=global

gcloud compute instance-groups managed delete us-east1-a-mig --zone=us-east1-a
gcloud compute instance-groups managed delete us-east1-b-mig --zone=us-east1-b

gcloud compute instance-templates delete test-template 

gcloud compute firewall-rules delete httplb-allow-http-rule
gcloud compute firewall-rules delete fw-allow-ssh

gcloud compute networks delete httplbs 

۱۱. تبریک می‌گویم!

تبریک می‌گویم که آزمایشگاه کد را تمام کردی.

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

  • ایجاد یک متعادل‌کننده بار برنامه خارجی با سیاست سرویس lb.
  • سرویس بک‌اند خود را با قابلیت تخلیه خودکار ظرفیت پیکربندی کنید.

مراحل بعدی

  • سایر ویژگی‌های ارائه شده توسط خط‌مشی سرویس lb را امتحان کنید.