Mengelola ketersediaan tinggi

Pilih versi dokumentasi:

Kelola ketersediaan tinggi untuk cluster AlloyDB Omni guna menambahkan ketahanan terhadap gangguan dan kegagalan melalui mekanisme failover dan pemulihan otomatis.

Mengonfigurasi spesifikasi ketersediaan tinggi

Untuk mengonfigurasi ketersediaan tinggi, isi informasi berikut dalam spesifikasi DBCluster Anda:

DBCluster:
  metadata:
    ...
  spec:
    ...
    readOnlyPort: READ_ONLY_PORT
    availability:
      numberOfStandbys: NUMBER_OF_STANDBYS
      enableStandbyAsReadReplica: true
      enableAutoFailover: true
      enableAutoHeal: true
      replayReplicationSlotsOnStandbys: true
      healthcheckPeriodSeconds: HEALTHCHECK_PERIOD
      autoFailoverTriggerThreshold: AUTOFAILOVER_TRIGGER_THRESHOLD
      autoHealTriggerThreshold: AUTOHEAL_TRIGGER_THRESHOLD

Ganti variabel berikut:

  • NUMBER_OF_STANDBYS: jumlah node standby yang akan disiapkan. Menetapkan nilai ini ke 0 akan menonaktifkan ketersediaan tinggi. Nilai maksimum adalah 5. Jika Anda tidak yakin jumlah node standby yang diperlukan, mulailah dengan 2 untuk ketahanan tinggi.

  • (Opsional) READ_ONLY_PORT: port pada load balancer atau alamat IP virtual yang digunakan untuk endpoint standby hanya baca. Nilai defaultnya adalah 5433 (port utama ditambah 1).

  • (Opsional) HEALTHCHECK_PERIOD: jumlah detik untuk menunggu di antara setiap health check. Nilai defaultnya adalah 30. Nilai minimumnya adalah 1. Nilai maksimumnya adalah 86400 (satu hari).

  • (Opsional) AUTOFAILOVER_TRIGGER_THRESHOLD: jumlah kegagalan health check yang dapat terjadi sebelum failover terjadi. Nilai defaultnya adalah 3. Nilai minimum adalah 0, tetapi jika nilai disetel ke 0, AlloyDB Omni akan menggunakan nilai default.

    Failover otomatis terjadi jika health check gagal AUTOFAILOVER_TRIGGER_THRESHOLD kali atau selama HEALTHCHECK_PERIOD * AUTOFAILOVER_TRIGGER_THRESHOLD detik (90 detik secara default).

  • (Opsional) AUTOHEAL_TRIGGER_THRESHOLD: jumlah kegagalan health check sebelum pemulihan otomatis dimulai. Nilai defaultnya adalah 5. Nilai minimum adalah 0, tetapi jika nilai disetel ke 0, AlloyDB Omni akan menggunakan nilai default.

    Pemulihan otomatis terjadi jika health check gagal AUTOHEAL_TRIGGER_THRESHOLD kali atau selama HEALTHCHECK_PERIOD * AUTOHEAL_TRIGGER_THRESHOLD detik.

Memverifikasi endpoint standby hanya baca

Saat Anda menyetel enableStandbyAsReadReplica: true, load balancer (alamat IP virtual HAProxy dan Keepalived) akan otomatis mengekspos endpoint khusus hanya baca selain endpoint baca-tulis utama.

HAProxy merutekan traffic di seluruh standby aktif sebagai berikut:

  • Menjalankan health check pada semua node standby menggunakan GET /isstandby.
  • Mendistribusikan kueri baca di seluruh standby aktif menggunakan load balancing leastconn.
  • Memperbarui perutean secara otomatis saat terjadi failover tanpa menghentikan koneksi klien ke topologi standby baru.

Untuk memverifikasi endpoint cluster Anda, jalankan salah satu perintah berikut:

alloydbctl

alloydbctl get -d "DEPLOYMENT_SPEC" -t DBCluster -n DBCLUSTER_NAME

Ganti variabel berikut:

Ansible

  1. Buat playbook Ansible untuk peran google.alloydbomni_orchestrator.status. Misalnya, status.yaml:

    - name: STATUS_PLAYBOOK_NAME
      hosts: localhost
      vars:
        ansible_user: ANSIBLE_USER
        ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE
      roles:
      - role: google.alloydbomni_orchestrator.status
    

    Ganti variabel berikut:

    • STATUS_PLAYBOOK_NAME: nama playbook Ansible Anda. Contoh, My cluster status.

    • ANSIBLE_USER: Pengguna OS yang digunakan Ansible untuk login ke node AlloyDB Omni.

    • ANSIBLE_SSH_PRIVATE_KEY_FILE: kunci pribadi yang digunakan Ansible untuk terhubung ke node AlloyDB Omni Anda menggunakan SSH.

  2. Jalankan playbook:

    ansible-playbook status.yaml -i "DEPLOYMENT_SPEC" -e resource_type=DBCluster \
      -e resource_name=DBCLUSTER_NAME

    Ganti variabel berikut:

Endpoint dilaporkan di bagian status.primary.endpoints:

    - Read-Write: VIRTUAL_IP:5432
    - Read-Only: VIRTUAL_IP:5433

Menerapkan spesifikasi DBCluster Anda

Untuk menerapkan spesifikasi DBCluster yang telah dikonfigurasi, jalankan salah satu perintah berikut:

alloydbctl

alloydbctl apply -d "DEPLOYMENT_SPEC" -r "DBCLUSTER_SPECIFICATION"

Ganti variabel berikut:

Ansible

ansible-playbook DBCLUSTER_PLAYBOOK -i "DEPLOYMENT_SPEC" \
      -e resource_spec="DBCLUSTER_SPECIFICATION"

Ganti variabel berikut:

  • RESTORE_PLAYBOOK: jalur ke playbook yang Anda buat untuk CRD DBCluster.

  • DEPLOYMENT_SPEC: jalur ke spesifikasi deployment yang Anda buat di Menginstal komponen AlloyDB Omni.

  • DBCLUSTER_SPECIFICATION: jalur ke spesifikasi DBCluster yang Anda buat di Membuat cluster.

Pengalihan ke instance standby

Anda dapat melakukan pengalihan saat perlu menguji penyiapan ketersediaan tinggi atau aktivitas pemeliharaan terencana lainnya yang memerlukan pengalihan replika utama dan siaga. Setelah pengalihan terjadi, arah replikasi dan peran utama serta siaga akan dibalik.

Pengalihan melakukan tindakan berikut:

  1. Orchestrator AlloyDB Omni membuat server utama offline.

  2. Orchestrator AlloyDB Omni mempromosikan standby menjadi primer baru.

  3. Orchestrator AlloyDB Omni mengonversi primer menjadi standby.

  4. AlloyDB Omni memulai standby yang baru dikonversi.

Melakukan pengalihan

Untuk melakukan pengalihan, selesaikan langkah-langkah berikut:

  1. Pastikan instance utama dan standby Anda responsif.

  2. Verifikasi bahwa status.phase ketersediaan tinggi adalah Ready.

    alloydbctl

    alloydbctl get -d "DEPLOYMENT_SPEC" -t DBCluster -n DBCLUSTER_SPECIFICATION -o yaml

    Ganti variabel berikut:

    Ansible

    ansible-playbook status.yaml -i DEPLOYMENT_SPEC -e resource_type=DBCluster \
      -e resource_name=DBCLUSTER_SPECIFICATION

    Ganti variabel berikut:

  3. Buat spesifikasi Switchover menggunakan format berikut:

    Switchover:
      metadata:
        name: SWITCHOVER_NAME
      spec:
        dbClusterRef: DBCLUSTER_NAME
        newPrimary: NEW_PRIMARY_NAME
    

    Ganti variabel berikut:

    • SWITCHOVER_NAME: nama untuk spesifikasi Switchover ini. Contohnya, my-switchover-1. Nama ini harus unik setiap kali pengalihan dilakukan.

    • DBCLUSTER_NAME: nama cluster database yang Anda tentukan di Membuat cluster.

    • (Opsional) NEW_PRIMARY_NAME: adalah instance standby yang menjadi instance utama baru. Untuk memetakan nama instance ke host, lihat kolom instanceList di status DBCluster yang dirujuk.

  4. Jika Anda menggunakan Ansible, buat playbook untuk spesifikasi Switchover Anda.

    - name: SWITCHOVER_PLAYBOOK_NAME
      hosts: localhost
      vars:
        ansible_user: ANSIBLE_USER
        ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE
      roles:
      - role: google.alloydbomni_orchestrator.switchover
    

    Ganti variabel berikut:

    • SWITCHOVER_PLAYBOOK_NAME: nama playbook Ansible Anda. Contoh, My Switchover.

    • ANSIBLE_USER: Pengguna OS yang digunakan Ansible untuk login ke node AlloyDB Omni.

    • ANSIBLE_SSH_PRIVATE_KEY_FILE: kunci pribadi yang digunakan Ansible untuk terhubung ke node AlloyDB Omni Anda menggunakan SSH.

  5. Terapkan spesifikasi Switchover Anda.

    alloydbctl

    alloydbctl apply -d "DEPLOYMENT_SPEC" -r "SWITCHOVER_SPECIFICATION"

    Ganti variabel berikut:

    • DEPLOYMENT_SPEC: jalur ke spesifikasi deployment yang Anda buat di Menginstal komponen AlloyDB Omni.

    • SWITCHOVER_SPECIFICATION: jalur ke spesifikasi Switchover yang Anda buat di langkah ketiga.

    Ansible

    ansible-playbook SWITCHOVER_PLAYBOOK -i "DEPLOYMENT_SPEC" \
      -e resource_spec="SWITCHOVER_SPECIFICATION"

    Ganti variabel berikut:

    • SWITCHOVER_PLAYBOOK: jalur ke playbook yang Anda buat untuk CRD Switchover di langkah empat.

    • DEPLOYMENT_SPEC: jalur ke spesifikasi deployment yang Anda buat di Menginstal komponen AlloyDB Omni.

    • SWITCHOVER_SPECIFICATION: jalur ke spesifikasi Switchover yang Anda buat di langkah ketiga.

Load balancer untuk ketersediaan tinggi

Load balancer (HAProxy) mencapai ketersediaan tinggi dengan menyambungkan nodenya dengan Keepalived dan IP virtual. Keepalived menggunakan Virtual Router Redundancy Protocol (VRRP) untuk mengontrol IP virtual mengambang. Aplikasi klien database terhubung ke IP virtual ini, bukan alamat IP node database.

Dalam konfigurasi yang tidak menggunakan load balancer khusus, Keepalived diinstal langsung di node database. Dalam skenario ini, ketersediaan tinggi dicapai dengan menetapkan IP virtual secara dinamis ke node utama saat ini, sehingga memastikan failover yang lancar jika node utama menjadi tidak tersedia.

Untuk melakukan pemilihan yang stabil, Keepalived menetapkan prioritas VRRP ke node cluster database. Node load balancer pertama mengambil peran utama dengan prioritas Keepalived yang lebih tinggi—misalnya, 110. Node berikutnya bertindak sebagai node sekunder dengan prioritas yang lebih rendah—misalnya, 100.

Untuk memastikan bahwa IP virtual mengarah ke node yang responsif, Keepalived menjalankan health check berkelanjutan setiap dua detik. Tindakan ini memverifikasi status proses HAProxy systemd. Jika layanan HAProxy di server utama gagal, Keepalived akan memigrasikan IP virtual ke node sekunder yang responsif.

Jika keanggotaan node database berubah, HAProxy dan Keepalived akan otomatis menunjuk ke node database aktif yang baru. Konfigurasi perutean pokok diperbarui tanpa menghentikan koneksi klien aktif.

Mengonfigurasi load balancer

Untuk mengonfigurasi IP virtual bagi node load balancer, tambahkan kolom dbLoadBalancerOptions berikut ke kolom primarySpec dalam spesifikasi DBCluster Anda:

DBCluster:
  spec:
    primarySpec:
      ...
      dbLoadBalancerOptions:
        onprem:
          loadBalancerIP: "VIRTUAL_IP"
          loadBalancerType: "internal"
          loadBalancerInterface: "VIRTUAL_IP_INTERFACE"

Ganti variabel berikut:

  • VIRTUAL_IP: alamat IP statis yang digunakan untuk IP virtual mengambang. Aplikasi klien database menggunakan alamat IP yang ditentukan di sini. Untuk memastikan Keepalived dapat menyiarkan ARP gratis dengan berhasil, alamat IP ini harus tersedia; tidak dapat melakukan loopback; dan dalam kasus infrastruktur lokal, termasuk dalam subnet yang sama dengan antarmuka node utama Anda.

  • VIRTUAL_IP_INTERFACE: antarmuka jaringan tempat VIRTUAL_IP dikonfigurasi. Nilai defaultnya adalah eth0.