Alternar entre o Pulsar e o Woodpecker
Esta página descreve como alternar a fila de mensagens (MQ) de um cluster Milvus entre o Pulsar (integrado ou externo) e o Woodpecker (backend MinIO), em ambas as direções. Para conhecer o fluxo de trabalho geral e os pré-requisitos, consulte Alternar fila de mensagens.
Pré-requisito: A funcionalidade «Alternar MQ» está disponível no Milvus 3.0 e versões posteriores. Atualize a sua instância do Milvus para o Milvus 3.0 ou posterior antes de começar — a funcionalidade não está disponível em versões anteriores.
A troca da fila de mensagens é uma operação de alto risco. Escolha a secção que corresponde ao seu método de implementação — «Com o Helm» ou «Com o Milvus Operator» — e siga-a do início ao fim. Não misture comandos do Helm com os do Operator.
Com o Helm
Mudar do Pulsar para o Woodpecker (Helm)
Passo 1: Verifique se a instância do Milvus está em execução. Certifique-se de que o seu cluster do Milvus está a funcionar corretamente — por exemplo, criando uma coleção de teste, inserindo dados e executando uma consulta.
Passo 2: Execute a mudança de MQ. Exponha a interface de gestão do MixCoord e, em seguida, chame a API de mudança:
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
Noutro terminal:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "woodpecker"}'
Passo 3: Verifique se a mudança foi concluída.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Uma mudança bem-sucedida regista « [mqTypeValue=woodpecker] ».
Passo 4: (Opcional) Parar o Pulsar e limpar. Para o Pulsar integrado, desative o Pulsar e ative o Woodpecker; em seguida, elimine os PVCs do Pulsar:
helm upgrade my-release zilliztech/milvus \
--set image.all.tag=v3.0.1 \
--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> ...
Para o Pulsar externo, limpe os tópicos do Milvus na instância externa do Pulsar. Os tópicos do Milvus seguem o formato <cluster_prefix>-dml_<seqNo>_<TimeTick><Version> (por exemplo, by-dev-rootcoord-dml_10_464633776992639586v0).
Se pretender voltar a utilizar o Pulsar mais tarde, limpe primeiro os dados/tópicos para evitar conflitos. Devido às limitações do gráfico Helm, não é atualmente possível voltar a utilizar uma instância integrada do Pulsar.
Mudar do Woodpecker para o Pulsar (Helm)
Passo 1: Verifique se a instância do Milvus está em execução.
Passo 2: Configure a ligação ao Pulsar de destino e reinicie o Milvus. A mudança requer que o Milvus já conheça a ligação ao Pulsar; por isso, introduza-a no ficheiro « user.yaml » através de extraConfigFiles e aplique com helm upgrade (o que reinicia os pods). O comando « streaming.enabled=true » é necessário para a funcionalidade «Switch MQ».
# 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
Aguarde até que todos os pods estejam prontos e, em seguida, confirme se a configuração de acesso ao Pulsar foi incorporada na configuração do Milvus.
Passo 3: Execute a mudança para o MQ.
Certifique-se de que o Pulsar de destino não contém tópicos do Milvus de uma configuração anterior. Se esta for a sua primeira transição para o Pulsar, ignore esta nota; caso contrário, elimine primeiro os tópicos residuais do Milvus com os mesmos nomes.
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
Noutro terminal:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "pulsar"}'
Passo 4: Verifique se a transição está concluída.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Uma transição bem-sucedida regista « [mqTypeValue=pulsar] ».
Passo 5: (Opcional) Limpe os dados do Woodpecker. Elimine os dados do Woodpecker no MinIO/S3 (na pasta <rootPath>/wp/..., normalmente files/wp/...) e os metadados do Woodpecker no etcd (etcdctl get woodpecker --prefix). Se pretender voltar a utilizar o Woodpecker mais tarde, elimine primeiro estes ficheiros.
Com o Milvus Operator
Mudar do Pulsar para o Woodpecker (Milvus Operator)
Passo 1: Verifique se a instância do Milvus está em execução.
Passo 2: Execute a mudança de MQ. O serviço MixCoord não está exposto, por isso execute a API de mudança a partir do interior do pod do 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"}'
Passo 3: Verifique se a mudança foi concluída.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Uma mudança bem-sucedida regista [mqTypeValue=woodpecker].
Passo 4: Atualize o tipo de MQ no Operator. Atualize a configuração gerida pelo Operator para que este não reverta a mudança. Crie 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
Passo 5: (Opcional) Parar o Pulsar e limpar. Para o Pulsar integrado, desinstale a versão do Pulsar e elimine os seus PVCs:
helm uninstall my-release-pulsar
kubectl get pvc | grep my-release-pulsar
kubectl delete pvc <pulsar-pvc-name> ...
Para o Pulsar externo, limpe os tópicos do Milvus (formato <cluster_prefix>-dml_<seqNo>_<TimeTick><Version>).
Se pretender voltar a utilizar o Pulsar mais tarde, limpe primeiro os dados/tópicos para evitar conflitos. Devido às limitações do gráfico Helm, não é atualmente possível voltar a uma instância do Pulsar integrada.
Mudar do Woodpecker para o Pulsar (Milvus Operator)
Passo 1: Verifique se a instância do Milvus está em execução.
Passo 2: Configure a ligação ao Pulsar de destino e reinicie o Milvus. Coloque a ligação ao Pulsar em spec.config (o Operator converte spec.config em user.yaml) e defina o tipo de MQ; ao aplicar o CR, os pods são atualizados com a nova configuração.
# 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
Aguarde até que todos os pods estejam prontos e, em seguida, confirme se a configuração de acesso ao Pulsar foi incorporada na configuração do Milvus.
Passo 3: Execute a mudança para o MQ.
Certifique-se de que o Pulsar de destino não contém tópicos do Milvus provenientes de uma configuração anterior. Se esta for a sua primeira transição para o Pulsar, ignore esta nota; caso contrário, elimine primeiro os tópicos residuais do Milvus com os mesmos nomes.
kubectl exec -it <mixcoord-pod> -- \
curl -X POST http://localhost:9091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "pulsar"}'
Passo 4: Verifique se a transição está concluída.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Uma transição bem-sucedida regista « [mqTypeValue=pulsar] ».
Passo 5: (Opcional) Limpe os dados do Woodpecker. Elimine os dados do Woodpecker no MinIO/S3 (em <rootPath>/wp/..., normalmente files/wp/...) e os metadados do Woodpecker no etcd (etcdctl get woodpecker --prefix). Se pretender voltar a utilizar o Woodpecker mais tarde, elimine primeiro estes ficheiros.
Cenários suportados
| MQ de origem | MQ de destino | Helm | Operador Milvus |
|---|---|---|---|
| Pulsar integrado | Woodpecker (MinIO) | Compatível | Compatível |
| Pulsar externo | Woodpecker (MinIO) | Compatível | Compatível |
| Woodpecker (MinIO) | Pulsar externo | Compatível | Compatível |
| Pulsar | Woodpecker (local) | Compatível, mas não recomendado (todos os pods necessitam de um sistema de ficheiros partilhado) | Não suportado |