movePrimaryEm um cluster fragmentado, reatribui
movePrimaryo fragmento primário que contém todas as coleções não fragmentadas no banco de dados.movePrimaryprimeiro altera o fragmento primário nos metadados do cluster e, em seguida, migra todas as collections não fragmentadas para o shard especificado. Use o comando com o seguinte formulário:db.adminCommand( { movePrimary: <databaseName>, to: <newPrimaryShard> } ) Por exemplo, o seguinte comando move o fragmento primário de
testparashard0001:db.adminCommand( { movePrimary : "test", to : "shard0001" } ) Quando o comando retorna, o local do fragmento primário do banco de dados mudou para o fragmento especificado. Para desativar totalmente um fragmento, use o comando
removeShard.movePrimaryé um comando administrativo que está disponível somente para instâncias domongos.Aviso
Depois de iniciar o
movePrimary, não execute nenhuma operação de leitura ou gravação em nenhuma coleção não fragmentada nesse banco de dados até que o comando seja concluído. As operações de leitura ou escrita emitidas para essas collections durante a migração podem resultar em comportamento inesperado, incluindo possível falha da operação de migração ou perda de dados.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Importante
Este comando não é suportado em instâncias sem servidor. Para obter mais informações, consulte Comandos não suportados.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Considerações
mongos usa "majority" preocupação de escrita para movePrimary.
Edição movePrimary durante uma janela de manutenção
movePrimary pode levar um tempo significativo para ser concluído, dependendo do tamanho do banco de dados e de fatores como integridade da rede ou recursos da máquina. Durante a migração, as tentativas de gravar ou executar quaisquer operações de DDL nas collections não fragmentadas no banco de dados que está sendo movido falham com o erro: "movePrimary is in progress".
Considere agendar uma janela de manutenção durante a qual os aplicativos interrompam todas as leituras e gravações no cluster. A emissão movePrimary durante o tempo de inatividade planejado reduz o risco de encontrar um comportamento indefinido devido à intercalação de leituras ou gravações nas collections não fragmentadas no banco de dados.
Conflitos de namespace impedem migração
movePrimary falhará se o fragmento de destino contiver um collection namespace conflitante. Por exemplo:
Um administrador emite
movePrimarypara alterar o fragmento primário do reconhecimento de data centerhr.Um usuário ou aplicação emite uma operação de gravação em uma collection não fragmentada em
hrenquantomovePrimaryestá movendo essa collection. A operação de gravação cria a coleção no fragmento primário original.Um administrador emite posteriormente
movePrimarypara restaurar o fragmento primário original para o banco de dadoshr.movePrimaryfalha devido ao namespace conflitante deixado para trás pela operação de gravação intercalada.
O fragmento de destino deve reconstruir os índices
Como parte da operação movePrimary , o fragmento de destino deve reconstruir os índices nas coleções migradas depois de se tornar o fragmento primário. Isso pode exigir uma quantidade significativa de tempo, dependendo do número de índices por coleção e da quantidade de dados para indexar.
Consulte Construções de Índices em collection Preenchidas para obter mais informações sobre o processo de construção de índices.
Informações adicionais
Consulte Remover fragmentos de um cluster fragmentado existente para obter um procedimento completo.