全部产品
Search
文档中心

Server Load Balancer:Implementasikan pemulihan bencana antar-zona menggunakan gateway multi-cluster ALB di ACK One

更新时间:Jul 06, 2025

Gateway multi-cluster Application Load Balancer (ALB) dari Distributed Cloud Container Platform for Kubernetes (ACK One) dapat digunakan bersama GitOps ACK One atau fitur distribusi aplikasi multi-cluster untuk mengimplementasikan pemulihan bencana antar-zona secara cepat. Hal ini memastikan ketersediaan tinggi bisnis Anda dan mengalihkan lalu lintas secara otomatis ketika terjadi gangguan. Topik ini menjelaskan cara membangun sistem pemulihan bencana antar-zona menggunakan gateway multi-cluster.

Ikhtisar Pemulihan Bencana

Solusi pemulihan bencana di cloud dapat diklasifikasikan ke dalam jenis-jenis berikut:

  • Pemulihan bencana antar-zona: Solusi ini mencakup redundansi zona aktif dan pemulihan bencana primer/sekunder. Latensi jaringan antara pusat data dalam wilayah yang sama rendah, sehingga cocok untuk melindungi data dari peristiwa berbahaya tingkat zona seperti kebakaran, gangguan jaringan, dan pemadaman listrik. Meskipun metode pencadangan dan pemulihan data sederhana, solusi ini berlaku untuk skenario umum.

  • Redundansi geo-aktif: Latensi jaringan antara pusat data lebih tinggi jika menggunakan solusi ini, tetapi efektif melindungi data dari bencana tingkat wilayah seperti banjir dan gempa bumi.

  • Pemulihan bencana berbasis tiga pusat data di dua zona: Solusi ini menggabungkan manfaat pemulihan bencana antar-zona dan redundansi geo-aktif, cocok untuk memastikan kontinuitas dan ketersediaan aplikasi.

Arsitektur bisnis suatu perusahaan biasanya dibagi menjadi lapisan-lapisan berikut: lapisan akses, lapisan aplikasi, dan lapisan data.

  • Lapisan akses: Berfungsi sebagai titik masuk untuk lalu lintas masuk dan mengarahkannya ke lapisan aplikasi backend berdasarkan aturan pengalihan.

  • Lapisan aplikasi: Menampung aplikasi dan memproses lalu lintas masuk sebelum mengirimkan hasilnya kembali ke lapisan atas.

  • Lapisan data: Menyimpan data dan menyediakan layanan penyimpanan serta data untuk lapisan aplikasi.

Untuk membangun sistem pemulihan bencana, langkah-langkah pemulihan harus diterapkan pada setiap lapisan.

  • Lapisan akses: ACK One menggunakan gateway multi-cluster untuk membangun lapisan akses dengan dukungan pemulihan bencana antar-zona, memastikan ketersediaan tinggi.

  • Lapisan aplikasi: Gateway multi-cluster ACK One mendukung redundansi zona aktif, pemulihan bencana primer/sekunder, dan redundansi geo.

  • Lapisan data: Pemulihan bencana dan sinkronisasi data pada lapisan ini memiliki dependensi middleware.

Manfaat

Pemulihan bencana menggunakan gateway multi-cluster ACK One menawarkan keuntungan berikut dibandingkan dengan pendekatan berbasis distribusi lalu lintas DNS:

  • Pendekatan berbasis DNS memerlukan beberapa alamat IP load balancer (satu untuk setiap kluster), sedangkan gateway multi-cluster hanya menggunakan satu alamat IP di satu wilayah dengan penyebaran multi-zona default untuk memastikan ketersediaan tinggi.

  • Gateway multi-cluster mendukung pengalihan permintaan di Lapisan 7, yang tidak didukung oleh pendekatan berbasis DNS.

  • Pendekatan berbasis DNS sering kali memerlukan penyimpanan hasil Kueri DNS selama pergantian alamat IP, menyebabkan gangguan layanan sementara. Gateway multi-cluster menyelesaikan masalah ini dengan gagal alih ke pod backend di kluster lain secara mulus.

  • Sebagai gateway tingkat wilayah, semua operasi dapat diselesaikan pada instance Fleet tanpa perlu menginstal Ingress controller atau membuat Ingress di setiap kluster Container Service for Kubernetes (ACK). Ini membantu mengelola lalu lintas di wilayah dan mengurangi biaya manajemen multi-kluster.

Arsitektur

Contoh ini menggunakan aplikasi web untuk menunjukkan cara menggunakan gateway multi-cluster ALB dalam pemulihan bencana antar-zona. Aplikasi web terdiri dari Deployment dan Service. Gambar berikut menunjukkan arsitektur sistem pemulihan bencana antar-zona.

  • Buat Kluster 1 dan Kluster 2 di AZ 1 dan AZ 2 di wilayah China (Hong Kong).

  • Gunakan GitOps ACK One untuk mendistribusikan aplikasi ke Kluster 1 dan Kluster 2.

  • Gunakan AlbConfig untuk membuat gateway multi-cluster ALB pada instance Fleet ACK One.

  • Setelah gateway dibuat, konfigurasikan aturan Ingress untuk mengarahkan lalu lintas berdasarkan bobot dan header permintaan. Jika salah satu kluster down, lalu lintas dialihkan secara otomatis ke kluster lainnya.

  • Sinkronisasi data berbasis ApsaraDB RDS memiliki dependensi middleware.

Prasyarat

  • ALB telah diaktifkan.

  • Fitur manajemen Fleet telah diaktifkan.

  • Instance Fleet ACK One terhubung dengan dua kluster ACK yang berada dalam virtual private cloud (VPC) yang sama. Untuk informasi lebih lanjut, lihat Kelola kluster terkait.

Langkah 1: Gunakan GitOps atau fitur distribusi aplikasi untuk mendistribusikan aplikasi ke beberapa kluster

ACK One memungkinkan Anda menggunakan GitOps atau fitur distribusi aplikasi untuk mendistribusikan aplikasi ke beberapa kluster. Untuk informasi lebih lanjut, lihat Memulai dengan GitOps, Buat Aplikasi Multi-Kluster, dan Memulai dengan Distribusi Aplikasi. Dalam langkah ini, GitOps digunakan.

  1. Masuk ke Konsol ACK One. Di panel navigasi kiri, pilih Fleet > Multi-cluster Applications.

  2. Di sudut kiri atas halaman Multi-cluster Applications, klik Dingtalk_20231226104633.jpg di sebelah kanan nama instance Fleet dan pilih instance Fleet Anda dari daftar drop-down.

  3. Pilih Create Multi-cluster Application > GitOps untuk pergi ke halaman Create Multi-cluster Application - GitOps.

    Catatan
  4. Di tab Create from YAML, salin template YAML berikut ke editor kode. Lalu, klik OK untuk menerapkan aplikasi.

    Catatan

    Template YAML berikut digunakan untuk menerapkan aplikasi bernama web-demo ke setiap kluster terkait. Anda juga dapat memilih kluster tempat Anda ingin menerapkan aplikasi di tab Quick Create. Perubahan konfigurasi yang Anda buat di tab Pembuatan Cepat akan disinkronkan secara otomatis ke template YAML di 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: Gunakan kubectl untuk menerapkan gateway multi-cluster ALB dari instance Fleet ACK One

Anda dapat menggunakan AlbConfig untuk membuat gateway multi-cluster ALB dari instance Fleet ACK One dan menghubungkan kluster dengan gateway tersebut.

  1. Peroleh ID dua vSwitch yang termasuk dalam VPC tempat instance Fleet ACK One berada.

  2. Buat file bernama gateway.yaml dan salin konten berikut ke file tersebut.

    Catatan
    • Ganti ${vsw-id1} dan ${vsw-id2} dengan ID vSwitch yang diperoleh dari langkah sebelumnya, serta ganti ${cluster1} dan ${cluster2} dengan ID kluster terkait yang ingin Anda tambahkan.

    • Untuk kluster terkait ${cluster1} dan ${cluster2}, konfigurasikan aturan masuk grup keamanan mereka untuk mengizinkan akses dari semua alamat IP dan port blok CIDR vSwitch.

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: ackone-gateway-demo
      annotations:
        # Tentukan ID kluster yang ingin Anda hubungkan dengan instance 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-demo

    Konfigurasikan parameter berikut.

    Parameter

    Wajib

    Deskripsi

    metadata.name

    Ya

    Nama AlbConfig.

    metadata.annotations:

    alb.ingress.kubernetes.io/remote-clusters

    Ya

    Daftar kluster terkait yang akan ditambahkan ke gateway multi-cluster ALB. ID kluster yang terdaftar di sini telah terhubung dengan instance Fleet.

    spec.config.name

    Tidak

    Nama instance ALB.

    spec.config.addressType

    Tidak

    Tipe jaringan instance ALB. Nilai valid:

    • Internet (default): Jaringan publik. Instance ALB menyediakan layanan ke Internet dan dapat diakses melalui Internet.

      Catatan

      Untuk memungkinkan instance ALB menyediakan layanan berorientasi Internet, instance ALB perlu dikaitkan dengan alamat IP elastis (EIP). Jika Anda menggunakan instance ALB berorientasi Internet, Anda akan dikenakan biaya instance dan biaya bandwidth atau transfer data untuk EIP terkait. Untuk informasi lebih lanjut, lihat Bayar sesuai pemakaian.

      Intranet: Jaringan pribadi. Instance ALB menyediakan layanan dalam VPC dan tidak dapat diakses melalui Internet.

    spec.config.zoneMappings

    Ya

    ID vSwitch yang dikaitkan dengan instance ALB. Untuk informasi lebih lanjut tentang cara membuat vSwitch, lihat Buat dan kelola vSwitches.

    Catatan
    • vSwitch yang ditentukan harus ditempatkan di zona yang didukung oleh instance ALB dan ditempatkan di VPC yang sama dengan kluster. Untuk informasi lebih lanjut tentang wilayah dan zona yang didukung oleh ALB, lihat Wilayah dan zona.

    • ALB mendukung penyebaran multi-zona. Jika wilayah saat ini mendukung dua zona atau lebih, pilih vSwitch di setidaknya dua zona untuk memastikan ketersediaan tinggi.

    spec.listeners

    Tidak

    Port dan protokol listener instance ALB. Contoh yang disediakan dalam topik ini mengonfigurasi listener HTTP di port 8001.

    Listener mendefinisikan bagaimana ALB menerima lalu lintas. Kami merekomendasikan agar Anda mempertahankan konfigurasi listener. Jika tidak, Anda harus membuat listener sebelum dapat menggunakan Ingress ALB.

  3. Jalankan perintah berikut untuk menerapkan file gateway.yaml guna membuat gateway multi-cluster ALB dan IngressClass:

    kubectl apply -f gateway.yaml
  4. Tunggu 1 hingga 3 menit dan jalankan perintah berikut untuk memeriksa apakah gateway multi-cluster ALB telah dibuat:

    kubectl get albconfig ackone-gateway-demo

    Keluaran yang diharapkan:

    NAME      		      ALBID      DNSNAME                               PORT&PROTOCOL   CERTID   AGE
    ackone-gateway-demo           alb-xxxx   alb-xxxx.<regionid>.alb.aliyuncs.com                           4d9h
  5. Jalankan perintah berikut untuk memeriksa apakah kluster terkait terhubung ke gateway:

    kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'

    ID kluster terkait dikembalikan dalam keluaran.

Langkah 3: Gunakan Ingress untuk mengimplementasikan pemulihan bencana antar-zona

Gateway multi-cluster menggunakan Ingress untuk mengelola lalu lintas lintas kluster. Anda dapat membuat objek Ingress pada instance Fleet ACK One untuk mengimplementasikan redundansi zona aktif.

  1. Buat namespace bernama gateway-demo, yang sama dengan namespace tempat Service yang Anda buat di langkah sebelumnya berada.

  2. Buat file bernama ingress-demo.yaml dan salin konten berikut ke file tersebut.

    Catatan
    • Jumlah semua bobot yang ditentukan dalam anotasi alb.ingress.kubernetes.io/cluster-weight harus 100.

    • Aturan pengalihan /svc1 di bawah nama domain example.com digunakan untuk mengekspos Service backend bernama service1. Ganti ${cluster1-id} dan ${cluster2-id} dengan ID kluster aktual.

    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
  3. Jalankan perintah berikut untuk menerapkan Ingress pada instance Fleet ACK One:

    kubectl apply -f ingress-demo.yaml -n gateway-demo

Langkah 4: Verifikasi redundansi zona aktif

Arahkan lalu lintas ke kluster berbeda berdasarkan rasio

Jalankan perintah berikut untuk mengakses aplikasi web:

curl -H "host: alb.ingress.alibaba.com" alb-xxxx.<regionid>.alb.aliyuncs.com:<listeners port>/svc1

Konfigurasikan parameter berikut.

Parameter

Deskripsi

alb-xxxx.<regionid>.alb.aliyuncs.com

Setel nilai ke nama domain di kolom DNSNAME dalam detail AlbConfig yang Anda peroleh di Langkah 2.

<listeners port>

Setel nilai ke 8001, yang merupakan nilai yang ditentukan dalam konfigurasi AlbConfig dan annotations dari konfigurasi Ingress.

Jalankan perintah berikut. Keluaran menunjukkan bahwa 20% lalu lintas diarahkan ke Kluster 1 (poc-ack-1) dan 80% lalu lintas diarahkan ke Kluster 2 (poc-ack-2).

for i in {1..500}; do curl -H "host: alb.ingress.alibaba.com" alb-xxxx.cn-beijing.alb.aliyuncs.com:8001/svc1; done > res.txt

image

Alihkan lalu lintas secara otomatis dan mulus ketika terjadi gangguan di salah satu kluster

Jalankan perintah berikut. Kemudian, kurangi jumlah pod aplikasi di Kluster 2 menjadi 0. Setelah perubahan tersebut berlaku, lalu lintas secara otomatis dialihkan ke Kluster 1 secara mulus.

for i in {1..500}; do curl -H "host: alb.ingress.alibaba.com" alb-xxxx.cn-beijing.alb.aliyuncs.com:8001/svc1; sleep 1; done

image