• О Милвусе
  • Начать
  • Концепции
  • Руководство пользователя
  • Импорт данных
  • Инструменты искусственного интеллекта
  • Руководство по администрированию
    • Развертывание
    • Конфигурация
    • Управление зависимостями
    • Масштабирование
    • Обновление
    • Мониторинг, оповещения и журналы
    • Ресурсные группы
    • Безопасность
    • Тип переключателя MQ
  • Инструменты
  • Интеграции
  • Учебники
  • Вопросы и ответы
  • API Reference

Использование WoodpeckerCompatible with Milvus 2.6.x

В этом руководстве объясняется, как включить и использовать Woodpecker в качестве журнала опережающей записи (WAL) в Milvus 2.6.x. Woodpecker - это облачный WAL, предназначенный для хранения объектов, обеспечивающий высокую пропускную способность, низкие эксплуатационные расходы и плавную масштабируемость. Подробную информацию об архитектуре и эталонных образцах см. в разделе Woodpecker.

Обзор

  • Начиная с Milvus 2.6, Woodpecker - это дополнительный WAL, который обеспечивает упорядоченную запись и восстановление в качестве службы протоколирования.
  • В качестве очереди сообщений он ведет себя аналогично Pulsar/Kafka и может быть включен через конфигурацию.
  • Поддерживаются два бэкенда хранения данных: локальная файловая система (local) и объектное хранилище (minio/S3-совместимое ).

Быстрый запуск

Чтобы включить Woodpecker, установите для типа MQ значение Woodpecker:

mq:
  type: woodpecker

Примечание: Переключение mq.type для работающего кластера является операцией обновления. Внимательно выполните процедуру обновления и проверьте ее на свежем кластере, прежде чем переключать производство.

Конфигурация

Ниже приведен полный блок конфигурации Woodpecker (отредактируйте milvus.yaml или переопределите в 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.

Ключевые замечания:

  • woodpecker.meta
    • тип: В настоящее время поддерживается только etcd. Используйте тот же etcd, что и Milvus, для хранения легких метаданных.
    • префикс: Префикс ключа для метаданных. По умолчанию: woodpecker.
  • woodpecker.client
    • Управляет поведением сегмента при добавлении/прокрутке/аудите на стороне клиента, чтобы сбалансировать пропускную способность и сквозную задержку.
  • woodpecker.logstore
    • Управляет политиками синхронизации/промывки/компактирования/чтения для сегментов журнала. Это основные регуляторы для настройки пропускной способности/задержки.
  • woodpecker.storage
    • type: minio для MinIO/S3-совместимых объектных хранилищ (MinIO/S3/GCS/OSS и т. д.); local для локальных/общих файловых систем.
    • rootPath: Корневой путь для бэкенда хранилища (эффективно для local; в случае minio пути определяются bucket/prefix).

Режимы развертывания

Milvus поддерживает как автономный, так и кластерный режимы. Матрица поддержки бэкендов хранения Woodpecker:

storage.type=localstorage.type=minio
Milvus StandaloneПоддерживаетсяПоддерживается
Milvus ClusterОграниченно (требуется общая ФС)Поддерживается

Примечания:

  • При использовании minio Woodpecker разделяет с Milvus одно и то же хранилище объектов (MinIO/S3/GCS/OSS и т. д.).
  • При использовании local локальный диск на одном узле подходит только для Standalone. Если все подсистемы могут получить доступ к общей файловой системе (например, NFS), в режиме кластера также можно использовать local.

Совместимость объектных хранилищ для storage.type=minio

В следующей матрице приведена известная на данный момент совместимость бэкендов объектных хранилищ, когда Woodpecker настроен на storage.type=minio. Эта информация основана на GitHub Discussion #150.

Провайдер / сервисСтатусПримечания
Azure Blob StorageПоддерживаетсяИспользуется собственный Azure SDK.
AWS S3ПоддерживаетсяРодной S3 с полной поддержкой условной записи.
MinIO (>= 2024-12)Поддерживается .Полная поддержка условной записи в S3.
Aliyun OSSПоддерживаетсяПоддерживается через S3-совместимый интерфейс.
Tencent COSПоддерживаетсяПоддерживается через интерфейс, совместимый с S3.
Облачное хранилище Google (GCS)Поддерживается .Поддерживается через режим совместимости с S3.
Huawei Cloud OBSНе поддерживается .Отсутствует необходимая семантика условной записи.
Данные VASTПоддерживаетсяПроверено сообществом; работает только с неверсированными ведрами.
Другие S3-совместимые хранилищаЧастичноЗависит от полной поддержки семантики S3 Conditional Write.

Примечания:

  • Совместимость зависит от нативной поддержки SDK или поддержки семантики S3 Conditional Write.
  • Если вы самостоятельно устанавливаете MinIO для Woodpecker, используйте RELEASE.2024-12-18T13-15-44Z или более позднюю версию.
  • Эта матрица отражает текущее обсуждение и может меняться по мере подтверждения поддержки бэкенда.

Руководства по развертыванию

Включение Woodpecker для кластера Milvus на Kubernetes (Milvus Operator, storage=minio)

После установки Milvus Operator запустите кластер Milvus с включенным Woodpecker, используя официальный пример:

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

Этот пример настраивает Woodpecker в качестве очереди сообщений и включает потоковый узел. При первом запуске может потребоваться время для извлечения изображений; подождите, пока все поды будут готовы:

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

После готовности вы должны увидеть стручки, похожие на:

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

Выполните следующую команду, чтобы удалить кластер Milvus.

kubectl delete milvus my-release

Если вам нужно настроить параметры Woodpecker, следуйте настройкам, описанным в message storage config.

Включение Woodpecker для кластера Milvus на Kubernetes (Helm Chart, storage=minio)

Сначала добавьте и обновите диаграмму Milvus Helm, как описано в разделе Запуск Milvus в Kubernetes с помощью Helm.

Затем выполните развертывание в одном из следующих примеров:

- Кластерное развертывание (рекомендуемые настройки с включенным Woodpecker и 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

- Автономное развертывание (Woodpecker включен):

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

После развертывания следуйте документации для переадресации портов и подключения. Чтобы настроить параметры Woodpecker, следуйте настройкам, описанным в конфигурации хранилища сообщений.

Включите Woodpecker для Milvus Standalone в Docker (storage=local)

Выполните команду Запустить Milvus в Docker. Пример:

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

Чтобы дополнительно изменить настройки Woodpecker, обновите user.yaml и запустите bash standalone_embed.sh restart.

Включить Woodpecker для Milvus Standalone с помощью Docker Compose (storage=minio)

Выполните команду Запустить Milvus с помощью Docker Compose. Пример:

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

Советы по настройке пропускной способности

Основываясь на бенчмарках и ограничениях бэкенда в Woodpecker, оптимизируйте сквозную пропускную способность записи со следующих точек зрения:

  • Хранилище
    • Объектное хранилище (совместимое с minio/S3): Увеличьте параллельность и размер объектов (избегайте маленьких объектов). Следите за ограничениями пропускной способности сети и ведра. Пропускная способность одного узла MinIO на SSD часто составляет около 100 МБ/с на локальном уровне; скорость одного узла EC2 в S3 может достигать ГБ/с.
    • Локальные/общие файловые системы (локальные): Предпочитайте NVMe/быстрые диски. Убедитесь, что ФС хорошо справляется с небольшими записями и задержками fsync.
  • Ручки дятла
    • Увеличьте logstore.segmentSyncPolicy.maxFlushSize и maxFlushThreads для больших объемов флеша и более высокого параллелизма.
    • Настройте maxInterval в соответствии с характеристиками носителя (обменяйте задержку на пропускную способность при более длительной агрегации).
    • Для объектных хранилищ следует увеличить segmentRollingPolicy.maxSize, чтобы уменьшить переключение сегментов.
  • Сторона клиента/приложения
    • Используйте большие размеры пакетов и большее число одновременно работающих писателей/клиентов.
    • Контролируйте время обновления/создания индекса (пакетная вставка перед срабатыванием), чтобы избежать частых небольших записей.

Демонстрация пакетной вставки

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}")

Латентность

Woodpecker - это облачный нативный WAL, предназначенный для объектного хранилища с компромиссами между пропускной способностью, стоимостью и задержкой. В поддерживаемом в настоящее время облегченном встроенном режиме приоритет отдается оптимизации стоимости и пропускной способности, поскольку в большинстве сценариев требуется только запись данных в течение определенного времени, а не низкая задержка для отдельных запросов на запись. Поэтому Woodpecker использует пакетную запись с интервалами по умолчанию 10 мс для локальных файловых систем и 200 мс для MinIO-подобных систем хранения. При медленных операциях записи максимальная задержка равна времени интервала плюс время промывки.

Обратите внимание, что пакетная вставка инициируется не только временными интервалами, но и размером пакета, который по умолчанию равен 2 МБ.

Подробные сведения об архитектуре, режимах развертывания (MemoryBuffer / QuorumBuffer) и производительности см. в разделе Архитектура Woodpecker.

Для получения более подробной информации о параметрах обратитесь к репозиторию Woodpecker на GitHub.