Este tutorial descreve como converter um cluster fragmentado em um conjunto de réplicas não fragmentadas. Para converter um conjunto de réplicas em um cluster fragmentado, consulte Converter um conjunto de réplicas autogerenciado em um cluster fragmentado. Consulte a documentação de fragmentação para obter mais informações sobre clusters fragmentados.
Antes de começar
Compatibilidade de versão
As etapas deste tutorial exigem o MongoDB 6.0 ou posterior.
Autorização
Os comandosfsyncefsyncUnlockexigem a ação de autorizaçãofsync, que pode ser atribuída por meio da funçãohostManagerou de uma função personalizada.
Agendar a conversão de cluster
Converta o cluster quando migrações de chunk, refragmentação e transformações de esquema não forem normalmente realizadas.
Desativar o Balanceador e Bloquear o Cluster
Para desabilitar o balanceador e bloqueio o cluster:
Conecte
mongosho a umamongosinstância do no cluster fragmentado.Para parar o balanceador, execute:
sh.stopBalancer() Para verificar se o balanceador está desativado, execute o seguinte comando e verifique se a saída é
false:sh.getBalancerState() Para bloqueio o cluster fragmentado, que impede gravações do banco de dados , execute:
db.getSiblingDB( "admin" ).fsyncLock() Para confirmar a bloqueio, execute:
db.getSiblingDB( "admin" ).aggregate( [ { $currentOp: { } }, { $facet: { "locked": [ { $match: { $and: [ { fsyncLock: { $exists: true } } ] } } ], "unlocked": [ { $match: { fsyncLock: { $exists: false } } } ] } }, { $project: { "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] }, "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] } } } ] ) Certifique-se de que a saída mostre que
fsyncLockedétrue, o que significa que o cluster está bloqueado:[ { fsyncLocked: true }, { fsyncUnlocked: false } ]
Converter um cluster com um único fragmento em um conjunto de réplicas
No caso de um cluster fragmentado com apenas um fragmento, esse fragmento contém o conjunto de dados completo. Use o procedimento a seguir para converter esse cluster em um conjunto de réplicas não fragmentadas:
Reconfigure o aplicativo para se conectar ao nó principal do conjunto de réplicas que hospeda o único fragmento em que o sistema será o novo conjunto de réplicas.
Remova a opção
--shardsvrdo seumongod.Dica
A alteração da opção
--shardsvralterará a porta em que omongodescuta conexões de entrada.
O cluster de fragmento único agora é um conjunto de réplicas não fragmentadas que aceitará operações de leitura e gravação no conjunto de dados.
Converter um cluster fragmentado em um conjunto de réplicas
Use o procedimento a seguir para fazer a transição de um cluster fragmentado com mais de um fragmento para um conjunto de réplicas totalmente novo.
Com o cluster fragmentado bloqueado e o balanceador desabilitado, implementeum novo conjunto de réplicas além do seu cluster fragmentado. O conjunto de réplicas deve ter capacidade suficiente para manter todos os arquivos de dados de todos os shards atuais combinados. Não configure o aplicação para se conectar ao novo conjunto de réplicas até que a transferência de dados seja concluída.
Reconfigure seu aplicação ou interrompa todas as instâncias
mongos. Se você interromper todas as instâncias do, os aplicativos não poderão ler a partir do banco demongosdados. Se você interromper todas as instâncias do,mongosmongosinicie uma instância do temporária que os aplicativos não podem acessar para o procedimento de migração de dados.Use o mongodump e o mongorestore para migrar os dados da instância
mongospara o novo conjunto de réplicas.Exclua o banco de dados
configao executarmongorestore. Use a opção como mostrado neste--nsExcludeexemplo:mongorestore --nsExclude="config.*" <connection-string> /data/backup Observação
Nem todas as coleções em todos os bancos de dados são necessariamente fragmentadas. Não migre apenas a coleção fragmentada. Certifique-se de que todos os bancos de dados e todas as coleções sejam migrados corretamente.
Reconfigure o aplicativo para utilizar o conjunto de réplicas não fragmentadas em vez da instância
mongos.
O aplicativo agora usará o conjunto de réplicas não fragmentadas para leituras e gravações. Agora você pode desativar a infraestrutura de cluster fragmentada não utilizada.
Próximos passos
Depois de converter o cluster fragmentado em um conjunto de réplicas, execute as seguintes etapas para desbloquear o cluster:
Para desbloquear o cluster e permitir que as gravações do banco de dados sejam retomadas, execute:
db.getSiblingDB( "admin" ).fsyncLock() Para confirmar o desbloqueio, execute:
db.getSiblingDB("admin").aggregate( [ { $currentOp: { } }, { $facet: { "locked": [ { $match: { $and: [ { fsyncLock: { $exists: true } } ] } } ], "unlocked": [ { $match: { fsyncLock: { $exists: false } } } ] } }, { $project: { "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] }, "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] } } } ] ) Certifique-se de que a saída mostre que
fsyncLockedéfalse, o que significa que o cluster está desbloqueado:[ { fsyncLocked: false }, { fsyncUnlocked: true } ]