Kegagalan tingkat layanan dapat menyebabkan ketidaktersediaan atau degradasi aplikasi cloud-native. Dengan mengombinasikan model penyebaran peer multi-wilayah dan multi-kluster, Alibaba Service Mesh (ASM) mengalihkan lalu lintas ke workload yang tersedia dalam hitungan detik saat terjadi kegagalan layanan, secara transparan bagi pengguna. Topik ini menjelaskan cara menggunakan ASM untuk pemulihan bencana tingkat layanan.
Disaster recovery architecture
Failover mechanism: locality-aware failover in a service mesh
ASM menyediakan mekanisme failover yang mempertimbangkan lokasi (locality-aware). Proxy sidecar dari setiap workload terus memantau apakah workload tujuan mengembalikan respons error berurutan dalam rentang waktu yang dapat dikonfigurasi. Ketika proxy sidecar mendeteksi kegagalan pada suatu workload, workload tersebut akan dihapus dari pool load balancing dan lalu lintas dialihkan ke workload lain yang sehat.
Contoh berikut menggunakan dua kluster di dua wilayah berbeda, dengan dua set peer aplikasi yang diterapkan di kedua wilayah tersebut. Di setiap kluster, workload setiap layanan didistribusikan secara merata di berbagai zona menggunakan topology spread constraints.
-
Normal traffic topology
Saat semua layanan dalam kondisi sehat, service mesh menjaga lalu lintas tetap berada dalam zona yang sama untuk meminimalkan dampak lokasi tujuan terhadap latensi permintaan.
-
Automatic failover based on locality planning when a workload becomes faulty
Ketika proxy sidecar mendeteksi respons error berurutan dari suatu workload, workload tersebut dihapus dari pool load balancing dan permintaan dialihkan ke workload sehat lainnya. Failover lalu lintas mengikuti urutan prioritas berikut:
-
Other workloads in the same zone
-
Workloads in a different zone within the same region
Untuk memberi tahu kontak bisnis saat terjadi failover, konfigurasikan instans Prometheus untuk mengumpulkan metrik service mesh dan atur peringatan (alert).
-
Cross-region traffic failover
Jika tidak ada workload sehat yang tersedia di semua zona dalam suatu wilayah, lalu lintas dialihkan ke layanan yang sama yang diterapkan sebagai peer di kluster di wilayah lain. Service mesh menangani proses ini secara otomatis. Failover lintas wilayah memerlukan konektivitas jaringan antar-kluster. Untuk metode yang tersedia beserta pertimbangan trade-off-nya, lihat Application deployment topologies.
Application deployment topologies: supported cluster topologies and a comparison
Mekanisme failover locality-aware ASM berlaku untuk berbagai topologi penyebaran aplikasi. Setiap topologi mencakup dimensi kegagalan yang berbeda serta memiliki perbedaan dalam biaya sumber daya dan kompleksitas O&M.
Compare deployment topologies
Tabel berikut membandingkan empat topologi penyebaran yang didukung berdasarkan dimensi pengambilan keputusan utama untuk membantu Anda memilih topologi yang tepat sesuai kebutuhan bisnis:
| Topology | Failure coverage | Resource cost | O&M complexity |
| Single-cluster, multi-zone | Kegagalan tingkat zona. Tidak dapat menangani kesalahan konfigurasi Kubernetes atau kegagalan ketergantungan aplikasi. | Rendah. Satu kluster ACK, satu set sumber daya cloud dalam satu wilayah. | Rendah |
| Single-region, multi-zone, multi-cluster | Kegagalan tingkat zona dengan cakupan lebih luas melalui isolasi kluster. Tidak dapat menangani kegagalan tingkat wilayah. | Sedang. Beberapa kluster dan infrastruktur cloud dalam satu wilayah. | Sedang. Layanan diterapkan di beberapa kluster. |
| Multi-region, multi-cluster | Kegagalan tingkat zona, wilayah, dan kluster. | Tinggi. Beberapa kluster lintas wilayah, ditambah konektivitas jaringan lintas wilayah. Diperlukan dua instans service mesh untuk latensi push konfigurasi yang lebih baik. | Tinggi. Perencanaan jaringan lintas wilayah dan O&M multi-kluster. |
| Multi-region, multi-cluster (multicloud) | Kegagalan tingkat zona, wilayah, kluster, dan penyedia cloud. | Paling tinggi. Beberapa kluster lintas penyedia cloud dan wilayah. | Paling tinggi. Masalah kompatibilitas lintas-cloud dan masalah tak terduga akibat perbedaan infrastruktur serta kemampuan layanan cloud. |
Cara memilih:
-
Mulai dengan single-cluster, multi-zone jika Anda memerlukan pemulihan bencana dasar tingkat zona dengan biaya dan kompleksitas minimal.
-
Gunakan multi-region, multi-cluster ketika Anda memerlukan ketersediaan tinggi yang mencakup kegagalan tingkat wilayah. Ini adalah topologi yang direkomendasikan untuk workload HA produksi.
-
Gunakan multi-region, multi-cluster (multicloud) ketika Anda perlu bertahan dari kegagalan seluruh penyedia cloud.
-
Single-region, multi-zone, multi-cluster meningkatkan kompleksitas penyebaran dan O&M tanpa menyediakan failover tingkat wilayah. Pertimbangkan penyebaran multi-region, multi-cluster sebagai gantinya jika Anda memerlukan cakupan kegagalan yang lebih luas.
Single-cluster, multi-zone deployment
Ini adalah mode penyebaran paling sederhana untuk pemulihan bencana. Konfigurasikan node pool multi-zona, pilih vSwitch dari beberapa zona untuk node pool tersebut, dan pilih kebijakan distribusi seimbang saat mengonfigurasi kebijakan penskalaan. Instans ECS kemudian akan didistribusikan secara merata di zona-zona yang ditentukan untuk grup penskalaan.
| Pros | Cons |
| Hanya memerlukan satu kluster ACK yang berisi node pool multi-zona, dengan aplikasi yang diterapkan secara merata di berbagai zona menggunakan topology spread constraints. | Tidak dapat menangani kegagalan akibat kesalahan konfigurasi Kubernetes atau ketergantungan aplikasi. |
| Sumber daya cloud seperti load balancing, database, kluster Kubernetes, dan service mesh hanya perlu disiapkan sekali dalam satu wilayah. | Tidak dapat menangani kegagalan tingkat wilayah. |
Single-region, multi-zone, multi-cluster deployment
Mode ini memperluas kluster tunggal dari penyebaran single-cluster, multi-zone menjadi beberapa kluster, masing-masing dengan konfigurasinya sendiri. Saat terjadi failover, ASM pertama-tama mencari workload lain di zona yang sama, lalu memilih salah satu workload sehat di zona berbeda dalam wilayah yang sama sebagai tujuan failover. Pilih zona yang terpisah untuk kedua kluster tersebut. Jika zona kedua kluster tumpang tindih, workload di zona yang sama mungkin memiliki prioritas lebih tinggi daripada workload di kluster yang sama, yang bisa berdampak tak terduga bagi bisnis Anda.
| Pros | Cons |
| Dibandingkan dengan penyebaran single-cluster, topologi ini mencakup lebih banyak penyebab kegagalan dan lebih meningkatkan ketersediaan sistem secara keseluruhan. | Layanan harus diterapkan sebagai peer di dua lingkungan kluster Kubernetes, sehingga membuat penyebaran dan O&M lebih kompleks. Sumber daya infrastruktur cloud seperti load balancing dan kluster Kubernetes harus diterapkan beberapa kali, sehingga meningkatkan biaya. |
| Kedua kluster hanya perlu berada dalam VPC yang sama. Topologi ini memiliki biaya konektivitas antar-kluster yang rendah saat lalu lintas harus dialihkan ke layanan di kluster lain. | Tidak dapat menangani kegagalan tingkat wilayah. Memerlukan perencanaan jaringan untuk menghindari konflik antar-konfigurasi kluster. Untuk informasi selengkapnya, lihatPlan CIDR blocks for multiple clusters. |
Multi-region, multi-cluster deployment
Mode ini mengubah penyebaran single-region dari arsitektur multi-kluster menjadi penyebaran multi-wilayah. Mode ini menjaga penyebaran setiap layanan tersebar di semua dimensi: zona, wilayah, kluster, dan ketergantungan. Dengan demikian, workload sehat tetap melayani lalu lintas saat terjadi kegagalan karena alasan apa pun.
| Pros | Cons |
| Mendistribusikan workload layanan yang sama di berbagai wilayah, zona, dan kluster untuk meningkatkan ketersediaan layanan. | Layanan harus diterapkan sebagai peer di dua lingkungan kluster Kubernetes. Untuk latensi push konfigurasi yang lebih baik, juga diperlukan dua instans service mesh. |
| Arsitektur lapisan kontrol multi-master secara efektif mengontrol latensi. | Konektivitas jaringan lintas wilayah kompleks. |
Untuk kebutuhan ketersediaan tinggi, penyebaran multi-region, multi-kluster menyediakan tingkat ketersediaan layanan tertinggi di antara opsi topologi yang dikelola ASM. Jika Anda perlu menghubungkan jaringan lintas kluster, gunakan salah satu metode berikut:
-
Gunakan Cloud Enterprise Network (CEN) untuk menghubungkan langsung jaringan dasar kluster di wilayah berbeda. Pertama, rencanakan konfigurasi jaringan kluster untuk menghindari konflik jaringan. Untuk informasi selengkapnya, lihatPlan CIDR blocks for multiple clusters. Kemudian, gunakan CEN untuk menghubungkan jaringan lintas wilayah. Untuk informasi selengkapnya, lihatCreate a cross-region connection. Metode ini cocok untuk pelanggan dengan kebutuhan lalu lintas lintas wilayah berkualitas tinggi.
-
Gunakan proxy jaringan lintas-kluster ASM untuk menghubungkan jaringan lintas kluster dan menerapkan failover. Metode ini mengoptimalkan biaya sumber daya dan menyelesaikan masalah kompleksitas konektivitas jaringan. Dengan metode ini, jaringan kedua kluster tidak perlu dihubungkan secara langsung, dan tidak diperlukan perencanaan jaringan kluster. Proxy tersebut membuat saluran aman berbasis mTLS antar-kluster untuk komunikasi lintas-kluster yang diperlukan dan failover lalu lintas lintas wilayah yang aman. Karena metode ini bergantung pada komunikasi jaringan publik dengan kualitas terbatas, metode ini cocok untuk skenario yang tidak memiliki persyaratan ketat terhadap komunikasi antar-kluster atau saat jaringan fisik kluster tidak dapat dihubungkan. Untuk informasi selengkapnya tentang proxy mesh lintas-kluster ASM, lihatDisaster recovery for multiple ACK clusters in different VPCs (using ASM cross-cluster mesh proxy).
Multi-region, multi-cluster deployment across a multicloud environment
Ini adalah topologi penyebaran paling canggih. ASM sepenuhnya mendukung pengelolaan kluster Kubernetes dari penyedia cloud mana pun dan pusat data on-premises. Jalankan dua lingkungan kluster Kubernetes di penyedia cloud berbeda, atau jalankan satu di cloud dan satu di on-premises. Jika salah satu infrastruktur gagal, infrastruktur lainnya tetap menyediakan layanan Anda.
Seperti halnya penyebaran multi-region, multi-kluster, penyebaran multi-cloud, multi-region, multi-kluster juga memerlukan konektivitas jaringan antar-kluster. Namun, ASM tidak dapat menyediakan lapisan kontrol terkelola di lingkungan non-Alibaba Cloud. Gunakan lapisan kontrol remote ASM untuk mengatasi latensi push konfigurasi service mesh dalam skenario lintas-cloud. Untuk informasi selengkapnya, lihatUse a remote control plane to reduce push latency.
| Pros | Cons |
| Mendistribusikan workload layanan yang sama di berbagai wilayah, zona, kluster, dan penyedia cloud untuk meningkatkan ketersediaan layanan. | Layanan harus diterapkan sebagai peer di dua lingkungan kluster Kubernetes. Karena infrastruktur dan kemampuan layanan cloud berbeda antar-penyedia cloud, penyebaran multi-cloud mungkin menghadapi banyak masalah kompatibilitas dan masalah tak terduga lainnya. |
| Arsitektur lapisan kontrol multi-master secara efektif mengontrol latensi. | Konektivitas jaringan lintas wilayah kompleks. |
Prerequisites
Sebelum mengonfigurasi pemulihan bencana tingkat layanan dengan ASM, pastikan Anda telah memiliki sumber daya dan izin berikut:
-
ACK clusters — Buat kluster Kubernetes di masing-masing dua wilayah atau lebih. Konfigurasikan beberapa zona untuk setiap kluster dan aktifkan Expose API server with EIP. Untuk informasi selengkapnya, lihatCreate an ACK managed cluster.
-
ASM instances — Buat instans ASM di setiap wilayah tempat Anda memiliki kluster ACK. Pilih vSwitch di zona yang sama dengan kluster ACK yang sesuai. Untuk informasi selengkapnya, lihat Step 1, Step 2, and Step 3 dalamImplement multi-cluster disaster recovery with an ASM multi-master control plane architecture.
-
NLB ingress gateways — Buat gerbang masuk tipe NLB di setiap instans ASM. Pilih zona yang sama dengan instans ASM dan kluster ACK untuk NLB tersebut. Untuk informasi selengkapnya, lihatUse an NLB instance for an ASM ingress gateway.
-
Sidecar injection — Aktifkan injeksi sidecar otomatis untuk namespace
defaultdi setiap kluster. Ini dikonfigurasi sebagai bagian dari manajemen namespace global di ASM. Untuk informasi selengkapnya, lihatManage global namespaces. -
Network planning — Untuk penyebaran multi-wilayah, rencanakan blok CIDR kluster Anda untuk menghindari konflik jaringan. Untuk informasi selengkapnya, lihatPlan CIDR blocks for multiple clusters.
-
GTM configuration — Konfigurasikan Global Traffic Manager (GTM) dengan instans NLB untuk menerapkan pemulihan bencana aktif-aktif untuk gerbang masuk. Untuk informasi selengkapnya, lihatHow GTM implements active-active disaster recovery.
Configure disaster recovery
Contoh berikut menggunakan penyebaran multi-wilayah, multi-kluster untuk menunjukkan proses pemulihan bencana tingkat layanan.
Step 1: Prepare the environment
Lengkapi sub-langkah berikut secara berurutan untuk menyiapkan lingkungan demonstrasi pemulihan bencana.
-
Buat kluster Kubernetes di masing-masing dua wilayah dan beri nama
cluster-1dancluster-2. Konfigurasikan beberapa zona untuk kedua kluster dan aktifkan Expose API server with EIP. Untuk informasi selengkapnya, lihatCreate an ACK managed cluster. -
Di dua wilayah yang sama dengan kluster ACK, buat instans ASM
mesh-1danmesh-2. Saat membuat instans, pastikan Anda memilih vSwitch di zona yang sama dengan kluster ACK. Untuk informasi selengkapnya, lihat Step 1, Step 2, and Step 3 dalamImplement multi-cluster disaster recovery with an ASM multi-master control plane architecture. -
Di
mesh-1danmesh-2, buat gerbang masuk tipe NLB bernamaingressgateway. Untuk zona NLB, pilih dua zona yang sama dengan instans ASM dan kluster ACK. Untuk informasi selengkapnya, lihatUse an NLB instance for an ASM ingress gateway. -
Di
mesh-1danmesh-2, aktifkan injeksi sidecar otomatis untuk namespacedefaultdari kedua kluster. Ini dikonfigurasi sebagai bagian dari manajemen namespace global di ASM. Untuk informasi selengkapnya, lihatManage global namespaces. -
Terapkan aplikasi contoh sebagai peer di kedua kluster ACK. Contoh ini menggunakan dua zona:
cn-hangzhou-hdancn-hangzhou-k. Sesuaikan zona dalam YAML berdasarkan lingkungan aktual Anda.CatatanGambar kontainer dalam YAML berikut diambil dari registri China (Hangzhou) (
registry-cn-hangzhou.ack.aliyuncs.com). Jika Anda menerapkan lintas wilayah, pastikan gambar tersebut tersedia di semua wilayah target. Anda mungkin perlu mengonfigurasi sinkronisasi gambar lintas wilayah melalui Container Registry.Expand to view the command
Setelah menjalankan perintah di atas di kedua kluster, layanankubectl apply -f- <<EOF apiVersion: v1 kind: Service metadata: name: mocka labels: app: mocka service: mocka spec: ports: - port: 8000 name: http selector: app: mocka --- apiVersion: apps/v1 kind: Deployment metadata: name: mocka-cn-hangzhou-h labels: app: mocka spec: replicas: 1 selector: matchLabels: app: mocka template: metadata: labels: app: mocka locality: cn-hangzhou-h spec: nodeSelector: topology.kubernetes.io/zone: cn-hangzhou-h containers: - name: default image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/go-http-sample:tracing imagePullPolicy: IfNotPresent env: - name: version value: cn-hangzhou-h - name: app value: mocka - name: upstream_url value: "http://mockb:8000/" ports: - containerPort: 8000 --- apiVersion: apps/v1 kind: Deployment metadata: name: mocka-cn-hangzhou-k labels: app: mocka spec: replicas: 1 selector: matchLabels: app: mocka template: metadata: labels: app: mocka locality: cn-hangzhou-k spec: nodeSelector: topology.kubernetes.io/zone: cn-hangzhou-k containers: - name: default image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/go-http-sample:tracing imagePullPolicy: IfNotPresent env: - name: version value: cn-hangzhou-k - name: app value: mocka - name: upstream_url value: "http://mockb:8000/" ports: - containerPort: 8000 --- apiVersion: v1 kind: Service metadata: name: mockb labels: app: mockb service: mockb spec: ports: - port: 8000 name: http selector: app: mockb --- apiVersion: apps/v1 kind: Deployment metadata: name: mockb-cn-hangzhou-h labels: app: mockb spec: replicas: 1 selector: matchLabels: app: mockb template: metadata: labels: app: mockb locality: cn-hangzhou-h spec: nodeSelector: topology.kubernetes.io/zone: cn-hangzhou-h containers: - name: default image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/go-http-sample:tracing imagePullPolicy: IfNotPresent env: - name: version value: cn-hangzhou-h - name: app value: mockb - name: upstream_url value: "http://mockc:8000/" ports: - containerPort: 8000 --- apiVersion: apps/v1 kind: Deployment metadata: name: mockb-cn-hangzhou-k labels: app: mockb spec: replicas: 1 selector: matchLabels: app: mockb template: metadata: labels: app: mockb locality: cn-hangzhou-k spec: nodeSelector: topology.kubernetes.io/zone: cn-hangzhou-k containers: - name: default image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/go-http-sample:tracing imagePullPolicy: IfNotPresent env: - name: version value: cn-hangzhou-k - name: app value: mockb - name: upstream_url value: "http://mockc:8000/" ports: - containerPort: 8000 --- apiVersion: v1 kind: Service metadata: name: mockc labels: app: mockc service: mockc spec: ports: - port: 8000 name: http selector: app: mockc --- apiVersion: apps/v1 kind: Deployment metadata: name: mockc-cn-hangzhou-h labels: app: mockc spec: replicas: 1 selector: matchLabels: app: mockc template: metadata: labels: app: mockc locality: cn-hangzhou-h spec: nodeSelector: topology.kubernetes.io/zone: cn-hangzhou-h containers: - name: default image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/go-http-sample:tracing imagePullPolicy: IfNotPresent env: - name: version value: cn-hangzhou-h - name: app value: mockc ports: - containerPort: 8000 --- apiVersion: apps/v1 kind: Deployment metadata: name: mockc-cn-hangzhou-k labels: app: mockc spec: replicas: 1 selector: matchLabels: app: mockc template: metadata: labels: app: mockc locality: cn-hangzhou-k spec: nodeSelector: topology.kubernetes.io/zone: cn-hangzhou-k containers: - name: default image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/go-http-sample:tracing imagePullPolicy: IfNotPresent env: - name: version value: cn-hangzhou-k - name: app value: mockc ports: - containerPort: 8000 --- apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: mocka namespace: default spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: test number: 80 protocol: HTTP --- apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: demoapp-vs namespace: default spec: gateways: - mocka hosts: - '*' http: - name: test route: - destination: host: mocka port: number: 8000 EOFmocka,mockb, danmockcditerapkan sebagai peer di kedua kluster. Setiap layanan berisi dua penyebaran tanpa status dengan masing-masing satu replika. PengaturannodeSelectoryang berbeda mendistribusikan penyebaran ke node di zona berbeda, dan variabel lingkungan membuat setiap penyebaran mengembalikan zona tempatnya berada.Untuk demonstrasi yang sederhana, contoh ini menggunakan field
nodeSelectoruntuk memilih zona setiap pod secara manual. Saat membangun lingkungan ketersediaan tinggi yang sesungguhnya, konfigurasikan topology spread constraints untuk mendistribusikan pod di berbagai zona sebanyak mungkin. Untuk informasi selengkapnya, lihatConfigure high availability for workloads. -
Konfigurasikan Global Traffic Manager (GTM) dengan instans NLB untuk menerapkan pemulihan bencana aktif-aktif untuk gerbang masuk. Untuk informasi selengkapnya, lihatHow GTM implements active-active disaster recovery.
Step 2: Enable locality-aware failover
ASM mengaktifkan failover locality-aware secara default, tetapi fitur ini hanya berlaku bersamaan dengan aturan circuit breaking tingkat host yang dikonfigurasi dalam destination rule.
-
Terapkan aturan circuit breaking tingkat host di kluster
cluster-1dancluster-2.kubectl apply -f- <<EOF apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: mocka spec: host: mocka trafficPolicy: outlierDetection: splitExternalLocalOriginErrors: true consecutiveLocalOriginFailures: 1 baseEjectionTime: 5m consecutive5xxErrors: 1 interval: 30s maxEjectionPercent: 100 --- apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: mockb spec: host: mockb trafficPolicy: outlierDetection: splitExternalLocalOriginErrors: true consecutiveLocalOriginFailures: 1 baseEjectionTime: 5m consecutive5xxErrors: 1 interval: 30s maxEjectionPercent: 100 --- apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: mockc spec: host: mockc trafficPolicy: outlierDetection: splitExternalLocalOriginErrors: true consecutiveLocalOriginFailures: 1 baseEjectionTime: 5m consecutive5xxErrors: 1 interval: 30s maxEjectionPercent: 100 EOFoutlierDetectionadalah mekanisme yang digunakan service mesh untuk deteksi kegagalan layanan dan pengeluaran endpoint yang rusak. Tabel berikut menjelaskan item konfigurasi:Configuration item Description interval Interval pelaksanaan deteksi kegagalan. baseEjectionTime Waktu tunggu sebelum suatu endpoint dikeluarkan dari pool load balancing setelah endpoint tersebut ditentukan mengalami kegagalan. maxEjectionPercent Persentase maksimum endpoint yang dapat dikeluarkan. consecutive5xxErrors Jumlah error 5xxberurutan yang dikembalikan suatu endpoint sebelum endpoint tersebut ditentukan mengalami kegagalan.splitExternalLocalOriginErrors Menentukan apakah kegagalan koneksi dan timeout koneksi dihitung sebagai kegagalan. consecutiveLocalOriginFailures Jumlah error non-5xx berurutan, seperti kegagalan koneksi dan timeout koneksi, yang dihasilkan suatu endpoint sebelum endpoint tersebut ditentukan mengalami kegagalan. -
Verifikasi status layanan.
Kirim permintaan ke nama domain layanan.
curl mock.asm-demo.work/mock -v* Host mock.asm-demo.work:80 was resolved. * IPv6: (none) * IPv4: 8.xxx.xxx.47, 8.xxx.xxx.42 * Trying 8.xxx.xxx.47:80... * Connected to mock.asm-demo.work (8.209.XXX.XX) port 80 > GET /mock HTTP/1.1 > Host: mock.asm-demo.work > User-Agent: curl/8.7.1 > Accept: */* > * Request completely sent off < HTTP/1.1 200 OK < date: Wed, 11 Dec 2024 12:10:56 GMT < content-length: 153 < content-type: text/plain; charset=utf-8 < x-envoy-upstream-service-time: 3 < server: istio-envoy < * Connection #0 to host mock.asm-demo.work left intact -> mocka(version: cn-hangzhou-k, ip: 10.1.225.40)-> mockb(version: cn-hangzhou-k, ip: 10.1.225.31)-> mockc(version: cn-hangzhou-k, ip: 10.1.225.32)%Rantai panggilan layanan tetap berada pada workload di zona yang sama.
Step 3: Perform a failure drill
Contoh berikut mensimulasikan kegagalan workload dengan mengganti gambar kontainer layanan mockb di salah satu zona secara manual.
-
Ganti gambar
mockb-cn-hangzhou-hdicluster-2untuk mensimulasikan kegagalan.-
Masuk keACK console. Di panel navigasi kiri, klik Clusters.
-
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Deployments.
-
Di daftar, temukan workload
mockb-cn-hangzhou-h. Di kolom Actions di sebelah kanan, klik Edit. Ubah gambar menjadiregistry.cn-hangzhou.aliyuncs.com/acs/curl:8.1.2, dan tambahkan["sleep","3600"]ke command di field Start agar kontainer dapat dimulai dengan benar. Klik Update.
-
-
Akses terus-menerus nama domain aplikasi untuk melihat jalur permintaan setelah kegagalan terjadi.
Expected result 1: Permintaan dikirim ke zona selaincurl mock.asm-demo.work/mock -vcn-hangzhou-h.* Host mock.asm-demo.work:80 was resolved. * IPv6: (none) * IPv4: 8.209.XXX.XX, 8.221.XXX.XX * Trying 8.209.247.47:80... * Connected to mock.asm-demo.work (8.209.247.47) port 80 > GET /mock HTTP/1.1 > Host: mock.asm-demo.work > User-Agent: curl/8.7.1 > Accept: */* > * Request completely sent off < HTTP/1.1 200 OK < date: Wed, 11 Dec 2024 12:10:56 GMT < content-length: 153 < content-type: text/plain; charset=utf-8 < x-envoy-upstream-service-time: 3 < server: istio-envoy < * Connection #0 to host mock.asm-demo.work left intact -> mocka(version: cn-hangzhou-k, ip: 10.1.225.40)-> mockb(version: cn-hangzhou-k, ip: 10.1.225.31)-> mockc(version: cn-hangzhou-k, ip: 10.1.225.32)%Permintaan tetap berada di zona yang sehat.
Expected result 2: Permintaan dikirim ke zona
cn-hangzhou-huntuk pertama kalinya.
Koneksi ditolak saat permintaan mencapai layanan* Host mock.asm-demo.work:80 was resolved. * IPv6: (none) * IPv4: 112.124.XX.XXX, 121.41.XXX.XXX * Trying 112.124.65.120:80... * Connected to mock.asm-demo.work (112.124.65.120) port 80 > GET /mock HTTP/1.1 > Host: mock.asm-demo.work > User-Agent: curl/8.7.1 > Accept: */* > * Request completely sent off < HTTP/1.1 200 OK < date: Wed, 11 Dec 2024 12:08:45 GMT < content-length: 220 < content-type: text/plain; charset=utf-8 < x-envoy-upstream-service-time: 48 < server: istio-envoy < * Connection #0 to host mock.asm-demo.work left intact -> mocka(version: cn-hangzhou-h, ip: 192.168.122.135)upstream connect error or disconnect/reset before headers. reset reason: remote connection failure, transport failure reason: delayed connect error: Connection refused%mockb.Expected result 3: Permintaan dikirim ke zona
cn-hangzhou-hlagi setelah proxy sidecar mendeteksi kegagalan.
Lalu lintas* Host mock.asm-demo.work:80 was resolved. * IPv6: (none) * IPv4: 8.209.XXX.XX, 8.221.XXX.XX * Trying 8.209.247.47:80... * Connected to mock.asm-demo.work (8.209.247.47) port 80 > GET /mock HTTP/1.1 > Host: mock.asm-demo.work > User-Agent: curl/8.7.1 > Accept: */* > * Request completely sent off < HTTP/1.1 200 OK < date: Wed, 11 Dec 2024 12:10:59 GMT < content-length: 154 < content-type: text/plain; charset=utf-8 < x-envoy-upstream-service-time: 4 < server: istio-envoy < * Connection #0 to host mock.asm-demo.work left intact -> mocka(version: cn-hangzhou-h, ip: 10.0.239.141)-> mockb(version: cn-hangzhou-k, ip: 10.1.225.31)-> mockc(version: cn-hangzhou-k, ip: 10.1.225.32)%mockbdialihkan kecn-hangzhou-k, zona berbeda dalam wilayah yang sama.
(Optional) Step 4: Configure alerts for service-level failures
-
Konfigurasikan proxy sidecar untuk melaporkan metrik circuit breaking melalui
proxyStatsMatcher. Saat mengonfigurasiproxyStatsMatcher, pilih Regular Expression Match dan atur nilainya menjadi.*outlier_detection.*. Untuk informasi selengkapnya, lihatproxyStatsMatcher.Tabel berikut menjelaskan beberapa metrik circuit breaking:
Metric Metric type Description envoy_cluster_outlier_detection_ejections_active Gauge Jumlah host yang saat ini dikeluarkan. envoy_cluster_outlier_detection_ejections_enforced_total Counter Jumlah kejadian pengeluaran host. envoy_cluster_outlier_detection_ejections_overflow Counter Jumlah kali pengeluaran host dilewati karena persentase pengeluaran maksimum telah terlampaui. ejections_detected_consecutive_5xx Counter Jumlah kali suatu host terdeteksi mengembalikan error 5xx berurutan. -
Terapkan ulang workload tanpa status (
mocka,mockb, danmockc) untuk menerapkan konfigurasiproxyStatsMatcheryang telah diperbarui. Untuk informasi selengkapnya, lihatRedeploy the workload. -
Buat aturan peringatan untuk circuit breaking tingkat host.
-
Integrasikan komponen Alibaba Cloud ASM dengan kluster bidang data atau tingkatkan komponen tersebut ke versi terbaru, sehingga Managed Service for Prometheus dapat mengumpulkan metrik circuit breaking yang diekspos. Untuk informasi selengkapnya tentang cara memperbarui komponen integrasi, lihatManage integrations. (Jika Anda sudah mengumpulkan metrik service mesh dengan instans Prometheus yang dikelola sendiri seperti yang dijelaskan dalamIntegrate a self-managed Prometheus instance for mesh monitoring, lewati langkah ini.)
-
Buat aturan peringatan untuk circuit breaking tingkat host. Untuk informasi selengkapnya, lihatCreate an alert rule for a Prometheus instance.
Tabel berikut memberikan contoh parameter kunci aturan peringatan: Konfigurasikan parameter lainnya sesuai kebutuhan Anda dengan merujuk pada dokumen di atas.
Parameter Example Description Custom PromQL statement (sum (envoy_cluster_outlier_detection_ejections_active) by (cluster_name, namespace)) > 0 Contoh ini melakukan kueri terhadap metrik envoy_cluster_outlier_detection_ejections_active untuk menentukan apakah ada host yang sedang dikeluarkan di kluster, dan mengelompokkan hasil kueri berdasarkan namespace dan nama layanan. Alert content Host-level circuit breaking is triggered. A workload returned consecutive errors and was ejected from the service load balancing pool! Namespace: {{$labels.namespace}}. Service where the ejection occurred: {{$labels.cluster_name}}. Number of ejections: {{ $value }} Contoh pesan peringatan ini menunjukkan namespace dan nama layanan yang memicu circuit breaking, serta jumlah host yang sedang dikeluarkan untuk layanan tersebut. -