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

1. مقدمه

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

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

c3fb1d3f027e8640.png

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

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

2f7368df335d3de9.png

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

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

چیزی که یاد خواهید گرفت

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

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

  • آشنایی با Load Balancing خارجی HTTPS. نیمه اول این کد لبه کاملاً شبیه به HTTP های خارجی LB با Codelab مدیریت ترافیک پیشرفته (Envoy) ( https://codelabs.developers.google.com/codelabs/externalhttplb-adv ) است. توصیه می شود ابتدا آن را مرور کنید.

2. قبل از شروع

در داخل 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

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

یک شبکه VPC ایجاد کنید

از Cloud Shell

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 خارجی وب سایت برنامه آزمایشی در پورت 80 برای ترافیک http مورد استفاده قرار خواهد گرفت.

از Cloud Shell

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 اجازه دهیم.

از Cloud Shell

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

4. گروه های نمونه مدیریت شده را راه اندازی کنید

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

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

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

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

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

از Cloud Shell

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 زیر ایجاد شده اند:

از Cloud Shell

gcloud compute instance-templates list

خروجی

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

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

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

از Cloud Shell

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

از Cloud Shell

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 زیر می توانیم تأیید کنیم که گروه های نمونه ما با موفقیت ایجاد شده اند:

از Cloud Shell

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 -> Instances VM بروید. اطمینان حاصل کنید که نمونه های جدید شما (به عنوان مثال us-east1-a-mig-xxx) مطابق با تعاریف گروه نمونه آنها ایجاد شده است.

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

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

5. Load Balancer را راه اندازی کنید

ایجاد چک سلامت

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

از Cloud Shell

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 ثابت جهانی را رزرو کنید که بعداً به Load Balancer متصل می شود.

از Cloud Shell

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 ایجاد کنید

اکنون باید یک سرویس Backend برای گروه‌های نمونه مدیریت شده ایجاد کنیم.

از Cloud Shell

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 اضافه کنید

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

از Cloud Shell

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

از Cloud Shell

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

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

از Cloud Shell

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 متعادل کننده بار که ایجاد کردید نگاشت می کند.

از Cloud Shell

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 ترسیم می کند.

از Cloud Shell

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 که قبلاً ذکر کرده اید کار می کند.

6. بررسی کنید که Load Balancer کار می کند

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

Siege-vm را ایجاد کنید

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

از Cloud Shell

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 را در VMی که ایجاد کرده اید SSH کنید. پس از ایجاد، روی SSH کلیک کنید تا ترمینال راه اندازی شود و متصل شوید.

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

از Cloud Shell

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 را فشار دهید تا اجرای محاصره متوقف شود.

7. Service Lb Policy را پیکربندی کنید

یک خط مشی LB Service ایجاد کنید

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

از Cloud Shell

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

با دستور gcloud زیر می توانیم تأیید کنیم که خط مشی ما با موفقیت ایجاد شده است:

از Cloud Shell

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

خروجی

NAME
http-policy

Service LB Policy را به سرویس Backend پیوست کنید

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

از Cloud Shell

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

8. بهینه سازی Backend Health

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

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

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

sudo apachectl stop

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

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

محاصره را دوباره راه اندازی کنید

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

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

از Cloud Shell

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 را فشار دهید تا اجرای محاصره متوقف شود.

10. مراحل پاکسازی

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

از Cloud Shell

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 

11. تبریک می گویم!

برای تکمیل کد لبه تبریک می گویم.

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

  • ایجاد یک متعادل کننده بار برنامه خارجی با خط مشی سرویس lb.
  • سرویس پشتیبان خود را با ویژگی تخلیه خودکار ظرفیت پیکربندی کنید.

مراحل بعدی

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