Переключение между Kafka и Woodpecker
На этой странице описано, как переключить очередь сообщений (MQ) кластера Milvus между Kafka (встроенной или внешней) и Woodpecker (с бэкэндом MinIO) в обоих направлениях. Общий порядок действий и необходимые условия см. в разделе «Переключение очереди сообщений».
Предпосылка: функция «Переключение MQ» доступна в Milvus 3.0 и более поздних версиях. Перед началом обновите свой экземпляр Milvus до версии 3.0 или более поздней — эта функция недоступна в более ранних версиях.
Переключение очереди сообщений — операция с высоким уровнем риска. Выберите раздел, соответствующий вашему способу развертывания — «С помощью Helm» или «С помощью Milvus Operator» — и следуйте инструкциям от начала до конца. Не смешивайте команды Helm и Operator.
С помощью Helm
Переход с Kafka на 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: (Необязательно) Остановите Kafka и выполните очистку. Для встроенного Kafka удалите поды Kafka и их PVC. Для внешнего Kafka очистите темы Milvus во внешнем экземпляре Kafka — они имеют формат <cluster_prefix>-dml_<seqNo>_<TimeTick><Version>.
Если вы планируете позже вернуться к Kafka, сначала очистите данные/темы, чтобы избежать конфликтов.
Переход с Woodpecker на Kafka (Helm)
Шаг 1: Убедитесь, что экземпляр Milvus работает.
Шаг 2: Настройте целевое соединение с Kafka и перезапустите Milvus. Для перехода необходимо, чтобы Milvus уже знал данные соединения с Kafka, поэтому запишите их в файл ` user.yaml ` с помощью команды ` extraConfigFiles ` и примените изменения с помощью ` helm upgrade ` (команда перезапускает поды). Для работы функции Switch MQ требуется ` streaming.enabled=true `. Подробности о SASL/SSL см. в разделе «Подключение к Kafka с помощью SASL/SSL».
# values.yaml
extraConfigFiles:
user.yaml: |+
kafka:
brokerList:
- <your_kafka_address>:<your_kafka_port>
saslUsername:
saslPassword:
saslMechanisms: PLAIN
securityProtocol: SASL_SSL
helm upgrade -i my-release zilliztech/milvus \
--set kafka.enabled=true \
--set woodpecker.enabled=false \
--set streaming.enabled=true \
-f values.yaml
Дождитесь, пока все поды будут готовы, а затем убедитесь, что конфигурация доступа к Kafka была отражена в конфигурации Milvus.
Шаг 3: Выполните переход на MQ.
Убедитесь, что целевой Kafka не содержит тем Milvus из предыдущей конфигурации. Если это ваш первый переход на Kafka, пропустите это примечание; в противном случае сначала удалите оставшиеся темы 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": "kafka"}'
Шаг 4: Убедитесь, что переключение завершено.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
При успешном переключении в журнале появляется запись « [mqTypeValue=kafka] ».
Шаг 5: (Необязательно) Удалите данные Woodpecker. Удалите данные Woodpecker из MinIO/S3 (в папке <rootPath>/wp/..., обычно files/wp/...) и метаданные Woodpecker из etcd (etcdctl get woodpecker --prefix). Если вы планируете позже вернуться к Woodpecker, сначала удалите эти файлы.
С помощью Milvus Operator
Переход с Kafka на 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: (Необязательно) Остановите Kafka и выполните очистку. Для встроенного Kafka удалите поды Kafka и их PVC. Для внешнего Kafka очистите темы Milvus (формат <cluster_prefix>-dml_<seqNo>_<TimeTick><Version>).
Переход с Woodpecker на Kafka (оператор Milvus)
Шаг 1: Убедитесь, что экземпляр Milvus работает.
Шаг 2: Настройте целевое соединение с Kafka и перезапустите Milvus. Укажите соединение с Kafka в разделе spec.config (оператор преобразует spec.config в user.yaml) и задайте тип MQ; применение CR приведет к перезапуску под с новой конфигурацией. Подробности о SASL/SSL см. в разделе «Подключение к Kafka с помощью SASL/SSL».
# change_configmap.yaml
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
config:
kafka:
brokerList:
- <your_kafka_address>:<your_kafka_port>
saslUsername:
saslPassword:
saslMechanisms: PLAIN
securityProtocol: SASL_SSL
dependencies:
msgStreamType: kafka
kubectl patch -f change_configmap.yaml --patch-file change_configmap.yaml --type merge
Дождитесь, пока все поды будут готовы, а затем убедитесь, что конфигурация доступа к Kafka была преобразована в конфигурацию Milvus.
Шаг 3: Выполните переключение MQ.
Убедитесь, что целевой Kafka не содержит тем Milvus из предыдущей конфигурации. Если это ваш первый переход на Kafka, пропустите это примечание; в противном случае сначала удалите оставшиеся темы Milvus с такими же именами.
kubectl exec -it <mixcoord-pod> -- \
curl -X POST http://localhost:9091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "kafka"}'
Шаг 4: Убедитесь, что переход завершён.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
При успешном переключении в журнале регистрируется сообщение « [mqTypeValue=kafka] ».
Шаг 5: (Необязательно) Удалите данные Woodpecker. Удалите данные Woodpecker на MinIO/S3 (в каталоге <rootPath>/wp/..., обычно files/wp/...) и метаданные Woodpecker в etcd (etcdctl get woodpecker --prefix). Если вы планируете позже вернуться к Woodpecker, сначала удалите эти файлы.
Поддерживаемые сценарии
| Источник MQ | Целевой MQ | Helm | Оператор Milvus |
|---|---|---|---|
| Встроенный Kafka | Woodpecker (MinIO) | Поддерживается | Поддерживается |
| Внешний Kafka | Woodpecker (MinIO) | Поддерживается | Поддерживается |
| Woodpecker (MinIO) | Внешний Kafka | Поддерживается | Поддерживается |
| Kafka | Woodpecker (локальный) | Поддерживается, но не рекомендуется (для всех подсистем требуется общая файловая система) | Не поддерживается |