Tình trạng của Private Service Connect

1. Giới thiệu

Lớp học lập trình này khám phá tình trạng của Private Service Connect (PSC) để chuyển đổi dự phòng tự động theo khu vực. PSC Health là một tính năng mạng giúp cải thiện khả năng phục hồi và tính sẵn có của dịch vụ.

Tình trạng PSC cho phép nhà cung cấp dịch vụ xác định các chính sách tuỳ chỉnh về tình trạng (trạng thái xác định dịch vụ có hoạt động bình thường hay không) và tự động truyền các tín hiệu này đến những người dùng dịch vụ kết nối với dịch vụ bằng phần phụ trợ PSC. Tính năng này được thiết kế riêng để hỗ trợ tính năng chuyển đổi dự phòng tự động giữa các khu vực. Nếu một dịch vụ của nhà sản xuất theo khu vực trở nên không ổn định, thì trình cân bằng tải của người dùng sẽ tự động ngừng định tuyến lưu lượng truy cập đến khu vực đó và chuyển hướng lưu lượng truy cập đến một dịch vụ ổn định ở khu vực khác.

So với các phương thức trước đây để chuyển đổi dự phòng trên nhiều khu vực, chẳng hạn như phát hiện điểm ngoại lệ, tình trạng PSC cung cấp tín hiệu chuyển đổi dự phòng chính xác hơn vì tín hiệu này dựa trực tiếp vào tình trạng tổng hợp của các phần phụ trợ dịch vụ nhà sản xuất (nhóm thực thể máy ảo hoặc điểm cuối mạng). Nhà sản xuất có thể xác định logic về tình trạng của riêng họ, đảm bảo nhà sản xuất chỉ nhận được lưu lượng truy cập khi dịch vụ thực sự đáp ứng các tiêu chí cần thiết về tình trạng.

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

  • Các thành phần của trạng thái PSC và cách các thành phần này hoạt động cùng nhau để xác định trạng thái của dịch vụ nhà cung cấp
  • Triển khai trạng thái PSC cho dịch vụ của nhà cung cấp bằng cách sử dụng các lệnh gcloud
  • Cấu hình trình cân bằng tải truy cập của người dùng PSC trên nhiều khu vực để sử dụng các tín hiệu về tình trạng từ chính sách tình trạng PSC của nhà sản xuất
  • Kiểm thử các tình huống lỗi dịch vụ và xác thực quy trình chuyển đổi dự phòng tự động giữa các khu vực

Bạn cần có

  • Một dự án trên Google Cloud
  • Quyền IAM được cấp cho vai trò roles/compute.admin được xác định trước hoặc một vai trò cơ bản rộng như roles/admin hoặc roles/owner
  • Làm quen với các khái niệm về mạng của Google Cloud và cách sử dụng Google Cloud CLI

2. Khái niệm

Kết nối mạng PSC

Cấu trúc mạng của Lớp học lập trình này bao gồm mạng VPC của người dùng và nhà sản xuất ở hai khu vực đang hoạt động của Google Cloud.

Phía người dùng có các mạng con theo khu vực với các thực thể VM của ứng dụng dùng để truy cập vào dịch vụ của nhà cung cấp thông qua một Trình cân bằng tải ứng dụng nội bộ trên nhiều khu vực với các phần phụ trợ nhóm điểm cuối mạng (NEG) PSC. Có hai quy tắc chuyển tiếp của trình cân bằng tải theo khu vực, có địa chỉ IP theo khu vực, cho lưu lượng truy cập của ứng dụng trên toàn cầu (liên khu vực). Dịch vụ phụ trợ là một tài nguyên toàn cầu hỗ trợ NEG trên nhiều khu vực. Trong trường hợp chuyển đổi dự phòng, một máy khách kết nối với một trong hai quy tắc chuyển tiếp giao diện người dùng theo khu vực có thể được chuyển hướng đến một phần phụ trợ toàn cầu hoạt động bình thường.

figure1

Hình 1. Cấu trúc liên kết mạng của lớp học lập trình

Phía nhà sản xuất có các mạng con theo vùng với Trình cân bằng tải mạng truyền tải nội bộ theo vùng, cung cấp một dịch vụ thông qua tài nguyên tệp đính kèm dịch vụ PSC theo vùng. Các dịch vụ phụ trợ chứa Nhóm phiên bản được quản lý (MIG) theo khu vực và được kiểm tra tình trạng bằng cách thăm dò các yêu cầu http và xác thực các phản hồi 200 (OK).

Hãy tham khảo tài liệu mới nhất về khả năng tương thích của Private Service Connect đối với Cấu hình nhà sản xuất để xem những bộ cân bằng tải nào hỗ trợ tình trạng của PSC.

Tình trạng dịch vụ

Tính năng kiểm tra tình trạng dịch vụ phụ trợ của nhà sản xuất (được định cấu hình trong quá trình tạo trình cân bằng tải) đóng vai trò là tín hiệu ban đầu cho tính năng tình trạng PSC. Tài nguyên nguồn dữ liệu sức khoẻ sử dụng tín hiệu đó cùng với các ràng buộc bổ sung được xác định trong tài nguyên chính sách tổng hợp dữ liệu sức khoẻ để xác định trạng thái sức khoẻ cho một dịch vụ phụ trợ duy nhất.

Theo mặc định, một dịch vụ được coi là hoạt động bình thường khi đáp ứng cả hai điều kiện ràng buộc này:

  • tối thiểu x phần trăm các máy chủ phụ trợ hoạt động bình thường (mặc định là 60)
  • tối thiểu y số lượng máy chủ phụ hoạt động bình thường (mặc định là 1)

Quy trình kiểm tra tình trạng kết hợp tham chiếu tất cả nguồn tình trạng cho tất cả các dịch vụ phụ trợ để xác định tình trạng tổng thể của toàn bộ dịch vụ nhà sản xuất theo khu vực. Trong trường hợp của phòng thí nghiệm này, mỗi dịch vụ nhà sản xuất theo khu vực chỉ có một nguồn trạng thái dịch vụ phụ trợ tổng hợp thành một quy trình kiểm tra tình trạng kết hợp.

figure2

Hình 2. Mô hình tài nguyên về sức khoẻ của PSC

Định nghĩa tài nguyên kiểm tra tình trạng kết hợp cũng đề cập đến quy tắc chuyển tiếp của bộ cân bằng tải dịch vụ nhà sản xuất. NEG PSC phụ trợ của trình cân bằng tải truy cập của người dùng được kết nối một cách logic với tệp đính kèm dịch vụ PSC của nhà sản xuất và quy tắc chuyển tiếp của trình cân bằng tải của nhà sản xuất. Thao tác này liên kết trình cân bằng tải truy cập của người dùng với trạng thái kiểm tra tình trạng tổng hợp của dịch vụ nhà cung cấp. Sau đó, tình trạng tổng thể của dịch vụ đối với dịch vụ nhà sản xuất theo khu vực sẽ được truyền đến trình cân bằng tải của người dùng để đưa ra lựa chọn phụ trợ phù hợp.

3. Thiết lập dự án

Truy cập vào dự án của bạn

Lớp học lập trình này được viết để sử dụng một dự án duy nhất trên Google Cloud. Các bước định cấu hình sử dụng gcloud và các lệnh shell Linux.

LƯU Ý: Trong quá trình triển khai chính thức, tài nguyên của người dùng PSC và dịch vụ của nhà sản xuất thường nằm trong các dự án khác nhau.

Bắt đầu bằng cách truy cập vào dòng lệnh của dự án trên đám mây trên Google Cloud bằng cách sử dụng:

Đặt mã dự án

gcloud config set project YOUR_PROJECT_ID_HERE

Đặt biến môi trường shell

export PROJECT_ID=$(gcloud config list --format="value(core.project)")
export REGION_1="us-west1"
export ZONE_1="us-west1-c"
export REGION_2="us-east1"
export ZONE_2="us-east1-c"
echo ${PROJECT_ID}
echo ${REGION_1}
echo ${ZONE_1}
echo ${REGION_2}
echo ${ZONE_2}

Bật dịch vụ API

gcloud services enable compute.googleapis.com
gcloud services enable dns.googleapis.com

4. Dịch vụ Producer

Tạo tài nguyên dùng chung

Tạo mạng

gcloud compute networks create vnet-producer --subnet-mode=custom

Tạo mạng con

# create subnet for service workload in region 1
gcloud compute networks subnets create subnet-foo \
  --network=vnet-producer \
  --region=${REGION_1} \
  --range=172.16.1.0/24 \
  --enable-private-ip-google-access

# create subnet for psc nat in region 1
gcloud compute networks subnets create subnet-foo-pscnat \
  --network=vnet-producer \
  --region=${REGION_1} \
  --range=192.168.1.0/29 \
  --purpose=PRIVATE_SERVICE_CONNECT
# create subnet for service workload in region 2
gcloud compute networks subnets create subnet-bar \
  --network=vnet-producer \
  --region=${REGION_2} \
  --range=172.16.2.0/24 \
  --enable-private-ip-google-access

# create subnet for psc nat in region 2
gcloud compute networks subnets create subnet-bar-pscnat \
  --network=vnet-producer \
  --region=${REGION_2} \
  --range=192.168.2.0/29 \
  --purpose=PRIVATE_SERVICE_CONNECT

Tạo các thành phần tường lửa

Bạn cần có các quy tắc về tường lửa để cho phép lưu lượng truy cập đến các tài nguyên máy ảo (các quy tắc tường lửa mặc định ngầm định là từ chối lưu lượng truy cập đến và cho phép lưu lượng truy cập đi). Chính sách là cách ưu tiên để triển khai các quy tắc tường lửa bằng cách tạo một tài nguyên chính sách tường lửa mạng, tạo và thêm các quy tắc vào chính sách, rồi liên kết chính sách đó với một mạng VPC.

# create fw policy
gcloud compute network-firewall-policies create fw-policy-producer --global
# create fw policy rules
gcloud compute network-firewall-policies rules create 1001 \
  --description="allow iap for ssh" \
  --firewall-policy=fw-policy-producer \
  --global-firewall-policy \
  --action=allow \
  --direction=INGRESS \
  --layer4-configs=tcp:22  \
  --src-ip-ranges=35.235.240.0/20

gcloud compute network-firewall-policies rules create 1002 \
  --description="allow health checks" \
  --firewall-policy=fw-policy-producer \
  --global-firewall-policy \
  --action=allow \
  --direction=INGRESS \
  --layer4-configs=tcp,udp,icmp  \
  --src-ip-ranges=130.211.0.0/22,35.191.0.0/16

gcloud compute network-firewall-policies rules create 1003 \
  --description="allow psc nat clients" \
  --firewall-policy=fw-policy-producer \
  --global-firewall-policy \
  --action=allow \
  --direction=INGRESS \
  --layer4-configs=tcp:80  \
  --src-ip-ranges=192.168.1.0/29,192.168.2.0/29
# associate fw policy to vnet
gcloud compute network-firewall-policies associations create \
  --firewall-policy=fw-policy-producer \
  --network=vnet-producer \
  --name=fw-policy-association-producer \
  --global-firewall-policy

Tạo Bộ định tuyến đám mây và Cổng NAT

# create routers for nat in each region
gcloud compute routers create cr-nat-foo \
  --network=vnet-producer \
  --asn=16550 \
  --region=${REGION_1}

gcloud compute routers create cr-nat-bar \
  --network=vnet-producer \
  --asn=16550 \
  --region=${REGION_2}
# create nat gateways in each region
gcloud compute routers nats create natgw-foo \
  --router=cr-nat-foo \
  --region=${REGION_1} \
  --auto-allocate-nat-external-ips \
  --nat-all-subnet-ip-ranges

gcloud compute routers nats create natgw-bar \
  --router=cr-nat-bar \
  --region=${REGION_2} \
  --auto-allocate-nat-external-ips \
  --nat-all-subnet-ip-ranges

Tạo cấu hình khởi động VM bằng máy chủ HTTP

cat > vm-server-startup.sh << 'EOF'
#! /bin/bash
apt-get update
apt-get install apache2 -y
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone)"
echo "Page served from: $vm_hostname in zone $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2
EOF

Thiết lập dịch vụ foo ở khu vực 1

Tạo dịch vụ điện toán

# create managed instance group template
gcloud compute instance-templates create mig-template-foo \
  --machine-type=e2-micro \
  --network=vnet-producer \
  --region=${REGION_1} \
  --subnet=subnet-foo \
  --no-address \
  --shielded-secure-boot \
  --metadata-from-file=startup-script=vm-server-startup.sh
# create regional managed instance group
gcloud compute instance-groups managed create mig-foo \
  --region=${REGION_1} \
  --size=2 \
  --template=mig-template-foo \
  --base-instance-name=service-foo

Tạo các thành phần trình cân bằng tải dịch vụ

# create lb health check
gcloud compute health-checks create http hc-foo-http \
  --region=${REGION_1} \
  --port=80 \
  --enable-logging
# create backend service
gcloud compute backend-services create ilb-foo \
  --load-balancing-scheme=INTERNAL \
  --protocol=tcp \
  --region=${REGION_1} \
  --health-checks=hc-foo-http \
  --health-checks-region=${REGION_1}

# add managed instance group to backend service
gcloud compute backend-services add-backend ilb-foo \
  --instance-group=mig-foo \
  --instance-group-region=${REGION_1} \
  --region=${REGION_1}
# create forwarding rule
gcloud compute forwarding-rules create fr-foo \
  --region=${REGION_1} \
  --load-balancing-scheme=INTERNAL \
  --network=vnet-producer \
  --subnet=subnet-foo \
  --address=172.16.1.99 \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=ilb-foo \
  --backend-service-region=${REGION_1} \
  --allow-global-access

Xuất bản dịch vụ PSC

# create psc service attachment
gcloud compute service-attachments create psc-sa-foo \
  --region=${REGION_1} \
  --target-service=projects/${PROJECT_ID}/regions/${REGION_1}/forwardingRules/fr-foo \
  --connection-preference=ACCEPT_AUTOMATIC \
  --nat-subnets=subnet-foo-pscnat

Thiết lập dịch vụ bar ở khu vực 2

Tạo dịch vụ điện toán

# create managed instance group template
gcloud compute instance-templates create mig-template-bar \
  --machine-type=e2-micro \
  --network=vnet-producer \
  --region=${REGION_2} \
  --subnet=subnet-bar \
  --no-address \
  --shielded-secure-boot \
  --metadata-from-file=startup-script=vm-server-startup.sh
# create regional managed instance group
gcloud compute instance-groups managed create mig-bar \
  --region=${REGION_2} \
  --size=2 \
  --template=mig-template-bar \
  --base-instance-name=service-bar

Tạo các thành phần trình cân bằng tải dịch vụ

# create lb health check
gcloud compute health-checks create http hc-bar-http \
  --region=${REGION_2} \
  --port=80 \
  --enable-logging
# create backend service
gcloud compute backend-services create ilb-bar \
  --load-balancing-scheme=INTERNAL \
  --protocol=tcp \
  --region=${REGION_2} \
  --health-checks=hc-bar-http \
  --health-checks-region=${REGION_2}

# add managed instance group to backend service
gcloud compute backend-services add-backend ilb-bar \
  --instance-group=mig-bar \
  --instance-group-region=${REGION_2} \
  --region=${REGION_2}
# create forwarding rule
gcloud compute forwarding-rules create fr-bar \
  --region=${REGION_2} \
  --load-balancing-scheme=INTERNAL \
  --network=vnet-producer \
  --subnet=subnet-bar \
  --address=172.16.2.99 \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=ilb-bar \
  --backend-service-region=${REGION_2} \
  --allow-global-access

Xuất bản dịch vụ PSC

# create psc service attachment
gcloud compute service-attachments create psc-sa-bar \
  --region=${REGION_2} \
  --target-service=projects/${PROJECT_ID}/regions/${REGION_2}/forwardingRules/fr-bar \
  --connection-preference=ACCEPT_AUTOMATIC \
  --nat-subnets=subnet-bar-pscnat

5. Quyền truy cập của người tiêu dùng

Thiết lập tài nguyên ứng dụng

Tạo các thành phần mạng

# create vpc network
gcloud compute networks create vnet-consumer --subnet-mode=custom
# create client subnet in each region
gcloud compute networks subnets create subnet-client-1 \
  --network=vnet-consumer \
  --region=${REGION_1} \
  --range=10.10.1.0/24 \
  --enable-private-ip-google-access

gcloud compute networks subnets create subnet-client-2 \
  --network=vnet-consumer \
  --region=${REGION_2} \
  --range=10.10.2.0/24 \
  --enable-private-ip-google-access

Bộ cân bằng tải của Ứng dụng người dùng (dựa trên proxy) yêu cầu mạng con chỉ dành cho proxy. Các mạng con này cung cấp một nhóm địa chỉ IP được bộ cân bằng tải dựa trên proxy sử dụng làm địa chỉ nguồn nội bộ khi gửi lưu lượng truy cập đến các máy chủ phụ trợ.

# create proxy subnet in each region
gcloud compute networks subnets create subnet-proxy-1 \
  --purpose=GLOBAL_MANAGED_PROXY \
  --role=ACTIVE \
  --network=vnet-consumer \
  --region=${REGION_1} \
  --range=10.10.128.0/23

gcloud compute networks subnets create subnet-proxy-2 \
  --purpose=GLOBAL_MANAGED_PROXY \
  --role=ACTIVE \
  --network=vnet-consumer \
  --region=${REGION_2} \
  --range=10.10.130.0/23

Tạo các thành phần tường lửa

# create fw policy
gcloud compute network-firewall-policies create fw-policy-consumer --global
# create fw policy rules
gcloud compute network-firewall-policies rules create 1001 \
  --description="allow iap for ssh" \
  --firewall-policy=fw-policy-consumer \
  --global-firewall-policy \
  --action=allow \
  --direction=INGRESS \
  --layer4-configs=tcp:22  \
  --src-ip-ranges=35.235.240.0/20
# associate fw policy to vnet
gcloud compute network-firewall-policies associations create \
  --firewall-policy=fw-policy-consumer \
  --network=vnet-consumer \
  --name=fw-policy-association-consumer \
  --global-firewall-policy

Tạo các thành phần của trình cân bằng tải

# create psc network endpoint group per region
gcloud compute network-endpoint-groups create neg-foo \
  --network-endpoint-type=private-service-connect \
  --psc-target-service=projects/${PROJECT_ID}/regions/${REGION_1}/serviceAttachments/psc-sa-foo \
  --region=${REGION_1} \
  --network=vnet-consumer \
  --subnet=subnet-client-1

gcloud compute network-endpoint-groups create neg-bar \
  --network-endpoint-type=private-service-connect \
  --psc-target-service=projects/${PROJECT_ID}/regions/${REGION_2}/serviceAttachments/psc-sa-bar \
  --region=${REGION_2} \
  --network=vnet-consumer \
  --subnet=subnet-client-2
# verify psc connections
gcloud compute network-endpoint-groups list --format="value(selfLink, pscData.pscConnectionStatus)"
# create global backend service
gcloud compute backend-services create bes-foobar \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --protocol=HTTP \
  --global
# add negs to backend service
gcloud compute backend-services add-backend bes-foobar \
  --network-endpoint-group=neg-foo \
  --network-endpoint-group-region=${REGION_1} \
  --global

gcloud compute backend-services add-backend bes-foobar \
  --network-endpoint-group=neg-bar \
  --network-endpoint-group-region=${REGION_2} \
  --global
# create global url map
gcloud compute url-maps create ilb-foobar \
  --default-service=bes-foobar \
  --global
# create global target proxy
gcloud compute target-http-proxies create proxy-foobar \
  --url-map=ilb-foobar \
  --global
# create global forwarding rule for region 1
gcloud compute forwarding-rules create fr-foobar-1 \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=vnet-consumer \
  --subnet=subnet-client-1 \
  --subnet-region=${REGION_1} \
  --address=10.10.1.99 \
  --ports=80 \
  --target-http-proxy=proxy-foobar \
  --global
# create global forwarding rule for region 2
gcloud compute forwarding-rules create fr-foobar-2 \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=vnet-consumer \
  --subnet=subnet-client-2 \
  --subnet-region=${REGION_2} \
  --address=10.10.2.99 \
  --ports=80 \
  --target-http-proxy=proxy-foobar \
  --global

Tạo bản ghi DNS

# create dns zone
gcloud dns managed-zones create zone-foobar \
  --description="private zone for foobar" \
  --dns-name=foobar.com \
  --networks=vnet-consumer \
  --visibility=private
# create geo dns record
gcloud dns record-sets create www.foobar.com \
  --zone=zone-foobar \
  --type=A \
  --ttl=300 \
  --routing-policy-type=GEO \
  --routing-policy-item="location=${REGION_1},rrdatas=10.10.1.99" \
  --routing-policy-item="location=${REGION_2},rrdatas=10.10.2.99"

Tạo tài nguyên điện toán

# create client vm in region 1
gcloud compute instances create client-1 \
  --machine-type=e2-micro \
  --zone=${ZONE_1} \
  --subnet=subnet-client-1 \
  --no-address \
  --shielded-secure-boot
# create client vm in region 2
gcloud compute instances create client-2 \
  --machine-type=e2-micro \
  --zone=${ZONE_2} \
  --subnet=subnet-client-2 \
  --no-address \
  --shielded-secure-boot

Kiểm thử đường cơ sở của dịch vụ

SSH đến máy ảo của máy khách ở khu vực 1

gcloud compute ssh client-1 --zone=${ZONE_1}
# send request to service using hostname
curl -v www.foobar.com
# send request to load balancer forwarding rule region 1
curl 10.10.1.99
# send request to load balancer forwarding rule region 2
curl 10.10.2.99
# exit vm ssh
exit

Không bắt buộc: Thử các kiểm thử tương tự từ máy ảo máy khách ở vùng 2: gcloud compute ssh client-2 --zone=${ZONE_2}

ĐIỂM CHÍNH: Hành vi thông thường của bộ cân bằng tải đối với các yêu cầu của máy khách đang chuyển tiếp một quy tắc chuyển tiếp trong region-x là ưu tiên các phần phụ trợ trong cùng một region-x. Nếu tất cả tài nguyên phụ trợ đều hoạt động bình thường, thì khu vực có độ trễ thấp nhất sẽ được chọn. Các máy chủ phụ trợ toàn cầu sẽ chuyển đổi dự phòng sang khu vực khác bằng tín hiệu tình trạng phù hợp.

Tuy nhiên, vì các tài nguyên dịch vụ producer thực tế nằm sau bộ cân bằng tải producer trong mạng VPC producer, nên trước đây, bộ cân bằng tải consumer không thể nhận biết được các tín hiệu về tình trạng này. Do đó, phía consumer không thể đưa ra các quyết định chuyển đổi dự phòng phụ trợ như vậy. PSC Health giải quyết vấn đề này bằng cách truyền thông tin về tình trạng dịch vụ từ phía nhà sản xuất sang phía người tiêu dùng.

6. Tài nguyên về sức khoẻ

Tài nguyên PSC Health được nhà sản xuất định cấu hình để thể hiện tình trạng tổng thể của dịch vụ theo khu vực. Chính sách về sức khoẻ dựa trên những gì nhà sản xuất dịch vụ xác định là phù hợp để duy trì cấp độ dịch vụ hoạt động. Các ngưỡng được đặt để thông báo cho người tiêu dùng chuyển đổi dự phòng khi không còn đáp ứng các điều kiện do nhà sản xuất xác định.

Thiết lập trạng thái dịch vụ foo ở khu vực 1

Tạo chính sách tổng hợp dữ liệu sức khoẻ

gcloud beta compute health-aggregation-policies create foo-health-policy \
  --region=${REGION_1} \
  --healthy-percent-threshold=60 \
  --min-healthy-threshold=1

Tạo một nguồn dữ liệu sức khoẻ

gcloud beta compute health-sources create foo-health-source \
  --region=${REGION_1} \
  --source-type=BACKEND_SERVICE \
  --sources=ilb-foo \
  --health-aggregation-policy=foo-health-policy

Tạo một quy trình kiểm tra tình trạng kết hợp

gcloud beta compute composite-health-checks create foo-health-composite \
  --region=${REGION_1} \
  --health-sources=foo-health-source \
  --health-destination=projects/${PROJECT_ID}/regions/${REGION_1}/forwardingRules/fr-foo

Xác minh cấu hình tình trạng foo dịch vụ

Bạn có thể xem cấu hình tài nguyên y tế bằng các lệnh danh sách (và describe) theo từng khu vực

# show health aggregation policies
gcloud beta compute health-aggregation-policies list --regions=${REGION_1}

# show health sources
gcloud beta compute health-sources list --regions=${REGION_1}

# show composite health checks
gcloud beta compute composite-health-checks list --regions=${REGION_1}

Thiết lập trạng thái dịch vụ bar ở khu vực 2

Tạo chính sách tổng hợp dữ liệu sức khoẻ

gcloud beta compute health-aggregation-policies create bar-health-policy \
  --region=${REGION_2} \
  --healthy-percent-threshold=60 \
  --min-healthy-threshold=1

Tạo một nguồn dữ liệu sức khoẻ

gcloud beta compute health-sources create bar-health-source \
  --region=${REGION_2} \
  --source-type=BACKEND_SERVICE \
  --sources=ilb-bar \
  --health-aggregation-policy=bar-health-policy

Tạo một quy trình kiểm tra tình trạng kết hợp

gcloud beta compute composite-health-checks create bar-health-composite \
  --region=${REGION_2} \
  --health-sources=bar-health-source \
  --health-destination=projects/${PROJECT_ID}/regions/${REGION_2}/forwardingRules/fr-bar

Xác minh cấu hình tình trạng bar dịch vụ

# show health aggregation policies
gcloud beta compute health-aggregation-policies list --regions=${REGION_2}

# show health sources
gcloud beta compute health-sources list --regions=${REGION_2}

# show composite health checks
gcloud beta compute composite-health-checks list --regions=${REGION_2}

Đến đây là kết thúc phần định cấu hình... chuyển sang kiểm thử.

7. Kiểm thử chuyển đổi dự phòng

Tình huống 1: Dịch vụ foo ở khu vực gặp vấn đề

Tình huống này mô phỏng sự cố của dịch vụ nhà sản xuất PSC foo ở khu vực 1 bằng cách dừng máy chủ web trên một trong hai phiên bản VM.

Lấy thông tin chi tiết về máy ảo trên máy chủ

# set env var for a foo service vm name
export FOO_FAIL_NAME=$(gcloud compute instance-groups managed list-instances mig-foo \
  --limit=1 \
  --region=${REGION_1} \
  --format="value(name)")
echo ${FOO_FAIL_NAME}
# set env var for a foo service zone
export FOO_FAIL_ZONE=$(gcloud compute instance-groups managed list-instances mig-foo \
  --limit=1 \
  --region=${REGION_1} \
  --format="value(ZONE)")
echo ${FOO_FAIL_ZONE}

SSH đến máy ảo máy chủ và dừng máy chủ http

gcloud compute ssh ${FOO_FAIL_NAME} --zone=${FOO_FAIL_ZONE}
# stop apache http server to fail service
sudo systemctl stop apache2
# verify service dead
sudo systemctl status apache2 | grep Active:
# exit vm ssh
exit

Xác minh dịch vụ theo khu vực không hoạt động bình thường

# check health state of backend service
gcloud compute backend-services get-health ilb-foo --region=${REGION_1}

Kết quả đầu ra sẽ có dạng như sau...

backend: .../regions/<REGION_1>/instanceGroups/mig-foo
status:
  healthStatus:
  -   forwardingRule: .../regions/<REGION_1>/forwardingRules/fr-foo
    forwardingRuleIp: 172.16.1.99
    healthState: UNHEALTHY
    instance: .../zones/<ZONE_1x>/instances/<FOO_FAIL_NAME>
    ipAddress: <FOO_FAIL_IP>
    port: 80
  -   forwardingRule: .../regions/<REGION_1>/forwardingRules/fr-foo
    forwardingRuleIp: 172.16.1.99
    healthState: HEALTHY
    instance: .../zones/<ZONE_1y>/instances/<FOO_OTHER_NAME>
    ipAddress: <FOO_OTHER_IP>
    port: 80
  kind: compute#backendServiceGroupHealth

SSH đến máy ảo của ứng dụng 1 và kiểm tra tính năng chuyển đổi dự phòng

gcloud compute ssh client-1 --zone=${ZONE_1}
# send request to service using hostname
curl -v www.foobar.com
# curl to ilb vip in region 1
curl 10.10.1.99
# curl to ilb vip in region 2
curl 10.10.2.99

PSC health đã cập nhật bộ cân bằng tải cho người tiêu dùng và hướng dẫn bộ cân bằng tải này tránh dịch vụ phụ trợ không hoạt động ở khu vực 1. Thay vào đó, lưu lượng truy cập đã được chuyển hướng đến dịch vụ bar đang hoạt động bình thường ở khu vực 2.

# exit client vm ssh
exit

Tạo kết nối SSH đến máy ảo máy chủ và khởi động lại máy chủ http

# ssh to foo service vm
gcloud compute ssh ${FOO_FAIL_NAME} --zone=${FOO_FAIL_ZONE}
# start apache http server to return service to healthy
sudo systemctl start apache2
# verify service running
sudo systemctl status apache2 | grep Active:
# exit vm ssh
exit

Thay đổi chính sách về sức khoẻ

Nhà sản xuất có thể điều chỉnh các chính sách về tình trạng dịch vụ dựa trên nhiều tiêu chí. Tài nguyên chính sách tổng hợp về tình trạng chỉ định các ngưỡng tối thiểu cần thiết để duy trì trạng thái ổn định trên tất cả các nguồn tình trạng (dịch vụ phụ trợ).

Cập nhật chính sách tổng hợp trạng thái dịch vụ bar

gcloud beta compute health-aggregation-policies update bar-health-policy \
  --region=${REGION_2} \
  --description="min 40% threshold" \
  --healthy-percent-threshold=40 \
  --min-healthy-threshold=2
# verify new policy is applied
gcloud beta compute health-aggregation-policies list --regions=${REGION_2}

Thay đổi này đối với chính sách về sức khoẻ dành cho nhà sản xuất sẽ giúp:

  1. Giảm tỷ lệ phần trăm ngưỡng tối thiểu cho trạng thái hoạt động bình thường từ 60% xuống 40% – giờ đây, một lỗi của thực thể máy ảo sẽ không kích hoạt trạng thái không hoạt động bình thường dựa trên --healthy-percent-threshold (trạng thái lỗi sẽ là 50% và chỉ cần 40% để hoạt động bình thường)
  2. Tăng số lượng tối thiểu các hệ thống phụ trợ hoạt động bình thường từ 1 lên 2 thực thể máy ảo – giờ đây, một lỗi thực thể máy ảo duy nhất sẽ kích hoạt trạng thái không hoạt động bình thường dựa trên --min-healthy-threshold (trạng thái lỗi sẽ là 1 nhưng cần 2 để hoạt động bình thường)

Dịch vụ bar khu vực 2 trong trường hợp không lành mạnh

Tình huống này mô phỏng sự cố của dịch vụ nhà sản xuất PSC bar ở khu vực 2 bằng cách dừng máy chủ web trên một trong hai phiên bản máy ảo.

Lấy thông tin chi tiết về máy ảo trên máy chủ

# set env var for a bar service vm name
export BAR_FAIL_NAME=$(gcloud compute instance-groups managed list-instances mig-bar \
  --limit=1 \
  --region=${REGION_2} \
  --format="value(name)")
echo ${BAR_FAIL_NAME}
# set env var for a bar service zone
export BAR_FAIL_ZONE=$(gcloud compute instance-groups managed list-instances mig-bar \
  --limit=1 \
  --region=${REGION_2} \
  --format="value(ZONE)")
echo ${BAR_FAIL_ZONE}

SSH đến máy ảo máy chủ và dừng máy chủ http

gcloud compute ssh ${BAR_FAIL_NAME} --zone=${BAR_FAIL_ZONE}
# stop apache http server to fail service
sudo systemctl stop apache2
# verify service dead
sudo systemctl status apache2 | grep Active:
# exit vm ssh
exit

Xác minh dịch vụ theo khu vực không hoạt động bình thường

# check health state of backend service
gcloud compute backend-services get-health ilb-bar --region=${REGION_2}

Kết quả đầu ra sẽ có dạng như sau...

backend: .../regions/<REGION_2>/instanceGroups/mig-bar
status:
  healthStatus:
  -   forwardingRule: .../regions/<REGION_2>/forwardingRules/fr-bar
    forwardingRuleIp: 172.16.2.99
    healthState: UNHEALTHY
    instance: .../zones/<ZONE_2x>/instances/<BAR_FAIL_NAME>
    ipAddress: <BAR_FAIL_IP>
    port: 80
  -   forwardingRule: .../regions/<REGION_2>/forwardingRules/fr-bar
    forwardingRuleIp: 172.16.2.99
    healthState: HEALTHY
    instance: .../zones/<ZONE_2y>/instances/<BAR_OTHER_NAME>
    ipAddress: <BAR_OTHER_IP>
    port: 80
  kind: compute#backendServiceGroupHealth

SSH đến máy ảo ứng dụng 2 và kiểm tra quy trình chuyển đổi dự phòng

gcloud compute ssh client-2 --zone=${ZONE_2}
# send request to service using hostname
curl -v www.foobar.com
# curl to ilb vip in region 1
curl 10.10.1.99
# curl to ilb vip in region 2
curl 10.10.2.99

PSC health đã cập nhật bộ cân bằng tải cho người tiêu dùng và hướng dẫn bộ cân bằng tải này tránh dịch vụ phụ trợ không hoạt động ở khu vực 2. Thay vào đó, hệ thống đã chuyển hướng lưu lượng truy cập đến dịch vụ hoạt động bình thường foo ở khu vực 1.

Trong trường hợp trình cân bằng tải của người tiêu dùng coi tất cả các dịch vụ của nhà sản xuất là không hoạt động, thì trình cân bằng tải không thể chuyển đổi dự phòng sang một thực thể hoạt động. Hành vi dự kiến là trình cân bằng tải sẽ phân phối lưu lượng truy cập trên tất cả các máy chủ phụ không hoạt động (thất bại khi mở).

# exit client vm ssh
exit

Đến đây là kết thúc phần kiểm thử... chuyển sang phần dọn dẹp.

8. Dọn dẹp

# delete health resources
gcloud -q beta compute composite-health-checks delete foo-health-composite --region=${REGION_1}

gcloud -q beta compute health-sources delete foo-health-source --region=${REGION_1}

gcloud -q beta compute health-aggregation-policies delete foo-health-policy --region=${REGION_1}

gcloud -q beta compute composite-health-checks delete bar-health-composite --region=${REGION_2}

gcloud -q beta compute health-sources delete bar-health-source --region=${REGION_2}

gcloud -q beta compute health-aggregation-policies delete bar-health-policy --region=${REGION_2}
# delete consumer compute and load balancer resources
gcloud -q compute instances delete client-2 --zone=${ZONE_2}

gcloud -q compute instances delete client-1 --zone=${ZONE_1}

gcloud -q dns record-sets delete www.foobar.com --type=A --zone=zone-foobar

gcloud -q dns managed-zones delete zone-foobar

gcloud -q compute forwarding-rules delete fr-foobar-2 --global

gcloud -q compute forwarding-rules delete fr-foobar-1 --global

gcloud -q compute target-http-proxies delete proxy-foobar --global

gcloud -q compute url-maps delete ilb-foobar --global

gcloud -q compute backend-services delete bes-foobar --global


# delete consumer network resources
gcloud -q compute network-endpoint-groups delete neg-bar --region=${REGION_2}

gcloud -q compute network-endpoint-groups delete neg-foo --region=${REGION_1}

gcloud -q compute networks subnets delete subnet-proxy-2 --region=${REGION_2}

gcloud -q compute networks subnets delete subnet-proxy-1 --region=${REGION_1}

gcloud -q compute networks subnets delete subnet-client-2 --region=${REGION_2}

gcloud -q compute networks subnets delete subnet-client-1 --region=${REGION_1}

gcloud -q compute network-firewall-policies associations delete \
  --firewall-policy=fw-policy-consumer \
  --name=fw-policy-association-consumer \
  --global-firewall-policy

gcloud -q compute network-firewall-policies delete fw-policy-consumer --global

gcloud -q compute networks delete vnet-consumer
# delete producer load balancer resources
gcloud -q compute service-attachments delete psc-sa-bar --region=${REGION_2}

gcloud -q compute service-attachments delete psc-sa-foo --region=${REGION_1}

gcloud -q compute forwarding-rules delete fr-bar --region=${REGION_2}

gcloud -q compute forwarding-rules delete fr-foo --region=${REGION_1}

gcloud -q compute backend-services delete ilb-bar --region=${REGION_2}

gcloud -q compute backend-services delete ilb-foo --region=${REGION_1}

gcloud -q compute health-checks delete hc-bar-http --region=${REGION_2}

gcloud -q compute health-checks delete hc-foo-http --region=${REGION_1}
# delete producer compute resources
gcloud -q compute instance-groups managed delete mig-bar --region=${REGION_2}

gcloud -q compute instance-groups managed delete mig-foo --region=${REGION_1}

gcloud -q compute instance-templates delete mig-template-bar --global

gcloud -q compute instance-templates delete mig-template-foo --global
# delete producer network resources
gcloud -q compute networks subnets delete subnet-bar-pscnat --region=${REGION_2}

gcloud -q compute networks subnets delete subnet-foo-pscnat --region=${REGION_1}

gcloud -q compute networks subnets delete subnet-bar --region=${REGION_2}

gcloud -q compute networks subnets delete subnet-foo --region=${REGION_1}

gcloud -q compute routers delete cr-nat-bar --region=${REGION_2}

gcloud -q compute routers delete cr-nat-foo --region=${REGION_1}

gcloud -q compute network-firewall-policies associations delete \
  --firewall-policy=fw-policy-producer \
  --name=fw-policy-association-producer \
  --global-firewall-policy

gcloud -q compute network-firewall-policies delete fw-policy-producer --global

gcloud -q compute networks delete vnet-producer
# delete shell variables and script file
unset FOO_FAIL_NAME FOO_FAIL_ZONE BAR_FAIL_NAME BAR_FAIL_ZONE

unset PROJECT_ID REGION_1 ZONE_1 REGION_2 ZONE_2

rm vm-server-startup.sh
#

9. Kết luận

Xin chúc mừng! Bạn đã định cấu hình thành công trạng thái PSC và kiểm thử tính năng chuyển đổi dự phòng tự động theo khu vực!

Bạn có thể thoải mái đưa ra ý kiến nhận xét, câu hỏi hoặc nội dung chỉnh sửa bằng cách sử dụng biểu mẫu phản hồi này.

Cảm ơn bạn!