• Tentang Milvus
  • Memulai
  • Konsep
  • Panduan Pengguna
  • Impor Data
  • Alat AI
  • Panduan Administrasi
    • Penyebaran
    • Konfigurasi
    • Mengelola Ketergantungan
    • Penskalaan
    • Tingkatkan
    • Pemantauan, Peringatan & Log
    • Kelompok Sumber Daya
    • Keamanan
    • Beralih Jenis MQ
  • Peralatan
  • Integrasi
  • Tutorial
  • Pertanyaan Umum
  • API Reference

Menggunakan WoodpeckerCompatible with Milvus 2.6.x

Panduan ini menjelaskan cara mengaktifkan dan menggunakan Woodpecker sebagai Write-Ahead Log (WAL) di Milvus 2.6.x. Woodpecker adalah WAL cloud-native yang dirancang untuk penyimpanan objek, menawarkan throughput yang tinggi, overhead operasional yang rendah, dan skalabilitas yang lancar. Untuk detail arsitektur dan tolok ukur, lihat Woodpecker.

Gambaran Umum

  • Dimulai dari Milvus 2.6, Woodpecker adalah WAL opsional yang menyediakan penulisan dan pemulihan yang dipesan sebagai layanan pencatatan.
  • Sebagai pilihan antrean pesan, ia berperilaku mirip dengan Pulsar/Kafka dan dapat diaktifkan melalui konfigurasi.
  • Dua backend penyimpanan didukung: sistem berkas lokal (local) dan penyimpanan objek (minio/Kompatibel dengan S3).

Memulai dengan cepat

Untuk mengaktifkan Woodpecker, atur jenis MQ ke Woodpecker:

mq:
  type: woodpecker

Catatan: Mengalihkan mq.type untuk cluster yang sedang berjalan merupakan operasi upgrade. Ikuti prosedur peningkatan dengan hati-hati dan validasi pada cluster yang baru sebelum mengalihkan produksi.

Konfigurasi

Di bawah ini adalah blok konfigurasi Woodpecker lengkap (edit milvus.yaml atau timpa di user.yaml):

# Related configuration of woodpecker, used to manage Milvus logs of recent mutation operations, output streaming log, and provide embedded log sequential read and write.
woodpecker:
  meta:
    type: etcd # The Type of the metadata provider. currently only support etcd.
    prefix: woodpecker # The Prefix of the metadata provider. default is woodpecker.
  client:
    segmentAppend:
      queueSize: 10000 # The size of the queue for pending messages to be sent of each log.
      maxRetries: 3 # Maximum number of retries for segment append operations.
    segmentRollingPolicy:
      maxSize: 256M # Maximum size of a segment.
      maxInterval: 10m # Maximum interval between two segments, default is 10 minutes.
      maxBlocks: 1000 # Maximum number of blocks in a segment
    auditor:
      maxInterval: 10s # Maximum interval between two auditing operations, default is 10 seconds.
  logstore:
    segmentSyncPolicy:
      maxInterval: 200ms # Maximum interval between two sync operations, default is 200 milliseconds.
      maxIntervalForLocalStorage: 10ms # Maximum interval between two sync operations local storage backend, default is 10 milliseconds.
      maxBytes: 256M # Maximum size of write buffer in bytes.
      maxEntries: 10000 # Maximum entries number of write buffer.
      maxFlushRetries: 5 # Maximum size of write buffer in bytes.
      retryInterval: 1000ms # Maximum interval between two retries. default is 1000 milliseconds.
      maxFlushSize: 2M # Maximum size of a fragment in bytes to flush.
      maxFlushThreads: 32 # Maximum number of threads to flush data
    segmentCompactionPolicy:
      maxSize: 2M # The maximum size of the merged files.
      maxParallelUploads: 4 # The maximum number of parallel upload threads for compaction.
      maxParallelReads: 8 # The maximum number of parallel read threads for compaction.
    segmentReadPolicy:
      maxBatchSize: 16M # Maximum size of a batch in bytes.
      maxFetchThreads: 32 # Maximum number of threads to fetch data.
  storage:
    type: minio # The Type of the storage provider. Valid values: [minio, local]
    rootPath: /var/lib/milvus/woodpecker # The root path of the storage provider.

Catatan kunci:

  • woodpecker.meta
    • tipe: Saat ini hanya etcd yang didukung. Gunakan kembali etcd yang sama dengan Milvus untuk menyimpan metadata ringan.
    • prefix: Awalan kunci untuk metadata. Default: woodpecker.
  • woodpecker.client
    • Mengontrol perilaku penambahan/pengguliran/pengauditan segmen di sisi klien untuk menyeimbangkan throughput dan latensi ujung ke ujung.
  • woodpecker.logstore
    • Mengontrol kebijakan sinkronisasi/flush/pemadatan/pembacaan untuk segmen log. Ini adalah tombol utama untuk penyetelan throughput/latensi.
  • woodpecker.storage
    • tipe: minio untuk penyimpanan objek yang kompatibel dengan MinIO/S3 (MinIO/S3/GCS/OSS, dll.); local untuk sistem berkas lokal/bersama.
    • rootPath: Jalur root untuk backend penyimpanan (efektif untuk local; dengan minio, jalur ditentukan oleh bucket/prefix).

Mode penyebaran

Milvus mendukung mode Standalone dan Cluster. Matriks dukungan backend penyimpanan Woodpecker:

storage.type=localstorage.type=minio
Milvus StandaloneDidukungDidukung
Milvus ClusterTerbatas (membutuhkan FS bersama)Didukung

Catatan:

  • Dengan minio, Woodpecker berbagi penyimpanan objek yang sama dengan Milvus (MinIO / S3 / GCS / OS, dll.).
  • Dengan local, disk lokal simpul tunggal hanya cocok untuk Standalone. Jika semua pod dapat mengakses sistem berkas bersama (misal, NFS), mode Cluster juga dapat menggunakan local.

Kompatibilitas penyimpanan objek untuk storage.type=minio

Matriks berikut ini merangkum kompatibilitas yang diketahui saat ini dari backend penyimpanan objek saat Woodpecker dikonfigurasi dengan storage.type=minio. Informasi ini didasarkan pada Diskusi GitHub #150.

Penyedia / layananStatusCatatan
Penyimpanan Azure BlobDidukungMenggunakan SDK Azure asli.
AWS S3DidukungS3 asli dengan dukungan Penulisan Bersyarat penuh.
MinIO (>= 2024-12)DidukungDukungan penuh S3 Conditional Write.
Aliyun OSSDidukungDidukung melalui antarmuka yang kompatibel dengan S3.
Tencent COSDidukungDidukung melalui antarmuka yang kompatibel dengan S3.
Google Cloud Storage (GCS)DidukungDidukung melalui mode interoperabilitas S3.
Huawei Cloud OBSTidak didukungTidak memiliki semantik Tulis Bersyarat yang diperlukan.
Data yang sangat besarDidukungDiverifikasi oleh komunitas; hanya berfungsi dengan bucket yang tidak berversi.
Penyimpanan lain yang kompatibel dengan S3SebagianBergantung pada dukungan penuh untuk semantik S3 Conditional Write.

Catatan:

  • Kompatibilitas bergantung pada dukungan SDK asli atau dukungan untuk semantik S3 Conditional Write.
  • Jika Anda menghosting sendiri MinIO untuk Woodpecker, gunakan RELEASE.2024-12-18T13-15-44Z atau yang lebih baru.
  • Matriks ini mencerminkan diskusi saat ini dan dapat berkembang seiring dengan dukungan backend yang divalidasi lebih lanjut.

Panduan penerapan

Aktifkan Woodpecker untuk Milvus Cluster di Kubernetes (Milvus Operator, storage=minio)

Setelah menginstal Milvus Operator, mulai cluster Milvus dengan Woodpecker yang diaktifkan menggunakan sampel resmi:

kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_woodpecker.yaml

Sampel ini mengonfigurasi Woodpecker sebagai antrean pesan dan mengaktifkan Streaming Node. Startup pertama mungkin memerlukan waktu untuk menarik gambar; tunggu sampai semua pod siap:

kubectl get pods
kubectl get milvus my-release -o yaml | grep -A2 status

Jika sudah siap, Anda akan melihat pod yang mirip dengan:

NAME                                               READY   STATUS    RESTARTS   AGE
my-release-etcd-0                                  1/1     Running   0          17m
my-release-etcd-1                                  1/1     Running   0          17m
my-release-etcd-2                                  1/1     Running   0          17m
my-release-milvus-datanode-7f8f88499d-kc66r        1/1     Running   0          16m
my-release-milvus-mixcoord-7cd7998d-x59kg          1/1     Running   0          16m
my-release-milvus-proxy-5b56cf8446-pbnjm           1/1     Running   0          16m
my-release-milvus-querynode-0-558d9cdd57-sgbfx     1/1     Running   0          16m
my-release-milvus-streamingnode-58fbfdfdd8-vtxfd   1/1     Running   0          16m
my-release-minio-0                                 1/1     Running   0          17m
my-release-minio-1                                 1/1     Running   0          17m
my-release-minio-2                                 1/1     Running   0          17m
my-release-minio-3                                 1/1     Running   0          17m

Jalankan perintah berikut untuk mencopot pemasangan cluster Milvus.

kubectl delete milvus my-release

Jika Anda perlu menyesuaikan parameter Woodpecker, ikuti pengaturan yang dijelaskan dalam konfigurasi penyimpanan pesan.

Mengaktifkan Woodpecker untuk Milvus Cluster di Kubernetes (Helm Chart, storage=minio)

Pertama-tama, tambahkan dan perbarui bagan Helm Milvus seperti yang dijelaskan di Menjalankan Milvus di Kubernetes dengan Helm.

Kemudian, terapkan dengan salah satu contoh berikut:

- Penempatan cluster (pengaturan yang disarankan dengan mengaktifkan Woodpecker dan Streaming Node):

helm install my-release zilliztech/milvus \
  --set image.all.tag=v2.6.0 \
  --set pulsarv3.enabled=false \
  --set woodpecker.enabled=true \
  --set streaming.enabled=true \
  --set indexNode.enabled=false

- Penempatan mandiri (Woodpecker diaktifkan):

helm install my-release zilliztech/milvus \
  --set image.all.tag=v2.6.0 \
  --set cluster.enabled=false \
  --set pulsarv3.enabled=false \
  --set standalone.messageQueue=woodpecker \
  --set woodpecker.enabled=true \
  --set streaming.enabled=true

Setelah penerapan, ikuti dokumen untuk meneruskan porting dan menghubungkan. Untuk menyesuaikan parameter Woodpecker, ikuti pengaturan yang dijelaskan dalam konfigurasi penyimpanan pesan.

Mengaktifkan Woodpecker untuk Milvus Standalone di Docker (penyimpanan = lokal)

Ikuti Jalankan Milvus di Docker. Contoh:

mkdir milvus-wp && cd milvus-wp
curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh

# Create user.yaml to enable Woodpecker with local filesystem
cat > user.yaml <<'EOF'
mq:
  type: woodpecker
woodpecker:
  storage:
    type: local
    rootPath: /var/lib/milvus/woodpecker
EOF

bash standalone_embed.sh start

Untuk mengubah pengaturan Woodpecker lebih lanjut, perbarui user.yaml dan jalankan bash standalone_embed.sh restart.

Mengaktifkan Woodpecker untuk Milvus Standalone dengan Docker Compose (storage=minio)

Ikuti Jalankan Milvus dengan Docker Compose. Contoh:

mkdir milvus-wp-compose && cd milvus-wp-compose
wget https://github.com/milvus-io/milvus/releases/download/v2.6.0/milvus-standalone-docker-compose.yml -O docker-compose.yml
# By default, the Docker Compose standalone uses Woodpecker
sudo docker compose up -d
# If you need to change Woodpecker parameters further, write an override:
docker exec -it milvus-standalone bash -lc 'cat > /milvus/configs/user.yaml <<EOF
mq:
  type: woodpecker
woodpecker:
  logstore:
    segmentSyncPolicy: 
      maxFlushThreads: 16
  storage:
    type: minio
EOF'

# Restart the container to apply the changes
docker restart milvus-standalone

Kiat penyetelan throughput

Berdasarkan tolok ukur dan batas backend di Woodpecker, optimalkan throughput penulisan end-to-end dari aspek-aspek berikut:

  • Sisi penyimpanan
    • Penyimpanan objek (kompatibel dengan minio/S3): Tingkatkan konkurensi dan ukuran objek (hindari objek kecil). Perhatikan batas bandwidth jaringan dan bucket. Satu node MinIO pada SSD sering kali memiliki batas sekitar 100 MB/s secara lokal; satu EC2 ke S3 dapat mencapai GB/s.
    • Sistem file lokal/bersama (lokal): Lebih memilih NVMe/disk cepat. Pastikan FS menangani penulisan kecil dan latensi fsync dengan baik.
  • Tombol-tombol pelatuk
    • Tingkatkan logstore.segmentSyncPolicy.maxFlushSize dan maxFlushThreads untuk flush yang lebih besar dan paralelisme yang lebih tinggi.
    • Setel maxInterval sesuai dengan karakteristik media (tukar latensi dengan throughput dengan agregasi yang lebih panjang).
    • Untuk penyimpanan objek, pertimbangkan untuk meningkatkan segmentRollingPolicy.maxSize untuk mengurangi perpindahan segmen.
  • Sisi klien/aplikasi
    • Gunakan ukuran batch yang lebih besar dan lebih banyak penulis/klien secara bersamaan.
    • Kontrol waktu penyegaran/pembuatan indeks (batch up sebelum pemicuan) untuk menghindari penulisan kecil yang sering terjadi.

Demo Penyisipan Batch

from pymilvus import MilvusClient
import random

# 1. Set up a Milvus client
client = MilvusClient(
    uri="http://<Proxy Pod IP>:27017",
)

# 2. Create a collection
res = client.create_collection(
    collection_name="test_milvus_wp",
    dimension=512,
    metric_type="IP",
    shards_num=2,
)
print(res)

# 3. Insert randomly generated vectors
colors = ["green", "blue", "yellow", "red", "black", "white", "purple", "pink", "orange", "brown", "grey"]
data = []

batch_size = 1000
batch_count = 2000
for j in range(batch_count):
    start_time = time.time()
    print(f"Inserting {j}th vectors {j * batch_size} startTime{start_time}")
    for i in range(batch_size):
        current_color = random.choice(colors)
        data.append({
            "id": (j*batch_size + i),
            "vector": [ random.uniform(-1, 1) for _ in range(512) ],
            "color": current_color,
            "color_tag": f"{current_color}_{str(random.randint(1000, 9999))}"
        })
    res = client.insert(
        collection_name="test_milvus_wp",
        data=data
    )
    data = []
    print(f"Inserted {j}th vectors endTime:{time.time()} costTime:{time.time() - start_time}")

Latensi

Woodpecker adalah WAL cloud-native yang dirancang untuk penyimpanan objek dengan trade-off antara throughput, biaya, dan latensi. Mode tertanam ringan yang saat ini didukung memprioritaskan pengoptimalan biaya dan keluaran, karena sebagian besar skenario hanya membutuhkan data untuk ditulis dalam waktu tertentu daripada menuntut latensi rendah untuk setiap permintaan penulisan. Oleh karena itu, Woodpecker menggunakan penulisan batch, dengan interval default 10 ms untuk backend penyimpanan sistem berkas lokal dan 200 ms untuk backend penyimpanan seperti MinIO. Selama operasi penulisan yang lambat, latensi maksimum sama dengan waktu interval ditambah waktu flush.

Perhatikan bahwa penyisipan batch tidak hanya dipicu oleh interval waktu tetapi juga oleh ukuran batch, yang secara default adalah 2MB.

Untuk detail tentang arsitektur, mode penyebaran (MemoryBuffer / QuorumBuffer), dan kinerja, lihat Arsitektur Woodpecker.

Untuk detail parameter lebih lanjut, lihat repositori GitHub Woodpecker.