Pulsar와 Woodpecker 간 전환
이 페이지에서는 Milvus 클러스터의 메시지 큐(MQ)를 Pulsar (내장형 또는 외부)와 Woodpecker (MinIO 백엔드) 간에 양방향으로 전환하는 방법을 설명합니다. 일반적인 워크플로우 및 필수 조건에 대해서는 '메시지 큐 전환'을 참조하십시오.
필수 조건: MQ 전환 기능은 Milvus 3.0 이상 버전에서 사용할 수 있습니다. 시작하기 전에 Milvus 인스턴스를 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를 활성화한 다음, Pulsar PVC를 삭제합니다:
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의 경우, 외부 Pulsar 인스턴스에서 Milvus 토픽을 정리합니다. 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 연결을 인식하고 있어야 하므로, extraConfigFiles 을 통해 user.yaml 에 내용을 작성하고 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 데이터를 정리합니다. MinIO/S3( <rootPath>/wp/... 폴더 내, 일반적으로 files/wp/...)에 있는 Woodpecker 데이터와 etcd(etcdctl get woodpecker --prefix)에 있는 Woodpecker 메타데이터를 삭제합니다. 나중에 Woodpecker로 다시 전환할 계획이라면, 먼저 이 파일들을 정리하십시오.
Milvus Operator 사용 시
Pulsar에서 Woodpecker로 전환(Milvus Operator)
1단계: Milvus 인스턴스가 실행 중인지 확인합니다.
2단계: MQ 전환을 실행합니다. MixCoord 서비스는 외부에 노출되지 않으므로 MixCoord 포드 내부에서 전환 API를 실행하십시오:
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단계: Operator의 MQ 유형을 업데이트합니다. 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 Operator)
1단계: Milvus 인스턴스가 실행 중인지 확인합니다.
2단계: 대상 Pulsar 연결을 구성하고 Milvus를 다시 시작합니다. Pulsar 연결을 spec.config 아래에 배치하고(Operator는 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 데이터 정리. MinIO/S3( <rootPath>/wp/... 폴더 내, 일반적으로 files/wp/...)에 있는 Woodpecker 데이터와 etcd(etcdctl get woodpecker --prefix)에 있는 Woodpecker 메타데이터를 삭제하십시오. 나중에 Woodpecker로 다시 전환할 계획이라면, 먼저 이러한 파일을 정리하십시오.
지원되는 시나리오
| 소스 MQ | 대상 MQ | Helm | Milvus Operator |
|---|---|---|---|
| 내장형 Pulsar | Woodpecker (MinIO) | 지원됨 | 지원됨 |
| 외부 Pulsar | Woodpecker (MinIO) | 지원됨 | 지원됨 |
| Woodpecker (MinIO) | 외부 Pulsar | 지원됨 | 지원됨 |
| Pulsar | Woodpecker (로컬) | 지원되지만 권장하지 않음 (모든 포드에 공유 파일 시스템이 필요함) | 지원되지 않음 |