Se sua instância de origem do Milvus autogerenciada não tiver acesso público, implante um contêiner da ferramenta de migração de dados na máquina local ou em uma VPC da Alibaba Cloud para sincronizar os dados com segurança no Alibaba Cloud Milvus. O processo utiliza a imagem de contêiner taihao-executor, que permite a migração em lote de várias coleções com consistência e confiabilidade.
Limitações e requisitos de configuração
Preparativos pré-migração (obrigatórios)
-
Controle do status das operações
Tipo de cluster
Requisito
Descrição
Cluster de origem
Interrompa todas as operações de modificação de dados
Inclui escrita, exclusão e atualização. O cluster deve permanecer em estado somente leitura para evitar inconsistências durante a migração.
Cluster de destino
Pause todas as operações de dados
Abrange consultas, escritas, exclusões e atualizações. Mantenha o cluster indisponível para prevenir conflitos durante a migração.
-
Compatibilidade de versões
Requisito
Especificação
Versão do cluster de origem
Superior à 2.3.6 (≥ v2.3.7)
Versão do cluster de destino
Igual ou superior à versão do cluster de origem
Limites da tarefa de migração
-
Gerenciamento de tarefas
Limite de concorrência: Execute apenas uma tarefa de migração por vez.
-
Escopo dos dados
Limite de banco de dados: Cada tarefa migra coleções de apenas um banco de dados.
Limite de coleções: Cada tarefa aceita no máximo cinco coleções.
Tamanho total dos dados: A soma de entidades em todas as coleções não pode exceder 500 milhões.
-
Estado dos dados
Requisito da instância de origem: As coleções a migrar devem estar no estado carregado (loaded).
Requisito da instância de destino: A instância de destino deve estar vazia, sem entidades existentes.
Requisitos de rede
O contêiner precisa de acesso de rede às instâncias de origem e de destino do Alibaba Cloud Milvus. Para melhor desempenho, implante o contêiner na mesma VPC da instância de destino.
Procedimento
Etapa 1: Baixar a imagem de migração
docker pull registry.cn-hangzhou.aliyuncs.com/taihao-executor/taihao-executor:release_2.22.0-ali
Etapa 2: Iniciar e acessar o contêiner
-
Inicie o contêiner em modo desanexado.
docker run -d -it \ --name milvus-migration \ registry.cn-hangzhou.aliyuncs.com/taihao-executor/taihao-executor:release_2.22.0-ali \ /bin/bash -
Localize o ID do contêiner e acesse-o.
# Find the container docker ps # Enter the container (replace with your actual container ID) docker exec -it <container_id> bashExemplo:
docker exec -it 55ac98f3b054 bash
Etapa 3: Criar o arquivo de configuração migration.conf
No contêiner, crie o arquivo de configuração:
vi migration.conf
Modelo de configuração
env {
parallelism = 1 # Concurrency level. We recommend setting this to 1 initially.
job.mode = "BATCH" # Batch processing mode.
}
source {
Milvus {
url = "http://<source-instance-endpoint>:19530" # An internal endpoint is supported.
token = "<username>:<password>" # Example: root:Test123456@
database = "default" # The database to migrate from. Defaults to `default`.
collections = ["col_a", "col_b"] # A list of collections to migrate.
batch_size = 10000 # Entities to read per batch. Increase this for large collections.
}
}
sink {
Milvus {
url = "http://<target-Alibaba-Cloud-Milvus-endpoint>:19530"
token = "<target-instance-token>"
database = "default"
batch_size = 1000
enable_auto_id = false # Set to false to preserve auto-generated IDs from the source. Otherwise, set to true.
}
}
Observações
Para evitar falhas, carregue todas as coleções a migrar na memória com o método
load().Para migrar todas as coleções carregadas, omita o parâmetro
collectionsdo arquivo de configuração.Se o contêiner e a instância de destino estiverem na mesma região, use um endpoint interno para acelerar a transferência.
Etapa 4: Iniciar a tarefa de migração
Opção 1: Executar em modo local (máquina única)
nohup ./bin/seatunnel.sh --config ./migration.conf -m local > migration.log 2>&1 &
Personalizar parâmetros de memória (opcional)
Edite o arquivo config/jvm_client_options:
-Xms4g
-Xmx8g
Defina o tamanho da memória heap conforme os recursos da máquina para evitar erros de falta de memória (OOM).
Opção 2: Executar em modo cluster (recomendado para alto desempenho)
Use este modo para migrar grandes volumes de dados.
# Create a log directory
mkdir -p ./logs
# Start the cluster service
./bin/seatunnel-cluster.sh -d
# Submit the task
nohup ./bin/seatunnel.sh --config ./migration.conf > migration.log 2>&1 &
Etapa 5: Indexar e carregar coleção (opcional)
Após a migração, conecte-se ao cluster de destino com Attu ou um SDK e execute as etapas abaixo para cada coleção de destino:
-
Crie um índice.
milvus_client = milvus.prepare_index_params() index_params.add_index( field_name="vector", # Name of the vector field to be indexed index_type="HNSW", # Type of the index to create index_name="vector_index", # Name of the index to create metric_type="L2", # Metric type used to measure similarity params={ "M": 64, # Maximum number of neighbors each node can connect to in the graph "efConstruction": 100 # Number of candidate neighbors considered for connection during index construction } # Index building params ) milvus_client.create_index("collectionName", index_params) -
Carregue a coleção na memória.
milvus_client.load_collection()Crie um índice antes de carregar a coleção para habilitar a busca acelerada. Os principais parâmetros são:
Parâmetro
Como obter
url
Acesse o console do Alibaba Cloud Milvus. Na aba Security Configuration, visualize o endpoint público ou interno. Prefira o endpoint interno para melhor desempenho.
token
O formato é
username:password(ex.:root:YourPassword123@). No console do Alibaba Cloud Milvus, abra a aba Security Configuration e consulte a senha da conta root.database
O valor padrão é
default. Se usar o recurso de múltiplos bancos de dados, obtenha outros nomes chamando a APIlist_databases().Exemplo completo de configuração:
env { parallelism = 1 job.mode = "BATCH" } source { Milvus { url = "http://xx.xx.xx.xx:19530" token = "root:SourcePass123@" database = "default" collections = ["medium_articles"] batch_size = 10000 } } sink { Milvus { url = "http://proxy-bj.vpc.milvus.aliyuncs.com:19530" token = "root:TargetPass123@" database = "default" batch_size = 10000 enable_auto_id = false } }
Perguntas frequentes
P1: Por que recebo o erro "Collection not loaded" durante a migração?
R: Verifique se todas as coleções de origem foram carregadas na memória com o método .load().
P2: É possível migrar apenas campos específicos?
R: Não. A versão atual suporta apenas a migração de coleções inteiras. A filtragem de campos específicos não é suportada.
P3: Como monitorar o progresso da migração?
R: Acompanhe a migração verificando a saída no arquivo migration.log ou usando o Attu para observar a contagem de linhas na coleção de destino.