Peralihan

Peralihan mengubah arah siaga-primer tanpa kehilangan data. Gunakan ketika cluster utama saat ini masih dapat dijangkau, atau ketika Anda perlu memindahkan lalu lintas untuk pemeliharaan.

Panduan ini mengasumsikan topologi saat ini adalah:

cluster-a (primary)  ->  cluster-b (standby)

Setelah peralihan, topologi menjadi:

cluster-b (primary)  ->  cluster-a (standby)

Kapan Menggunakan Peralihan

Gunakan peralihan ketika:

  • Anda sedang melakukan pemeliharaan pada primary saat ini.
  • Primary terdegradasi sebagian tetapi masih dapat merespons permintaan.
  • Anda membutuhkan RPO = 0 dan tidak dapat menerima kehilangan data.

Jangan gunakan peralihan jika primary benar-benar tidak tersedia. Dalam hal ini, gunakan Failover.

Sebelum Anda Memulai

Periksa hal-hal berikut sebelum memulai:

  • Kedua cluster dapat dijangkau.
  • Replikasi CDC sehat.
  • Jeda CDC cukup rendah untuk target waktu pemulihan Anda.
  • Penulisan aplikasi dapat dijeda atau dicoba kembali selama perubahan peran.
  • Anda telah menyiapkan konfigurasi topologi yang baru.

Peralihan menjamin tidak ada data yang hilang, tetapi waktu operasi tergantung pada berapa banyak data yang masih harus direplikasi.

Membangun Topologi Baru

Buat konfigurasi penggantian penuh di mana cluster-b menjadi sumber dan cluster-a menjadi target.

# If you followed Set Up CDC Replication, cluster A is the original source cluster,
# and cluster B is the original target cluster.
cluster_a_id = source_cluster_id
cluster_a_addr = source_cluster_addr
cluster_a_client_addr = source_client_addr
cluster_a_token = source_cluster_token
cluster_a_pchannels = source_cluster_pchannels

cluster_b_id = target_cluster_id
cluster_b_addr = target_cluster_addr
cluster_b_client_addr = target_client_addr
cluster_b_token = target_cluster_token
cluster_b_pchannels = target_cluster_pchannels

switchover_config = {
    "clusters": [
        {
            "cluster_id": cluster_a_id,
            "connection_param": {
                "uri": cluster_a_addr,
                "token": cluster_a_token,
            },
            "pchannels": cluster_a_pchannels,
        },
        {
            "cluster_id": cluster_b_id,
            "connection_param": {
                "uri": cluster_b_addr,
                "token": cluster_b_token,
            },
            "pchannels": cluster_b_pchannels,
        },
    ],
    "cross_cluster_topology": [
        {
            "source_cluster_id": cluster_b_id,
            "target_cluster_id": cluster_a_id,
        }
    ],
}

Terapkan Topologi Baru

Terapkan konfigurasi yang sama ke kedua cluster. Kirim permintaan ke primer saat ini terlebih dahulu, lalu kirim ke siaga. Jika Anda kemudian beralih kembali, balikkan urutannya karena cluster-b adalah primary saat ini.

from pymilvus import MilvusClient

client_a = MilvusClient(uri=cluster_a_client_addr, token=cluster_a_token)
client_b = MilvusClient(uri=cluster_b_client_addr, token=cluster_b_token)

try:
    client_a.update_replicate_configuration(**switchover_config)
    client_b.update_replicate_configuration(**switchover_config)
finally:
    client_a.close()
    client_b.close()

Primer lama diturunkan ke siaga dan menolak penulisan baru. Siaga lama menunggu sisa data yang direplikasi, mempromosikan dirinya sendiri ke primary, dan kemudian menerima penulisan.

Jika permintaan gagal karena kesalahan jaringan atau layanan sementara, coba lagi dengan konfigurasi yang sama.

Mengalihkan Lalu Lintas Aplikasi

Setelah cluster-b menjadi primer:

  1. Arahkan lalu lintas tulis ke cluster-b.
  2. Konfirmasikan pembacaan dan penulisan berhasil di cluster-b.
  3. Konfirmasikan cluster-a tidak lagi menerima penulisan aplikasi.
  4. Terus pantau replikasi dari cluster-b kembali ke cluster-a.

Verifikasi Hasil

Verifikasi bahwa cluster-b berfungsi sebagai primary yang baru dan data tetap konsisten. Pengecekan umum meliputi:

  • Bandingkan jumlah baris untuk koleksi yang penting.
  • Menanyakan kunci utama yang diketahui dari kedua cluster.
  • Jalankan pencarian yang representatif pada primary yang baru dan yang lama.
  • Jalankan penulisan kecil pada cluster-b dan konfirmasikan bahwa data tersebut direplikasi ke cluster-a.

Beralih Kembali

Untuk beralih kembali nanti, terapkan topologi asli lagi:

cluster-a -> cluster-b

Gunakan alur peralihan yang sama. Pastikan primary saat ini dapat dijangkau dan replikasi sehat sebelum beralih kembali.

PERTANYAAN UMUM

Apakah peralihan akan menghilangkan data?

Tidak. Peralihan menunggu data yang tersisa untuk direplikasi sebelum siaga menjadi primer.

Apakah saya perlu menghentikan penulisan aplikasi?

Anda harus menjeda penulisan atau membuat penulisan dapat ditarik kembali selama pergantian peran. Penulisan yang dikirim ke primary lama setelah diturunkan akan ditolak.

Mengapa peralihan membutuhkan waktu lebih lama dari yang diharapkan?

Alasan yang paling umum adalah kelambatan CDC. Primary baru harus menerima data yang tersisa sebelum dapat mengambil alih dengan aman dengan RPO = 0.

Dapatkah saya mencoba kembali permintaan peralihan yang gagal?

Ya. Coba lagi dengan topologi target yang sama.

Apa yang terjadi pada primary yang lama?

Primary yang lama menjadi standby. Seharusnya tidak lagi menerima penulisan aplikasi.