🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
Beranda
  • Panduan Administrasi
  • Home
  • Docs
  • Panduan Administrasi

  • Konfigurasi

  • QueryNode Menggunakan Disk Lokal

Mengkonfigurasi Milvus QueryNode dengan Disk Lokal

Artikel ini menjelaskan cara mengonfigurasi Milvus QueryNode untuk menggunakan penyimpanan disk lokal.

Gambaran Umum

Milvus adalah basis data vektor yang berfokus pada AI yang dirancang untuk penyimpanan dan pengambilan data vektor dalam jumlah besar secara efisien. Sangat ideal untuk tugas-tugas seperti analisis gambar dan video, pemrosesan bahasa alami, dan sistem rekomendasi. Untuk memastikan performa yang optimal, sangat penting untuk meminimalkan latensi pembacaan disk. Menggunakan SSD NVMe lokal sangat disarankan untuk mencegah penundaan dan menjaga stabilitas sistem.

Fitur utama yang berperan penting dalam penyimpanan disk lokal meliputi:

  • Cache potongan: Memuat data sebelumnya ke dalam cache disk lokal untuk pencarian yang lebih cepat.
  • MMap: Memetakan konten file secara langsung ke dalam memori untuk efisiensi memori yang lebih baik.
  • Indeks DiskANN: Memerlukan penyimpanan disk untuk manajemen indeks yang efisien.

Dalam artikel ini, kita akan fokus pada penerapan Milvus Distributed di platform cloud, dan cara mengonfigurasi QueryNode untuk menggunakan penyimpanan disk NVMe. Tabel berikut mencantumkan jenis mesin yang direkomendasikan dari berbagai penyedia cloud.

Penyedia CloudJenis Mesin
AWSSeri R6id
GCPSeri N2
AzureSeri Lsv3
Alibaba CloudSeri i3
Tencent CloudSeri IT5

Jenis mesin ini menyediakan penyimpanan disk NVMe. Anda dapat menggunakan perintah lsblk pada instance jenis mesin ini untuk memeriksa apakah mereka memiliki penyimpanan disk NVMe. Jika ya, Anda dapat melanjutkan ke langkah berikutnya.

$ lsblk | grep nvme
nvme0n1     259:0    0 250.0G  0 disk 
nvme1n1     259:1    0 250.0G  0 disk 

Mengonfigurasi Kubernetes untuk menggunakan disk lokal

Untuk mengonfigurasi QueryNode Milvus Distributed agar menggunakan penyimpanan disk NVMe, Anda perlu mengonfigurasi node pekerja dari cluster Kubernetes target untuk menyimpan kontainer dan citra pada disk NVMe. Prosedurnya bervariasi, tergantung pada penyedia layanan cloud.

AWS

Saat menggunakan Amazon EKS, Anda dapat menyesuaikan node terkelola dengan templat peluncuran, yang di dalamnya Anda dapat menentukan pengaturan konfigurasi untuk grup node. Berikut ini adalah contoh cara memasang disk NVMe pada node pekerja di cluster Amazon EKS Anda:

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bash
echo "Running custom user data script"
if ( lsblk | fgrep -q nvme1n1 ); then
    mkdir -p /mnt/data /var/lib/kubelet /var/lib/docker
    mkfs.xfs /dev/nvme1n1
    mount /dev/nvme1n1 /mnt/data
    chmod 0755 /mnt/data
    mv /var/lib/kubelet /mnt/data/
    mv /var/lib/docker /mnt/data/
    ln -sf /mnt/data/kubelet /var/lib/kubelet
    ln -sf /mnt/data/docker /var/lib/docker
    UUID=$(lsblk -f | grep nvme1n1 | awk '{print $3}')
    echo "UUID=$UUID     /mnt/data   xfs    defaults,noatime  1   1" >> /etc/fstab
fi
echo 10485760 > /proc/sys/fs/aio-max-nr

--==MYBOUNDARY==--

Pada contoh di atas, kami mengasumsikan bahwa disk NVMe adalah /dev/nvme1n1. Anda perlu memodifikasi skrip agar sesuai dengan konfigurasi spesifik Anda.

Untuk detailnya, lihat Menyesuaikan node terkelola dengan templat peluncuran.

GCP

Untuk menyediakan penyimpanan SSD Lokal di cluster Google Kubernetes Engine (GKE), dan mengonfigurasi beban kerja untuk mengonsumsi data dari penyimpanan sementara yang didukung SSD Lokal yang terpasang pada node di cluster Anda, jalankan perintah berikut:

gcloud container node-pools create ${POOL_NAME} \
    --cluster=${CLUSTER_NAME} \
    --ephemeral-storage-local-ssd count=${NUMBER_OF_DISKS} \
    --machine-type=${MACHINE_TYPE}

Untuk detailnya, lihat Menyediakan penyimpanan SSD Lokal di GKE.

Azure

Untuk membuat set skala mesin virtual (VMSS) dengan penyimpanan disk NVMe lokal, Anda perlu meneruskan data khusus ke instance VM. Berikut ini adalah contoh cara melampirkan disk NVMe ke instance VM di VMSS:

mdadm -Cv /dev/md0 -l0 -n2 /dev/nvme0n1 /dev/nvme1n1
mdadm -Ds > /etc/mdadm/mdadm.conf 
update-initramfs -u

mkfs.xfs /dev/md0
mkdir -p /var/lib/kubelet
echo '/dev/md0 /var/lib/kubelet xfs defaults 0 0' >> /etc/fstab
mount -a

Pada contoh di atas, kami mengasumsikan bahwa disk NVMe adalah /dev/nvme0n1 dan /dev/nvme1n1. Anda perlu memodifikasi skrip agar sesuai dengan konfigurasi spesifik Anda.

Alibaba Cloud & TecentCloud

Untuk membuat kumpulan node yang menggunakan volume SSD Lokal, kita perlu mengoper Data Kustom. Berikut ini adalah contoh data khusus.

#!/bin/bash
echo "nvme init start..."
mkfs.xfs /dev/nvme0n1
mkdir -p /mnt/data
echo '/dev/nvme0n1 /mnt/data/ xfs defaults 0 0' >> /etc/fstab
mount -a

mkdir -p /mnt/data/kubelet /mnt/data/containerd /mnt/data/log/pods
mkdir -p  /var/lib/kubelet /var/lib/containerd /var/log/pods

echo '/mnt/data/kubelet /var/lib/kubelet none defaults,bind 0 0' >> /etc/fstab
echo '/mnt/data/containerd /var/lib/containerd none defaults,bind 0 0' >> /etc/fstab
echo '/mnt/data/log/pods /var/log/pods none defaults,bind 0 0' >> /etc/fstab
mount -a

echo "nvme init end..."

Pada contoh di atas, kami mengasumsikan bahwa disk NVMe adalah /dev/nvme0n1. Anda perlu memodifikasi skrip agar sesuai dengan konfigurasi spesifik Anda.

IDC Anda sendiri

Jika Anda menjalankan IDC sendiri dan ingin mengonfigurasi container untuk menggunakan sistem file pada disk NVMe yang baru dipasang secara default di containerd, ikuti langkah berikut:

  • Pasang disk NVMe.

    Pastikan disk NVMe Anda terpasang dengan benar di mesin host. Anda dapat menyambungkannya ke direktori pilihan Anda. Misalnya, jika Anda memasangnya ke /mnt/nvme, pastikan sudah diatur dengan benar dan Anda dapat melihat disk yang tersedia di /mnt/nvme dengan menjalankan lsblk atau df -h.

  • Perbarui konfigurasi containerd.

    Ubah konfigurasi containerd untuk menggunakan mount baru sebagai direktori root untuk penyimpanan kontainer.

    sudo mkdir -p /mnt/nvme/containerd /mnt/nvme/containerd/state
    sudo vim /etc/containerd/config.toml
    

    Cari bagian [plugins."io.containerd.grpc.v1.cri".containerd], dan modifikasi pengaturan snapshotter dan root sebagai berikut

    [plugins."io.containerd.grpc.v1.cri".containerd]
    snapshotter = "overlayfs"
    root = "/mnt/nvme/containerd"
    state = "/mnt/nvme/containerd/state"
    
  • Mulai ulang containerd.

    Mulai ulang layanan containerd untuk menerapkan perubahan.

    sudo systemctl restart containerd
    

Verifikasi kinerja disk

Anda disarankan untuk memverifikasi performa disk menggunakan Fio, yang merupakan alat populer untuk membandingkan performa disk. Berikut ini adalah contoh cara menjalankan Fio untuk menguji performa disk.

  • Sebarkan pod uji ke node dengan disk NVMe.

    kubectl create -f ubuntu.yaml
    

    File ubuntu.yaml adalah sebagai berikut:

    apiVersion: v1
    kind: Pod
    metadata:
    name: ubuntu
    spec:
    containers:
    - name: ubuntu
        image: ubuntu:latest
        command: ["sleep", "86400"]
        volumeMounts:
        - name: data-volume
            mountPath: /data
    volumes:
        - name: data-volume
        emptyDir: {}
    
  • Jalankan Fio untuk menguji performa disk.

    # enter the container
    kubectl exec pod/ubuntu -it bash
    
    # in container
    apt-get update
    apt-get install fio -y
    
    # change to the mounted dir
    cd /data
    
    # write 10GB
    fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4K -size=10G -numjobs=10 -runtime=600 -group_reporting -filename=test -name=Rand_Write_IOPS_Test
    
    # verify the read speed
    # compare with the disk performance indicators provided by various cloud providers.
    fio --filename=test --direct=1 --rw=randread --bs=4k --ioengine=libaio --iodepth=64 --runtime=120 --numjobs=128 --time_based --group_reporting --name=iops-test-job --eta-newline=1  --readonly
    

    Dan hasilnya akan terlihat seperti ini:

    Jobs: 128 (f=128): [r(128)][100.0%][r=1458MiB/s][r=373k IOPS][eta 00m:00s]
    iops-test-job: (groupid=0, jobs=128): err= 0: pid=768: Mon Jun 24 09:35:06 2024
    read: IOPS=349k, BW=1364MiB/s (1430MB/s)(160GiB/120067msec)
        slat (nsec): min=765, max=530621k, avg=365836.09, stdev=4765464.96
        clat (usec): min=35, max=1476.0k, avg=23096.78, stdev=45409.13
        lat (usec): min=36, max=1571.6k, avg=23462.62, stdev=46296.74
        clat percentiles (usec):
        |  1.00th=[    69],  5.00th=[    79], 10.00th=[    85], 20.00th=[    95],
        | 30.00th=[   106], 40.00th=[   123], 50.00th=[   149], 60.00th=[ 11469],
        | 70.00th=[ 23462], 80.00th=[ 39584], 90.00th=[ 70779], 95.00th=[103285],
        | 99.00th=[189793], 99.50th=[244319], 99.90th=[497026], 99.95th=[591397],
        | 99.99th=[767558]
    bw (  MiB/s): min=  236, max= 4439, per=100.00%, avg=1365.82, stdev= 5.02, samples=30591
    iops        : min=60447, max=1136488, avg=349640.62, stdev=1284.65, samples=30591
    lat (usec)   : 50=0.01%, 100=24.90%, 250=30.47%, 500=0.09%, 750=0.31%
    lat (usec)   : 1000=0.08%
    lat (msec)   : 2=0.32%, 4=0.59%, 10=1.86%, 20=8.20%, 50=17.29%
    lat (msec)   : 100=10.62%, 250=4.80%, 500=0.38%, 750=0.09%, 1000=0.01%
    lat (msec)   : 2000=0.01%
    cpu          : usr=0.20%, sys=0.48%, ctx=838085, majf=0, minf=9665
    IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
        submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
        complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
        issued rwts: total=41910256,0,0,0 short=0,0,0,0 dropped=0,0,0,0
        latency   : target=0, window=0, percentile=100.00%, depth=64
    

Menyebarkan Milvus Terdistribusi

Setelah hasil verifikasi memuaskan, Anda dapat menggunakan Milvus Distributed dengan langkah-langkah berikut:

Kiat untuk men-deploy Milvus Distributed menggunakan Helm

Pod QueryNode menggunakan disk NVMe sebagai volume EmptyDir secara default. Anda disarankan untuk memasang disk NVMe ke /var/lib/milvus/data di dalam pod QueryNode untuk memastikan performa yang optimal.

Untuk detail tentang cara menggunakan Milvus Distributed menggunakan Helm, lihat Menjalankan Milvus di Kubernetes dengan Helm.

Kiat untuk menerapkan Milvus Distributed menggunakan Milvus Operator

Milvus Operator secara otomatis mengonfigurasi pod QueryNode untuk menggunakan disk NVMe sebagai volume EmptyDir. Anda disarankan untuk menambahkan konfigurasi berikut ke sumber daya khusus MilvusCluster:

...
spec:
  components:
    queryNode:
      volumeMounts:
      - mountPath: /var/lib/milvus/data
        name: data
      volumes:
      - emptyDir:
        name: data

Ini akan memastikan bahwa pod QueryNode menggunakan disk NVMe sebagai volume data. Untuk detail tentang cara menggunakan Milvus Distributed menggunakan Milvus Operator, lihat Menjalankan Milvus di Kubernetes dengan Milvus Operator.

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?