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 origemMQ de destinoHelmOperador Milvus
Pulsar integradoWoodpecker (MinIO)CompatívelCompatível
Pulsar externoWoodpecker (MinIO)CompatívelCompatível
Woodpecker (MinIO)Pulsar externoCompatívelCompatível
PulsarWoodpecker (local)Compatível, mas não recomendado (todos os pods necessitam de um sistema de ficheiros partilhado)Não suportado