Lớp học lập trình về Tối ưu hoá cân bằng tải nâng cao

1. Giới thiệu

Chào mừng bạn đến với lớp học lập trình về tối ưu hoá cân bằng tải nâng cao!

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách định cấu hình các tuỳ chọn cân bằng tải nâng cao cho trình cân bằng tải ứng dụng bên ngoài chung. Trước khi bắt đầu, bạn nên xem tài liệu về tính năng cân bằng tải trên đám mây ( https://cloud.google.com/load-balancing/docs/load-balancing-overview)

c3fb1d3f027e8640.png

Hình 1. Quy trình chọn điểm cuối đích bằng trình cân bằng tải ứng dụng bên ngoài toàn cầu.

Cấu trúc liên kết và trường hợp sử dụng của lớp học lập trình

2f7368df335d3de9.png

Hình 2. Cấu trúc liên kết định tuyến của Trình cân bằng tải HTTP

Trong lớp học lập trình này, bạn sẽ thiết lập hai nhóm thực thể được quản lý. Bạn sẽ tạo một trình cân bằng tải https bên ngoài toàn cầu. Trình cân bằng tải sẽ sử dụng một số tính năng trong danh sách các tính năng nâng cao mà trình cân bằng tải dựa trên envoy hỗ trợ. Sau khi triển khai, bạn sẽ tạo một số tải được mô phỏng và xác minh rằng các cấu hình bạn đặt đang hoạt động đúng cách.

Kiến thức bạn sẽ học được

  • Cách định cấu hình ServiceLbPolicy để tinh chỉnh bộ cân bằng tải.

Bạn cần có

  • Có kiến thức về tính năng Cân bằng tải HTTPS bên ngoài. Nửa đầu của lớp học lập trình này khá giống với Lớp học lập trình LB HTTP bên ngoài với Lớp học lập trình về Quản lý lưu lượng truy cập nâng cao (Envoy) (https://codelabs.developers.google.com/codelabs/externalhttplb-adv). Bạn nên làm việc đó trước.

2. Trước khi bắt đầu

Trong Cloud Shell, hãy đảm bảo bạn đã thiết lập mã dự án

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

Cho phép API

Bật tất cả các dịch vụ cần thiết

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. Tạo mạng VPC

Tạo mạng lưới VPC

Của Cloud Shell

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

Đầu ra

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

Tạo quy tắc tường lửa VPC

Sau khi tạo VPC, giờ bạn sẽ tạo một quy tắc về tường lửa. Quy tắc tường lửa sẽ được dùng để cho phép tất cả IP truy cập IP ngoài trên trang web của ứng dụng kiểm tra trên cổng 80 đối với lưu lượng truy cập http.

Của 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

Đầu ra

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

Trong lớp học lập trình này, chúng ta sẽ điều chỉnh tình trạng của các máy ảo. Vì vậy, chúng ta cũng sẽ tạo các quy tắc tường lửa để cho phép SSH.

Trong Cloud Shell

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

Đầu ra

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. Thiết lập Nhóm thực thể được quản lý

Bạn cần thiết lập Nhóm thực thể được quản lý, trong đó có các mẫu cho tài nguyên phụ trợ mà Trình cân bằng tải HTTP sử dụng. Trước tiên, chúng ta sẽ tạo Mẫu thực thể để xác định cấu hình cho các máy ảo sẽ được tạo cho từng khu vực. Tiếp theo, đối với phần phụ trợ ở mỗi khu vực, chúng ta sẽ tạo một Nhóm thực thể được quản lý tham chiếu đến một Mẫu thực thể.

Phạm vi của nhóm Thực thể được quản lý có thể là theo Khu vực hoặc theo Khu vực. Đối với bài tập trong phòng thí nghiệm này, chúng ta sẽ tạo Nhóm thực thể được quản lý theo vùng.

Trong phần này, bạn có thể thấy một tập lệnh khởi động được tạo sẵn sẽ được tham chiếu khi tạo thực thể. Tập lệnh khởi động này cài đặt và bật các chức năng của máy chủ web mà chúng ta sẽ dùng để mô phỏng ứng dụng web. Bạn có thể khám phá tập lệnh này.

Tạo mẫu thực thể

Bước đầu tiên là tạo một mẫu thực thể.

Trong 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'

Đầu ra

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

Giờ đây, bạn có thể xác minh các mẫu thực thể của chúng ta đã được tạo thành công bằng lệnh gcloud sau đây:

Trong Cloud Shell

gcloud compute instance-templates list

Đầu ra

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

Tạo nhóm thực thể

Bây giờ, chúng ta phải tạo một nhóm thực thể được quản lý từ các mẫu thực thể mà chúng ta đã tạo trước đó.

Trong Cloud Shell

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

Đầu ra

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

Trong Cloud Shell

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

Đầu ra

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

Chúng ta có thể xác minh các nhóm thực thể của mình đã được tạo thành công hay chưa bằng lệnh gcloud sau đây:

Trong Cloud Shell

gcloud compute instance-groups list

Đầu ra

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

Xác minh chức năng của máy chủ web

Mỗi phiên bản được định cấu hình để chạy máy chủ web Apache bằng tập lệnh PHP đơn giản hiển thị như dưới đây:

Trang phân phát từ: us-east1-a-mig-ww2h

Để đảm bảo máy chủ web của bạn đang hoạt động đúng cách, hãy chuyển đến Compute Engine -> Phiên bản máy ảo. Đảm bảo rằng các phiên bản mới (ví dụ: us-east1-a-mig-xxx) đã được tạo theo định nghĩa nhóm phiên bản của chúng.

Bây giờ, hãy tạo một yêu cầu web trong trình duyệt của bạn để đảm bảo máy chủ web đang chạy (quá trình này có thể mất một phút để bắt đầu). Trên trang các phiên bản máy ảo trong phần Compute Engine, hãy chọn một phiên bản do nhóm thực thể của bạn tạo rồi nhấp vào IP bên ngoài (công khai) của phiên bản đó.

Hoặc trong trình duyệt, hãy truy cập vào http://<IP_Address>

5. Thiết lập Trình cân bằng tải

Tạo tính năng Kiểm tra tình trạng

Trước tiên, chúng ta phải tạo một quy trình kiểm tra tình trạng cơ bản để đảm bảo rằng các dịch vụ của chúng ta đang hoạt động thành công. Chúng ta sẽ tạo một quy trình kiểm tra tình trạng cơ bản, nhưng bạn có thể tuỳ chỉnh nhiều hơn nữa.

Của Cloud Shell

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

Đầu ra

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

Đặt trước địa chỉ IP bên ngoài

Ở bước này, bạn cần đặt trước một địa chỉ IP tĩnh có sẵn trên toàn cầu. Sau đó, địa chỉ này sẽ được đính kèm vào Trình cân bằng tải.

Trong Cloud Shell

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

Đầu ra

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

Hãy nhớ ghi lại Địa chỉ IP đã được đặt trước.

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

Tạo dịch vụ phụ trợ

Bây giờ, chúng ta phải tạo một dịch vụ phụ trợ cho các nhóm thực thể được quản lý mà chúng ta đã tạo trước đó.

Của 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

Đầu ra

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

Thêm MIG vào Dịch vụ phụ trợ

Giờ đây, khi đã tạo các dịch vụ phụ trợ, chúng ta phải thêm các Nhóm thực thể được quản lý mà chúng ta đã tạo trước đó vào từng dịch vụ phụ trợ.

Của Cloud Shell

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

Trong Cloud Shell

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

Bạn có thể xác minh rằng các phần phụ trợ đã được thêm bằng cách chạy lệnh sau.

Trong Cloud Shell

gcloud compute backend-services list

Đầu ra

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

Tạo bản đồ URL

Bây giờ, chúng ta sẽ tạo một bản đồ URL.

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

Đầu ra

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

Tạo giao diện người dùng HTTP

Bước cuối cùng để tạo trình cân bằng tải là tạo giao diện người dùng. Thao tác này sẽ liên kết địa chỉ IP mà bạn đã đặt trước với sơ đồ URL của bộ cân bằng tải mà bạn đã tạo.

Của Cloud Shell

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

Đầu ra

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

Tiếp theo, bạn cần tạo một quy tắc chuyển tiếp chung sẽ liên kết địa chỉ IP được đặt trước đó với proxy HTTP.

Trong 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

Tại thời điểm này, bạn có thể xác nhận rằng trình cân bằng tải đang hoạt động với địa chỉ IP mà bạn đã ghi lại trước đó.

6. Xác minh rằng Trình cân bằng tải đang hoạt động

Để xác minh rằng tính năng cân bằng tải đang hoạt động, bạn cần tạo một số lượt tải. Để thực hiện việc này, chúng ta sẽ tạo một máy ảo mới để mô phỏng tải.

Tạo Siege-vm

Bây giờ, bạn sẽ tạo siege-vm để tạo tải

Của 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'

Đầu ra

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

Tiếp theo, bạn có thể SSH vào máy ảo mà bạn đã tạo. Sau khi tạo, hãy nhấp vào SSH để khởi chạy một thiết bị đầu cuối và kết nối.

Sau khi kết nối, hãy chạy lệnh sau để tạo tải. Sử dụng địa chỉ IP mà bạn đã đặt trước cho trình cân bằng tải http bên ngoài.

Trong Cloud Shell

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

Đầu ra

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

Kiểm tra tình trạng phân phối tải

Giờ đây, khi Siege đang chạy, đã đến lúc kiểm tra để đảm bảo lưu lượng truy cập được phân phối đồng đều cho hai nhóm thực thể được quản lý.

Dừng cuộc vây hãm

Giờ đây, khi bạn đã chứng minh rằng tính năng phân chia lưu lượng truy cập nâng cao đang hoạt động, đã đến lúc dừng cuộc tấn công. Để thực hiện việc này, hãy quay lại dòng lệnh SSH của siege-vm và nhấn tổ hợp phím CTRL+C để dừng siege đang chạy.

7. Định cấu hình Chính sách cân bằng tải dịch vụ

Tạo chính sách về cân bằng tải dịch vụ

Giờ đây, khi đã hoàn tất chế độ cài đặt cơ bản, chúng ta sẽ tạo Chính sách về Lb dịch vụ và dùng thử các tính năng nâng cao. Ví dụ: chúng ta sẽ định cấu hình dịch vụ để sử dụng một số chế độ cài đặt cân bằng tải nâng cao. Trong ví dụ này, chúng ta chỉ cần tạo một chính sách để thực thi tính năng tự động tiêu hao dung lượng. Tuy nhiên, bạn có thể thử các tính năng khác.

Trong Cloud Shell

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

Chúng ta có thể xác minh chính sách đã được tạo thành công bằng lệnh gcloud sau:

Trong Cloud Shell

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

Đầu ra

NAME
http-policy

Đính kèm Chính sách cân bằng tải dịch vụ vào dịch vụ phụ trợ

Bây giờ, chúng tôi sẽ đính kèm chính sách mới vào dịch vụ phụ trợ hiện có của bạn ở trên.

Của Cloud Shell

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

8. Điều chỉnh trạng thái của phần phụ trợ

Hiện tại, chính sách lb dịch vụ mới đã được áp dụng cho dịch vụ phụ trợ của bạn. Vì vậy, về mặt kỹ thuật, bạn có thể chuyển thẳng đến phần dọn dẹp. Tuy nhiên, trong lớp học lập trình này, chúng tôi cũng sẽ thực hiện một số điều chỉnh bổ sung cho bản phát hành công khai để cho bạn thấy cách hoạt động của chính sách mới.

Tính năng tự động rút cạn dung lượng sẽ tự động xoá một MIG phụ trợ khỏi bộ cân bằng tải khi tổng số phụ trợ đang hoạt động giảm xuống dưới một ngưỡng nhất định (25%). Để kiểm thử tính năng này, chúng ta sẽ kết nối SSH vào các máy ảo trong us-east1-b-mig và đặt trạng thái không ổn định cho các máy ảo đó. Với ngưỡng 25%, bạn sẽ cần kết nối SSH vào 4 trong số các máy ảo và tắt máy chủ Apache.

Để thực hiện việc này, hãy chọn 4 máy ảo và kết nối với máy ảo đó bằng SSH bằng cách nhấp vào SSH để khởi chạy một thiết bị đầu cuối và kết nối. Sau đó, hãy chạy lệnh sau.

sudo apachectl stop

Tại thời điểm này, tính năng tự động giảm dung lượng sẽ được kích hoạt và us-east1-b-mig sẽ không nhận được yêu cầu mới.

9. Xác minh rằng tính năng Tự động thoát nước thải đang hoạt động

Khởi động lại Cuộc vây hãm

Để xác minh tính năng mới, chúng ta sẽ sử dụng lại máy ảo siege. Hãy SSH vào máy ảo mà bạn đã tạo ở bước trước. Sau khi tạo xong, hãy nhấp vào SSH để chạy cửa sổ dòng lệnh và kết nối.

Sau khi kết nối, hãy chạy lệnh sau để tạo tải. Sử dụng địa chỉ IP mà bạn đã đặt trước cho trình cân bằng tải http bên ngoài.

Trong Cloud Shell

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

Đầu ra

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

Tại thời điểm này, bạn sẽ thấy rằng tất cả các yêu cầu đều được gửi đến us-east1-a-mig.

Dừng cuộc vây hãm

Bây giờ, bạn đã chứng minh được tính năng chia tách lưu lượng truy cập nâng cao đang hoạt động, đã đến lúc bạn dừng vòng vây. Để thực hiện việc này, hãy quay lại dòng lệnh SSH của siege-vm và nhấn tổ hợp phím CTRL+C để dừng siege đang chạy.

10. Các bước dọn dẹp

Giờ đây, chúng ta đã hoàn tất môi trường thử nghiệm, đã đến lúc gỡ bỏ môi trường đó. Vui lòng chạy các lệnh sau để xoá môi trường thử nghiệm.

Trong 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. Xin chúc mừng!

Chúc mừng bạn đã hoàn thành lớp học lập trình này.

Nội dung đã đề cập

  • Tạo trình cân bằng tải ứng dụng bên ngoài bằng chính sách lb dịch vụ.
  • Định cấu hình dịch vụ phụ trợ bằng tính năng tự động tiêu hao dung lượng.

Các bước tiếp theo

  • Hãy thử các tính năng khác do chính sách lb dịch vụ cung cấp.