Beralih antara Pulsar dan Woodpecker
Halaman ini menjelaskan cara beralih antrian pesan (MQ) pada kluster Milvus antara Pulsar (bawaan atau eksternal) dan Woodpecker (backend MinIO), baik ke arah mana pun. Untuk alur kerja umum dan prasyarat, lihat Beralih Antrian Pesan.
Persyaratan: Fitur Beralih MQ tersedia di Milvus 3.0 dan versi yang lebih baru. Tingkatkan instance Milvus Anda ke Milvus 3.0 atau versi yang lebih baru sebelum memulai — fitur ini tidak tersedia pada versi sebelumnya.
Mengganti antrian pesan adalah operasi berisiko tinggi. Pilih bagian yang sesuai dengan metode penyebaran Anda — Dengan Helm atau Dengan Milvus Operator — dan ikuti langkah-langkahnya dari awal hingga akhir. Jangan mencampurkan perintah Helm dan Operator.
Dengan Helm
Beralih dari Pulsar ke Woodpecker (Helm)
Langkah 1: Pastikan instance Milvus sedang berjalan. Pastikan kluster Milvus Anda berjalan dengan baik — misalnya, dengan membuat koleksi uji, memasukkan data, dan menjalankan kueri.
Langkah 2: Jalankan peralihan MQ. Buka antarmuka manajemen MixCoord, lalu panggil API peralihan:
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
Di terminal lain:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "woodpecker"}'
Langkah 3: Pastikan proses peralihan telah selesai.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Peralihan yang berhasil akan mencatat " [mqTypeValue=woodpecker]".
Langkah 4: (Opsional) Hentikan Pulsar dan lakukan pembersihan. Untuk Pulsar bawaan, nonaktifkan Pulsar dan aktifkan Woodpecker, lalu hapus PVC Pulsar:
helm upgrade my-release zilliztech/milvus \
--set image.all.tag=v3.0.0 \
--set pulsarv3.enabled=false \
--set woodpecker.enabled=true \
--set streaming.enabled=true \
--set indexNode.enabled=false
kubectl get pvc | grep my-release-pulsarv3
kubectl delete pvc <pulsar-pvc-name> ...
Untuk Pulsar eksternal, bersihkan topik Milvus di instance Pulsar eksternal. Topik Milvus mengikuti format <cluster_prefix>-dml_<seqNo>_<TimeTick><Version> (misalnya, by-dev-rootcoord-dml_10_464633776992639586v0).
Jika Anda berencana untuk kembali ke Pulsar nanti, bersihkan data/topik terlebih dahulu untuk menghindari konflik. Karena keterbatasan Helm chart, saat ini tidak mungkin untuk kembali ke instance Pulsar bawaan.
Beralih dari Woodpecker ke Pulsar (Helm)
Langkah 1: Pastikan instance Milvus sedang berjalan.
Langkah 2: Konfigurasikan koneksi Pulsar tujuan dan mulai ulang Milvus. Proses peralihan ini memerlukan Milvus untuk sudah mengetahui koneksi Pulsar, jadi masukkan konfigurasi tersebut ke dalam ` user.yaml ` melalui ` extraConfigFiles ` dan terapkan dengan ` helm upgrade ` (yang akan merestart pod-pod). ` streaming.enabled=true ` diperlukan untuk fitur Switch MQ.
# values.yaml
extraConfigFiles:
user.yaml: |+
pulsar:
address: <pulsar addr>
port: <pulsar port, e.g. 6650>
helm upgrade -i my-release zilliztech/milvus \
--set pulsarv3.enabled=true \
--set woodpecker.enabled=false \
--set streaming.enabled=true \
-f values.yaml
Tunggu hingga semua pod siap, lalu pastikan konfigurasi akses Pulsar telah diterapkan ke konfigurasi Milvus.
Langkah 3: Jalankan peralihan MQ.
Pastikan Pulsar target tidak berisi topik Milvus dari konfigurasi sebelumnya. Jika ini adalah peralihan pertama Anda ke Pulsar, abaikan catatan ini; jika tidak, bersihkan terlebih dahulu topik Milvus sisa dengan nama yang sama.
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
Di terminal lain:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "pulsar"}'
Langkah 4: Verifikasi bahwa peralihan telah selesai.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Peralihan yang berhasil akan mencatat pesan " [mqTypeValue=pulsar]".
Langkah 5: (Opsional) Bersihkan data Woodpecker. Hapus data Woodpecker di MinIO/S3 (di bawah <rootPath>/wp/..., biasanya files/wp/...) dan metadata Woodpecker di etcd (etcdctl get woodpecker --prefix). Jika Anda berencana untuk beralih kembali ke Woodpecker nanti, bersihkan file-file ini terlebih dahulu.
Dengan Milvus Operator
Beralih dari Pulsar ke Woodpecker (Milvus Operator)
Langkah 1: Pastikan instance Milvus sedang berjalan.
Langkah 2: Jalankan peralihan MQ. Layanan MixCoord tidak terpapar, jadi jalankan API peralihan dari dalam pod MixCoord:
kubectl exec -it <mixcoord-pod> -- \
curl -X POST http://localhost:9091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "woodpecker"}'
Langkah 3: Pastikan proses peralihan telah selesai.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Peralihan yang berhasil akan mencatat pesan " [mqTypeValue=woodpecker]".
Langkah 4: Perbarui jenis MQ di Operator. Perbarui konfigurasi yang dikelola Operator agar Operator tidak membatalkan peralihan tersebut. Buat change_configmap.yaml:
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
dependencies:
msgStreamType: woodpecker
kubectl patch -f change_configmap.yaml --patch-file change_configmap.yaml --type merge
Langkah 5: (Opsional) Hentikan Pulsar dan bersihkan. Untuk Pulsar bawaan, hapus instalasi rilis Pulsar dan hapus PVC-nya:
helm uninstall my-release-pulsar
kubectl get pvc | grep my-release-pulsar
kubectl delete pvc <pulsar-pvc-name> ...
Untuk Pulsar eksternal, bersihkan topik Milvus (format <cluster_prefix>-dml_<seqNo>_<TimeTick><Version>).
Jika Anda berencana untuk beralih kembali ke Pulsar nanti, bersihkan data/topik terlebih dahulu untuk menghindari konflik. Karena keterbatasan Helm chart, saat ini tidak mungkin untuk beralih kembali ke instance Pulsar bawaan.
Beralih dari Woodpecker ke Pulsar (Milvus Operator)
Langkah 1: Pastikan instance Milvus sedang berjalan.
Langkah 2: Konfigurasikan koneksi Pulsar tujuan dan mulai ulang Milvus. Tempatkan koneksi Pulsar di bawah spec.config (Operator mengubah spec.config menjadi user.yaml) dan atur jenis MQ; penerapan CR akan memperbarui pod dengan konfigurasi baru.
# change_configmap.yaml
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
config:
pulsar:
address: <pulsar addr>
port: <pulsar port, e.g. 6650>
dependencies:
msgStreamType: pulsar
kubectl patch -f change_configmap.yaml --patch-file change_configmap.yaml --type merge
Tunggu hingga semua pod siap, lalu pastikan konfigurasi akses Pulsar telah diterapkan ke dalam konfigurasi Milvus.
Langkah 3: Jalankan peralihan MQ.
Pastikan Pulsar tujuan tidak berisi topik Milvus dari konfigurasi sebelumnya. Jika ini adalah peralihan pertama Anda ke Pulsar, lewati catatan ini; jika tidak, bersihkan terlebih dahulu topik Milvus sisa dengan nama yang sama.
kubectl exec -it <mixcoord-pod> -- \
curl -X POST http://localhost:9091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "pulsar"}'
Langkah 4: Verifikasi bahwa peralihan telah selesai.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Peralihan yang berhasil akan mencatat pesan " [mqTypeValue=pulsar]".
Langkah 5: (Opsional) Bersihkan data Woodpecker. Hapus data Woodpecker di MinIO/S3 (di bawah <rootPath>/wp/..., biasanya files/wp/...) dan metadata Woodpecker di etcd (etcdctl get woodpecker --prefix). Jika Anda berencana beralih kembali ke Woodpecker nanti, bersihkan file-file ini terlebih dahulu.
Skenario yang didukung
| MQ Sumber | MQ Tujuan | Helm | Operator Milvus |
|---|---|---|---|
| Pulsar bawaan | Woodpecker (MinIO) | Didukung | Didukung |
| Pulsar Eksternal | Woodpecker (MinIO) | Didukung | Didukung |
| Woodpecker (MinIO) | Pulsar Eksternal | Didukung | Didukung |
| Pulsar | Woodpecker (lokal) | Didukung tetapi tidak direkomendasikan (semua pod memerlukan sistem berkas bersama) | Tidak didukung |