Página inicial do Docs → Desenvolver aplicações → Manual do MongoDB
movePrimary
Nesta página
movePrimary
Em um cluster fragmentado, o
movePrimary
reatribui o fragmento primário que contém todas as coleções não fragmentadas no banco de dados.movePrimary
primeiro altera o primary shard 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
test
parashard0001
: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.
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 reconhecimento de data center e de fatores como integridade da rede ou recursos da máquina. As operações de leitura ou gravação emitidas no reconhecimento de data center durante a migração podem resultar em comportamento inesperado, incluindo possível falha da operação de migração ou perda de dados.
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.
Como usar movePrimary
para mover collection não fragmentadas
Para MongoDB 4.2 e anterior, se estiver usando o comando movePrimary
em um banco de dados que contém uma coleção não fragmentada , você deverá executar as seguintes etapas adicionais.
Observação
O MongoDB 4.4 não exige estas etapas adicionais ao mover bancos de dados que contêm collections não compartilhadas.
Para MongoDB 4.2, você deve:
Reiniciar todas as
mongos
instâncias e todos osmongod
membros do fragmento (incluindo os membros secundários);Utilize o comando
flushRouterConfig
em todas as instâncias domongos
e todos os membros do fragmento domongod
(incluindo os membros secundários) antes de ler ou escrever quaisquer dados em quaisquer coleções não fragmentadas que foram movidas.
Para MongoDB 4.0 e anterior, você deve:
Reiniciar todas as instâncias do
mongos
;Use o comando
flushRouterConfig
em todas as instâncias domongos
antes de ler ou gravar quaisquer dados em coleçõss fragmentadas que foram movidas.
Estas etapas garantem que todos os nós do cluster atualizem seu cache de metadados, que inclui o local do fragmento primário. Caso contrário, você poderá perder dados nas leituras e não gravar dados no fragmento correto. Para recuperar, você deve intervir manualmente.
Conflitos de namespace impedem migração
movePrimary
falhará se o fragmento de destino contiver um collection namespace conflitante. Por exemplo:
Um administrador emite
movePrimary
para 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
hr
enquantomovePrimary
está movendo essa collection. A operação de gravação cria a coleção no fragmento primário original.Um administrador emite posteriormente
movePrimary
para restaurar o fragmento primário original para o banco de dadoshr
.movePrimary
falha 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.