Переключение между Pulsar и Woodpecker
На этой странице описано, как переключить очередь сообщений (MQ) кластера Milvus между Pulsar (встроенным или внешним) и Woodpecker (с бэкэндом MinIO) в обоих направлениях. Общий порядок действий и необходимые условия см. в разделе «Переключение очереди сообщений».
Предпосылка: функция «Переключение MQ» доступна в Milvus 3.0 и более поздних версиях. Перед началом обновите свой экземпляр Milvus до версии 3.0 или более поздней — эта функция недоступна в более ранних версиях.
Переключение очереди сообщений — операция с высоким уровнем риска. Выберите раздел, соответствующий вашему способу развертывания — «С помощью Helm» или «С помощью Milvus Operator» — и следуйте инструкциям от начала до конца. Не смешивайте команды Helm и Operator.
С помощью Helm
Переход с Pulsar на Woodpecker (Helm)
Шаг 1: Убедитесь, что экземпляр Milvus работает. Убедитесь, что ваш кластер Milvus работает корректно — например, создав тестовую коллекцию, вставив данные и выполнив запрос.
Шаг 2: Выполните переключение MQ. Откройте интерфейс управления MixCoord, затем вызовите API переключения:
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
В другом терминале:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "woodpecker"}'
Шаг 3: Убедитесь, что переключение завершено.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
В случае успешного переключения в журнале регистрируется сообщение « [mqTypeValue=woodpecker] ».
Шаг 4: (Необязательно) Остановите Pulsar и выполните очистку. Для встроенного Pulsar отключите Pulsar и включите Woodpecker, затем удалите 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> ...
Для внешнего Pulsar очистите темы Milvus во внешнем экземпляре Pulsar. Темы Milvus имеют формат <cluster_prefix>-dml_<seqNo>_<TimeTick><Version> (например, by-dev-rootcoord-dml_10_464633776992639586v0).
Если вы планируете позже вернуться к Pulsar, сначала очистите данные/темы, чтобы избежать конфликтов. Из-за ограничений диаграмм Helm возвращение к встроенному экземпляру Pulsar в настоящее время невозможно.
Переход с Woodpecker на Pulsar (Helm)
Шаг 1: Убедитесь, что экземпляр Milvus работает.
Шаг 2: Настройте целевое соединение с Pulsar и перезапустите Milvus. Для перехода необходимо, чтобы Milvus уже знал о соединении с Pulsar, поэтому запишите его в файл « user.yaml » через extraConfigFiles и примените с помощью команды helm upgrade (которая перезапускает поды). Для работы функции Switch MQ требуется файл « streaming.enabled=true ».
# 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
Дождитесь, пока все поды будут готовы, затем убедитесь, что конфигурация доступа к Pulsar была применена к конфигурации Milvus.
Шаг 3: Выполните переключение MQ.
Убедитесь, что целевой Pulsar не содержит тем Milvus из предыдущей конфигурации. Если это ваш первый переход на Pulsar, пропустите это примечание; в противном случае сначала удалите оставшиеся темы Milvus с такими же именами.
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
В другом терминале:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "pulsar"}'
Шаг 4: Убедитесь, что переход завершен.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
При успешном переключении в журнале регистрируется сообщение « [mqTypeValue=pulsar] ».
Шаг 5: (Необязательно) Удалите данные Woodpecker. Удалите данные Woodpecker на MinIO/S3 (в каталоге <rootPath>/wp/..., обычно files/wp/...) и метаданные Woodpecker в etcd (etcdctl get woodpecker --prefix). Если вы планируете позже вернуться к Woodpecker, сначала удалите эти файлы.
С помощью Milvus Operator
Переход с Pulsar на Woodpecker (Milvus Operator)
Шаг 1: Убедитесь, что экземпляр Milvus запущен.
Шаг 2: Выполните переключение MQ. Сервис MixCoord не доступен извне, поэтому запустите API переключения изнутри пода 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"}'
Шаг 3: Убедитесь, что переключение завершено.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
В случае успешного переключения в журнале регистрируется сообщение « [mqTypeValue=woodpecker] ».
Шаг 4: Обновите тип MQ в Operator. Обновите конфигурацию, управляемую Operator, чтобы Operator не отменил переключение. Создайте файл 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
Шаг 5: (Необязательно) Остановите Pulsar и выполните очистку. Для встроенного Pulsar удалите релиз Pulsar и удалите его PVC:
helm uninstall my-release-pulsar
kubectl get pvc | grep my-release-pulsar
kubectl delete pvc <pulsar-pvc-name> ...
Для внешнего Pulsar очистите темы Milvus (формат <cluster_prefix>-dml_<seqNo>_<TimeTick><Version>).
Если вы планируете позже вернуться к Pulsar, сначала очистите данные/темы, чтобы избежать конфликтов. Из-за ограничений диаграмм Helm возврат к встроенному экземпляру Pulsar в настоящее время невозможен.
Переход с Woodpecker на Pulsar (оператор Milvus)
Шаг 1: Убедитесь, что экземпляр Milvus запущен.
Шаг 2: Настройте подключение к целевому Pulsar и перезапустите Milvus. Добавьте подключение к Pulsar в файл spec.config (оператор преобразует spec.config в user.yaml) и установите тип MQ; приложение CR перезапустит поды с новой конфигурацией.
# 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
Дождитесь, пока все поды будут готовы, затем убедитесь, что конфигурация доступа к Pulsar была преобразована в конфигурацию Milvus.
Шаг 3: Выполните переключение MQ.
Убедитесь, что целевой Pulsar не содержит тем Milvus из предыдущей конфигурации. Если это ваш первый переход на Pulsar, пропустите это примечание; в противном случае сначала удалите оставшиеся темы Milvus с такими же именами.
kubectl exec -it <mixcoord-pod> -- \
curl -X POST http://localhost:9091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "pulsar"}'
Шаг 4: Убедитесь, что переход завершён.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
В случае успешного переключения в журнале регистрируется сообщение « [mqTypeValue=pulsar] ».
Шаг 5: (Необязательно) Удалите данные Woodpecker. Удалите данные Woodpecker на MinIO/S3 (в каталоге <rootPath>/wp/..., обычно files/wp/...) и метаданные Woodpecker в etcd (etcdctl get woodpecker --prefix). Если вы планируете позже вернуться к Woodpecker, сначала удалите эти файлы.
Поддерживаемые сценарии
| Источник MQ | Целевой MQ | Helm | Оператор Milvus |
|---|---|---|---|
| Встроенный Pulsar | Woodpecker (MinIO) | Поддерживается | Поддерживается |
| Внешний Pulsar | Woodpecker (MinIO) | Поддерживается | Поддерживается |
| Woodpecker (MinIO) | Внешний Pulsar | Поддерживается | Поддерживается |
| Pulsar | Woodpecker (локальный) | Поддерживается, но не рекомендуется (все модули требуют общей файловой системы) | Не поддерживается |