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ề các hoạt động tối ưu hoá nâng cao tính năng cân bằng tải!

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 lựa chọn nâng cao về cân bằng tải cho trình cân bằng tải ứng dụng bên ngoài toàn cầu. 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 trước ( 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 2 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 chức 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 mô phỏng và xác minh rằng các cấu hình bạn đặt đang hoạt động phù hợp.

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

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

Bạn cần 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 về Trình cân bằng tải HTTP bên ngoài có tính năng 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 xem qua phần đó trước.

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

Trong Cloud Shell, hãy đảm bảo rằng 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 VPC

Từ 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ờ đây, bạn sẽ tạo một quy tắc tường lửa. Quy tắc tường lửa sẽ được dùng để cho phép tất cả các IP truy cập vào IP ngoài của trang web ứng dụng kiểm thử trên cổng 80 cho lưu lượng truy cập http.

Từ 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 trạng thái của các VM. Vì vậy, chúng ta cũng sẽ tạo các quy tắc tường lửa để cho phép SSH.

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

Nhóm phiên bản được quản lý có thể có phạm vi theo khu vực hoặc theo vùng. Trong bài tập này, chúng ta sẽ tạo Nhóm phiên bản được quản lý theo khu vực.

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 phiên bản. 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 một ứng dụng web. Bạn có thể khám phá tập lệnh này.

Tạo mẫu phiên bản

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

Từ 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 rằng các mẫu phiên bản của chúng tôi đã được tạo thành công bằng lệnh gcloud sau:

Từ 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ể

Giờ đây, chúng ta phải tạo một nhóm phiên bản được quản lý từ các mẫu phiên bản mà chúng ta đã tạo trước đó.

Từ 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

Từ 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 rằng các nhóm phiên bản đã được tạo thành công bằng lệnh gcloud sau:

Từ 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 thực thể được định cấu hình để chạy một máy chủ web Apache bằng một tập lệnh PHP đơn giản, hiển thị nội dung như sau:

Trang được phân phát từ: us-east1-a-mig-ww2h

Để đảm bảo máy chủ web của bạn hoạt động đúng cách, hãy chuyển đến Compute Engine -> VM instances (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 thực hiện một yêu cầu web trong trình duyệt để đả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 VM instances (Các phiên bản máy ảo) trong Compute Engine, hãy chọn một phiên bản do nhóm phiên bản của bạn tạo và 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 quy trình kiểm tra tình trạng sức khoẻ

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 các dịch vụ của chúng ta hoạt động thành công. Chúng tôi 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 nâng cao hơn nữa.

Từ 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 ngoài

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

Từ 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].

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 phiên bản được quản lý mà chúng ta đã tạo trước đó.

Từ 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ợ

Bây giờ, sau khi tạo các dịch vụ phụ trợ, chúng ta phải thêm 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ợ.

Từ Cloud Shell

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

Từ 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.

Từ 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 trong quá trình 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.

Từ 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 để liên kết địa chỉ IP đã đặt trước trước đó với proxy HTTP.

Từ 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 bộ 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 Bộ 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ố tải. Để làm việc này, chúng ta sẽ tạo một VM mới để mô phỏng tải.

Tạo Siege-vm

Giờ đây, bạn sẽ tạo siege-vm mà bạn sẽ dùng để tạo tải

Từ 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 VM mà bạn đã tạo. Sau khi tạo, hãy nhấp vào SSH để 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.

Từ 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 mức phân bổ tải

Giờ đây, khi Siege đang chạy, bạn cần 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ý.

Ngừng cuộc bao vây

Bây giờ, bạn đã chứng minh được rằng tính năng phân tách 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 thiết bị đầu cuối SSH của siege-vm rồi nhấn tổ hợp phím CTRL+C để dừng siege.

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 LB dịch vụ

Sau 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 nâng cao về cân bằng tải. Trong ví dụ này, chúng ta sẽ chỉ tạo một chính sách để thực hiện tính năng tự động giảm dung lượng. Tuy nhiên, bạn có thể thoải mái dùng thử các tính năng khác.

Từ 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 rằng chính sách đã được tạo thành công bằng lệnh gcloud sau:

Từ Cloud Shell

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

Đầu ra

NAME
http-policy

Đính kèm Chính sách LB dịch vụ vào dịch vụ phụ trợ

Giờ đây, 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.

Từ 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 hệ thống phụ trợ

Tại thời điểm này, chính sách cân bằng tải 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 bước dọn dẹp. Tuy nhiên, trong lớp học lập trình này, chúng ta 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 chính sách mới hoạt động.

Tính năng tự động giảm công suất sẽ tự động xoá một MIG phụ trợ khỏi trình cân bằng tải khi tổng số phụ trợ hoạt động bình thườ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ẽ SSH vào các VM trong us-east1-b-mig và khiến chúng không hoạt động. Với ngưỡng 25%, bạn sẽ cần kết nối SSH với 4 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à SSH đến máy ảo đó bằng cách nhấp vào SSH để chạy một Terminal 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 công suất sẽ được kích hoạt và us-east1-b-mig sẽ không nhận được các yêu cầu mới.

9. Xác minh rằng tính năng Tự động tiêu hao dung lượng đang hoạt động

Khởi động lại Siege

Để xác minh tính năng mới, chúng ta sẽ sử dụng lại VM siege. Hãy SSH vào VM mà bạn đã tạo ở bước trước. Sau khi tạo, hãy nhấp vào SSH để 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.

Từ 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ẽ nhận thấy rằng tất cả các yêu cầu đều được gửi đến us-east1-a-mig.

Ngừng cuộc bao vây

Bây giờ, bạn đã chứng minh được rằng tính năng phân tách 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 thiết bị đầu cuối SSH của siege-vm rồi nhấn tổ hợp phím CTRL+C để dừng siege.

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

Giờ đây, khi đã hoàn tất môi trường phòng thí nghiệm, chúng ta cần phải tháo dỡ môi trường này. Vui lòng chạy các lệnh sau để xoá môi trường thử nghiệm.

Từ 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ợ của bạn bằng tính năng tự động giảm 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.