Kafka와 Woodpecker 간 전환
이 페이지에서는 Milvus 클러스터의 메시지 큐(MQ)를 Kafka (내장형 또는 외부)와 Woodpecker (MinIO 백엔드) 간에 양방향으로 전환하는 방법을 설명합니다. 일반적인 워크플로우 및 필수 조건에 대해서는 '메시지 큐 전환'을 참조하십시오.
필수 조건: MQ 전환 기능은 Milvus 3.0 이상 버전에서 사용할 수 있습니다. 시작하기 전에 Milvus 인스턴스를 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의 경우, 외부 Kafka 인스턴스에서 Milvus 토픽을 정리합니다. 토픽 형식은 <cluster_prefix>-dml_<seqNo>_<TimeTick><Version> 입니다.
나중에 다시 Kafka로 전환할 계획이라면, 충돌을 방지하기 위해 먼저 데이터/토픽을 정리하십시오.
Woodpecker에서 Kafka로 전환 (Helm)
1단계: Milvus 인스턴스가 실행 중인지 확인합니다.
2단계: 대상 Kafka 연결을 구성하고 Milvus를 다시 시작합니다. 전환을 위해서는 Milvus가 이미 Kafka 연결 정보를 알고 있어야 하므로, extraConfigFiles 를 통해 user.yaml 에 해당 정보를 작성한 후 helm upgrade 를 실행하여 적용합니다(이 명령은 포드를 롤오버합니다). Switch MQ 기능을 사용하려면 streaming.enabled=true 가 필요합니다. SASL/SSL에 대한 자세한 내용은 ‘SASL/SSL을 사용하여 Kafka에 연결’을 참조하십시오.
# 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 데이터를 정리합니다. MinIO/S3( <rootPath>/wp/... 폴더 내, 일반적으로 files/wp/...)에 있는 Woodpecker 데이터와 etcd(etcdctl get woodpecker --prefix)에 있는 Woodpecker 메타데이터를 삭제합니다. 나중에 Woodpecker로 다시 전환할 계획이라면, 먼저 이 파일들을 정리하십시오.
Milvus Operator 사용 시
Kafka에서 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단계: (선택 사항) Kafka를 중지하고 정리합니다. 내장형 Kafka의 경우, Kafka 포드와 해당 PVC를 제거합니다. 외부 Kafka의 경우, Milvus 토픽을 정리합니다( <cluster_prefix>-dml_<seqNo>_<TimeTick><Version> 형식).
Woodpecker에서 Kafka로 전환(Milvus Operator)
1단계: Milvus 인스턴스가 실행 중인지 확인합니다.
2단계: 대상 Kafka 연결을 구성하고 Milvus를 다시 시작합니다. Kafka 연결을 spec.config 아래에 배치하고(Operator는 spec.config 를 user.yaml 로 변환합니다), MQ 유형을 설정합니다. CR을 적용하면 포드가 새로운 구성으로 재시작됩니다. SASL/SSL에 대한 자세한 내용은 SASL/SSL을 사용하여 Kafka에 연결하기를 참조하십시오.
# 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 데이터 정리. MinIO/S3( <rootPath>/wp/... 폴더 내, 일반적으로 files/wp/...)에 있는 Woodpecker 데이터와 etcd(etcdctl get woodpecker --prefix)에 있는 Woodpecker 메타데이터를 삭제합니다. 나중에 Woodpecker로 다시 전환할 계획이라면, 먼저 이 파일들을 정리하십시오.
지원되는 시나리오
| 소스 MQ | 대상 MQ | Helm | Milvus Operator |
|---|---|---|---|
| 내장형 Kafka | Woodpecker (MinIO) | 지원됨 | 지원됨 |
| 외부 Kafka | Woodpecker (MinIO) | 지원됨 | 지원됨 |
| Woodpecker (MinIO) | 외부 Kafka | 지원됨 | 지원됨 |
| Kafka | Woodpecker (로컬) | 지원되지만 권장되지 않음 (모든 포드에 공유 파일 시스템이 필요함) | 지원되지 않음 |