Anda dapat menggunakan gateway multi-kluster ALB ACK One dengan GitOps ACK One atau distribusi aplikasi multi-kluster untuk segera menerapkan pemulihan bencana antar-zona aktif-aktif bagi aplikasi Anda. Solusi ini menjamin ketersediaan tinggi dan menyediakan failover otomatis. Topik ini menjelaskan cara membangun sistem pemulihan bencana antar-zona menggunakan gateway multi-kluster ALB.
Ikhtisar pemulihan bencana
Solusi pemulihan bencana berbasis cloud umumnya dikategorikan menjadi tiga jenis:
-
Pemulihan bencana antar-AZ: Jenis ini mencakup strategi aktif-aktif maupun aktif-pasif. Karena pusat data dalam wilayah yang sama secara fisik berdekatan, latensi jaringan rendah. Konfigurasi ini melindungi dari bencana tingkat AZ seperti kebakaran, gangguan jaringan, atau pemadaman listrik. Solusi ini praktis, menawarkan pencadangan data yang sederhana dan pemulihan cepat.
-
Redundansi geo-aktif: Meskipun pendekatan ini menghasilkan latensi jaringan yang lebih tinggi, solusi ini melindungi dari bencana tingkat wilayah seperti gempa bumi dan banjir.
-
Dua wilayah, tiga pusat: Model ini menggabungkan konfigurasi dua pusat dalam satu wilayah dengan situs pemulihan bencana di wilayah lain, sehingga menggabungkan keunggulan keduanya. Model ini ideal untuk skenario yang menuntut kontinuitas dan ketersediaan aplikasi serta data yang tinggi.
Dari perspektif arsitektur bisnis, sistem enterprise tipikal terbagi menjadi lapisan akses, lapisan aplikasi, dan lapisan data.
-
Lapisan akses: Berfungsi sebagai titik masuk trafik, menerima dan meneruskan trafik ke lapisan aplikasi backend berdasarkan aturan routing.
-
Lapisan aplikasi: Berisi layanan aplikasi yang memproses data berdasarkan permintaan dan mengembalikan tanggapan ke lapisan hulu.
-
Lapisan data: Menyediakan layanan penyimpanan data untuk lapisan aplikasi.
Untuk mencapai pemulihan bencana bisnis end-to-end, Anda harus menerapkan langkah-langkah pemulihan bencana pada setiap lapisan tersebut.
-
Lapisan akses: Gateway multi-kluster ALB ACK One berperan sebagai lapisan akses dan menyediakan ketersediaan tinggi bawaan lintas AZ dalam wilayah yang sama.
-
Lapisan aplikasi: Gateway multi-kluster ALB ACK One menangani pemulihan bencana untuk lapisan aplikasi, memungkinkan pemulihan bencana antar-zona aktif-aktif/aktif-pasif dan redundansi geo-aktif.
-
Lapisan data: Pemulihan bencana dan sinkronisasi data pada lapisan data bergantung pada kemampuan middleware yang digunakan.
Manfaat
Menggunakan gateway multi-kluster ALB ACK One untuk pemulihan bencana memberikan keunggulan berikut dibandingkan solusi berbasis DNS:
-
Pemulihan bencana berbasis DNS memerlukan beberapa alamat IP load balancer (satu untuk setiap kluster). Sebaliknya, solusi berbasis gateway hanya memerlukan satu alamat IP load balancer per wilayah dan secara default menyediakan ketersediaan tinggi lintas beberapa AZ.
-
Solusi berbasis gateway mendukung routing Lapisan 7, sedangkan solusi berbasis DNS tidak.
-
Pada solusi berbasis DNS, perubahan alamat IP dapat menyebabkan gangguan layanan sementara akibat caching DNS di sisi klien. Solusi berbasis gateway memungkinkan failover trafik yang mulus ke backend layanan di kluster lain.
-
Gateway multi-kluster merupakan resource regional. Semua operasi dikelola dari instans Fleet pusat, sehingga menghilangkan kebutuhan untuk menginstal controller Ingress dan membuat resource Ingress di setiap kluster ACK. Hal ini menyediakan manajemen trafik regional sekaligus mengurangi beban manajemen multi-kluster.
Arsitektur solusi
Topik ini menggunakan aplikasi web contoh, yang mencakup resource Deployment dan Service, untuk menunjukkan arsitektur solusi pemulihan bencana antar-zona yang dibangun dengan gateway multi-kluster ALB.
-
Buat dua kluster ACK, Kluster 1 dan Kluster 2, di dua AZ berbeda (AZ 1 dan AZ 2) dalam wilayah yang sama.
-
Gunakan GitOps ACK One untuk mendistribusikan aplikasi ke Kluster 1 dan Kluster 2.
-
Buat gateway multi-kluster ALB dengan membuat resource AlbConfig di instans ACK One Fleet.
-
Setelah membuat gateway multi-kluster ALB, buat Ingress untuk merutekan trafik berdasarkan bobot atau header. Jika salah satu kluster tidak tersedia, trafik akan secara otomatis diarahkan ke kluster yang sehat.
-
Sinkronisasi data untuk ApsaraDB RDS bergantung pada kemampuan middleware.
Prasyarat
-
Anda telah mengaktifkan layanan Application Load Balancer (ALB).
-
Anda telah mengaktifkan fitur manajemen fleet.
-
Dua kluster ACK telah diasosiasikan dengan Fleet ACK One. Kluster tersebut harus berada dalam Virtual Private Cloud (VPC) yang sama dengan instans Fleet. Untuk informasi selengkapnya, lihat Mengelola kluster yang diasosiasikan.
-
Peroleh KubeConfig untuk instans Fleet dari Konsol ACK One, lalu hubungkan ke instans Fleet menggunakan kubectl.
-
Instal versi terbaru Cloud Assistant CLI dan konfigurasikan Cloud Assistant CLI.
Langkah 1: Deploy aplikasi ke beberapa kluster
ACK One mendukung deployment aplikasi ke beberapa kluster melalui GitOps multi-kluster atau distribusi aplikasi multi-kluster. Untuk informasi selengkapnya, lihat Mulai cepat untuk GitOps, Membuat aplikasi multi-kluster, dan Mulai cepat untuk distribusi aplikasi. Topik ini menggunakan GitOps sebagai contoh.
-
Masuk ke Konsol ACK One. Di panel navigasi sebelah kiri, pilih .
-
Di pojok kiri atas halaman Multi-cluster GitOps, klik tombol
di samping nama fleet, lalu pilih fleet target dari daftar drop-down. -
Klik untuk membuka halaman Create Multi-cluster Application - GitOps.
Catatan-
Pastikan GitOps telah diaktifkan untuk instans ACK One Fleet. Untuk informasi selengkapnya, lihat Aktifkan GitOps di instans ACK One Fleet.
-
Untuk mengakses GitOps melalui internet, lihat Aktifkan akses publik ke GitOps.
-
-
Pada tab Create from YAML, salin konten YAML berikut ke editor, lalu klik OK untuk membuat dan mendeploy aplikasi.
CatatanYAML berikut mendeploy aplikasi
web-demoke semua kluster yang diasosiasikan. Anda juga dapat memilih kluster tertentu pada tab Quick Create, dan pilihan Anda akan tercermin dalam konten pada tab Create from YAML.apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: appset-web-demo namespace: argocd spec: template: metadata: name: '{{.metadata.annotations.cluster_id}}-web-demo' namespace: argocd spec: destination: name: '{{.name}}' namespace: gateway-demo project: default source: repoURL: https://github.com/AliyunContainerService/gitops-demo.git path: manifests/helm/web-demo targetRevision: main helm: valueFiles: - values.yaml parameters: - name: envCluster value: '{{.metadata.annotations.cluster_name}}' syncPolicy: automated: {} syncOptions: - CreateNamespace=true generators: - clusters: selector: matchExpressions: - values: - cluster key: argocd.argoproj.io/secret-type operator: In - values: - in-cluster key: name operator: NotIn goTemplateOptions: - missingkey=error syncPolicy: preserveResourcesOnDeletion: false goTemplate: true
Langkah 2: Buat gateway multi-kluster ALB
Buat objek AlbConfig di instans ACK One Fleet untuk membuat gateway multi-kluster ALB ACK One dan mengasosiasikan kluster dengannya.
-
Peroleh dua ID vSwitch dari VPC tempat Fleet ACK One berada.
-
Buat file bernama
gateway.yamldengan konten berikut.Catatan-
Ganti
${vsw-id1}dan${vsw-id2}dengan ID vSwitch dari langkah sebelumnya. Ganti${cluster1}dan${cluster2}dengan ID kluster yang diasosiasikan yang ingin Anda tambahkan. -
Untuk kluster yang diasosiasikan
${cluster1}dan${cluster2}, konfigurasikan aturan masuk grup keamanan mereka agar mengizinkan trafik dari blok CIDR vSwitch pada semua port.
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: ackone-gateway-demo annotations: # Tambahkan kluster yang diasosiasikan yang akan memproses trafik ke instans multi-kluster ALB. alb.ingress.kubernetes.io/remote-clusters: ${cluster1},${cluster2} spec: config: name: one-alb-demo addressType: Internet addressAllocatedMode: Fixed zoneMappings: - vSwitchId: ${vsw-id1} - vSwitchId: ${vsw-id2} listeners: - port: 8001 protocol: HTTP --- apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: ackone-gateway-demoTabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Wajib
Deskripsi
metadata.nameYa
Nama AlbConfig.
metadata.annotations:alb.ingress.kubernetes.io/remote-clustersYa
Kluster yang diasosiasikan untuk ditambahkan ke gateway multi-kluster ALB. ID kluster yang ditentukan di sini harus sudah diasosiasikan dengan instans Fleet.
spec.config.nameTidak
Nama instans ALB.
spec.config.addressTypeTidak
Jenis jaringan instans ALB. Nilai yang valid:
-
Internet (default): Instans yang menghadap internet dan menyediakan layanan melalui internet.
CatatanApplication Load Balancer menggunakan alamat IP elastis (EIP) untuk menyediakan layanan melalui internet. Jika Anda menggunakan instans ALB yang menghadap internet, Anda akan dikenai biaya instans dan biaya bandwidth atau transfer data untuk EIP tersebut. Untuk informasi selengkapnya, lihat Pay-as-you-go.
Intranet: Instans jaringan pribadi yang menyediakan layanan dalam VPC dan tidak dapat diakses dari internet.
spec.config.zoneMappingsYa
ID vSwitch untuk instans ALB. Untuk informasi selengkapnya tentang cara membuat vSwitch, lihat Buat dan kelola vSwitch.
Catatan-
vSwitch yang ditentukan harus berada di zona ketersediaan yang didukung oleh ALB dan dalam VPC yang sama dengan kluster Anda. Untuk informasi selengkapnya tentang wilayah dan zona ketersediaan yang didukung oleh ALB, lihat Wilayah dan zona.
-
Untuk ketersediaan tinggi, pilih vSwitch dari minimal dua zona ketersediaan berbeda jika wilayah tersebut mendukung lebih dari satu.
spec.listenersTidak
Port listener dan protokol instans ALB. Contoh ini mengonfigurasi listener HTTP pada port 8001.
Listener menentukan bagaimana trafik memasuki load balancer. Pertahankan konfigurasi ini; jika tidak, Anda harus membuat listener sebelum menggunakan ALB Ingress.
-
-
Jalankan perintah berikut untuk mendeploy
gateway.yamlguna membuat gateway multi-kluster ALB dan IngressClass:kubectl apply -f gateway.yaml -
Tunggu 1 hingga 3 menit, lalu jalankan perintah berikut untuk memverifikasi bahwa gateway multi-kluster ALB telah dibuat:
kubectl get albconfig ackone-gateway-demoOutput yang diharapkan:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE ackone-gateway-demo alb-xxxx alb-xxxx.<regionid>.alb.aliyuncsslb.com 4d9h -
Jalankan perintah berikut untuk memverifikasi bahwa kluster yang diasosiasikan telah ditambahkan:
kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'Output yang diharapkan adalah daftar ID kluster.
Langkah 3: Terapkan pemulihan bencana dengan Ingress
Gateway multi-kluster menggunakan Ingress untuk mengelola trafik lintas beberapa kluster. Buat objek Ingress di instans ACK One Fleet untuk menerapkan pemulihan bencana antar-zona aktif-aktif.
-
Di instans Fleet, buat namespace tempat Service berada. Dalam contoh ini, namespace-nya adalah
gateway-demo. -
Buat file bernama
ingress-demo.yamldengan konten berikut.Catatan-
Jumlah bobot yang ditentukan dalam anotasi
alb.ingress.kubernetes.io/cluster-weightharus berjumlah 100. -
Aturan routing ini mengekspos layanan backend
service1pada path/svc1di domainalb.ingress.alibaba.com. Ganti${cluster1-id}dan${cluster2-id}dengan ID kluster Anda.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/listen-ports: | [{"HTTP": 8001}] alb.ingress.kubernetes.io/cluster-weight.${cluster1-id}: "20" alb.ingress.kubernetes.io/cluster-weight.${cluster2-id}: "80" name: web-demo namespace: gateway-demo spec: ingressClassName: alb rules: - host: alb.ingress.alibaba.com http: paths: - path: /svc1 pathType: Prefix backend: service: name: service1 port: number: 80 -
-
Jalankan perintah berikut untuk mendeploy Ingress di instans ACK One Fleet:
kubectl apply -f ingress-demo.yaml -n gateway-demo
Langkah 4: Verifikasi pemulihan bencana antar-zona
Verifikasi rasio routing trafik
Akses layanan dengan menggunakan perintah berikut:
curl -H "host: alb.ingress.alibaba.com" alb-xxxx.<regionid>.alb.aliyuncsslb.com:<listeners port>/svc1
Tabel berikut menjelaskan parameter-parameter tersebut.
|
Parameter |
Deskripsi |
|
|
|
|
|
Port listener (8001) yang didefinisikan dalam AlbConfig dan dideklarasikan dalam |
Jalankan perintah berikut. Hasilnya menunjukkan bahwa permintaan dirutekan ke Kluster 1 (poc-ack-1) dan Kluster 2 (poc-ack-2) dengan rasio 20:80.
for i in {1..500}; do curl -H "host: alb.ingress.alibaba.com" alb-xxxx.cn-beijing.alb.aliyuncsslb.com:8001/svc1; done > res.txt
grep poc-ack-1 res.txt |wc -l
108
grep poc-ack-2 res.txt |wc -l
392
Verifikasi failover trafik yang mulus
Jalankan perintah berikut. Saat perintah sedang berjalan, ubah secara manual jumlah replika aplikasi di Kluster 2 menjadi 0. Trafik akan secara otomatis melakukan failover ke Kluster 1.
for i in {1..500}; do curl -H "host: alb.ingress.alibaba.com" alb-xxxx.cn-beijing.alb.aliyuncsslb.com:8001/svc1; sleep 1; done
This is poc-ack-2!
This is poc-ack-2!
This is poc-ack-2!
This is poc-ack-2!
This is poc-ack-2!
This is poc-ack-2!
This is poc-ack-2!
This is poc-ack-2!
This is poc-ack-2!
This is poc-ack-2!
This is poc-ack-2!
This is poc-ack-2!
This is poc-ack-2!
This is poc-ack-2!
This is poc-ack-1!
This is poc-ack-1!
This is poc-ack-1!
This is poc-ack-1!
This is poc-ack-1!
This is poc-ack-1!
This is poc-ack-1!
This is poc-ack-1!
This is poc-ack-1!
This is poc-ack-1!
This is poc-ack-1!
This is poc-ack-1!
This is poc-ack-1!
This is poc-ack-1!