mongosync. Leia a documentação atual para obter orientações atualizadas sobre mongosync e instruções sobre como atualizar para a versão mais recente.Existem duas maneiras de sincronizar clusters fragmentados. Você pode usar uma instância mongosync ou várias instâncias mongosync. Para melhor desempenho com clusters grandes ou altamente carregados, use uma instância mongosync para cada shard no cluster de origem.
Importante
Quando o cluster de origem ou destino for um cluster fragmentado, você deve parar o balanceador em ambos os clusters e não executar os moveChunk comandos ou durante a migração.moveRange Para parar o balanceador, execute o balancerStop comando e aguarde a conclusão do comando.
Configurar uma única mongosync instância
Para configurar um único mongosync, siga asinstruções de conexão para que sua arquitetura de cluster se conecte à instância mongos em seu cluster.
Quando você conectar um único mongosync a um cluster fragmentado, não use a opção replicaSet nem a opção id.
O restante desta página aborda a sincronização de cluster para cluster usando várias instâncias mongosync .
Configurar múltiplas mongosync instâncias
O número de instâncias mongosync deve corresponder ao número de shards no cluster de origem. Você deve usar a mesma versão do mongosync entre todas as instâncias. Para uma origem de conjunto de réplicas, você só pode utilizar uma instância mongosync .
Ao configurar várias instâncias mongosync para sincronizar entre clusters fragmentados, você deve enviar comandos de ponto de conexão da API idênticos para cada instância mongosync .
Para configurar múltiplas instâncias do mongosync :
Determinar os IDs do fragmento
Para obter os IDs de fragmento, conecte-se ao cluster de origem mongos e execute o comando listShards.
db.adminCommand( { listShards: 1 } )
As informações estão na array shards .
shards: [ { _id: 'shard01', host: 'shard01/localhost:27501,localhost:27502,localhost:27503', state: 1, topologyTime: Timestamp({ t: 1656612236, i: 2 }) }, { _id: 'shard02', host: 'shard02/localhost:27504,localhost:27505,localhost:27506', state: 1, topologyTime: Timestamp({ t: 1656612240, i: 4 }) } ]
Conecte as mongosync instâncias de
Estas instruções usam uma string de conexão genérica. Para modificar a string de conexão da arquitetura de clusters, consulte os detalhes de conexão específicos da arquitetura.
Dica
Um único servidor host pode executar múltiplas instâncias do mongosync . Para melhorar o desempenho, execute mongosync em vários servidores host.
Execute a primeira instância mongosync :
mongosync \ --cluster0 "mongodb://user:password@cluster0host:27500" \ --cluster1 "mongodb://user:password@cluster1host:27500" \ --id shard01 --port 27601
Ao executar múltiplas instâncias do mongosync , o número de instâncias deve ser igual ao número de fragmentos. Cada instância mongosync deve ser iniciada com a opção --id ou a configuração id para especificar o fragmento que ela replica.
Execute uma nova instância do mongosync para cada shard no cluster de origem. Edite os campos --id e --port para cada instância mongosync adicional.
mongosync \ --cluster0 "mongodb://user:password@cluster0host:27500" \ --cluster1 "mongodb://user:password@cluster1host:27500" \ --id shard02 --port 27602
A string de conexão para as opções --cluster0 e --cluster1 deve ponto para instâncias mongos . No exemplo, eles usam a mesma instância mongos .
Cada instância mongosync :
Conecta-se a instâncias
mongosno cluster de origem.Conecta-se a instâncias
mongosno cluster de destino.Replica um único shard do cluster de origem, identificado pela opção
--id.Especifica uma porta exclusiva para usar durante a sincronização. Considere a possibilidade de designar uma faixa de portas para simplificar as operações de script do Mongosync.
Iniciar mongosync múltiplas instâncias
Use curl ou outro cliente HTTP para emitir o comando de inicialização para cada uma das instâncias mongosync .
curl mongosync01Host:27601/api/v1/start -XPOST --data \ '{ "source": "cluster0", "destination": "cluster1", \ "reversible": false, "enableUserWriteBlocking": false }' curl mongosync02Host:27602/api/v1/start -XPOST --data \ '{ "source": "cluster0", "destination": "cluster1", \ "reversible": false, "enableUserWriteBlocking": false }'
As opções de comando start devem ser as mesmas para todas as instâncias mongosync .
Verificar progresso
Para revisar o progresso da sincronização de um fragmento específico, use curl ou outro cliente HTTP para emitir o comando de progresso para a instância mongosync que sincroniza esse fragmento.
curl mongosync02Host:27602/api/v1/progress -XGET
Este comando verifica o progresso da instância do mongosync que está sendo executada no mongosync02Host e usando o port 27602 para sincronização. Para verificar o progresso em outros fragmentos, atualize o host e o número da porta e, em seguida, repita a chamada de API para cada instância mongosync .
Pausar uma mongosync instância do
O comando de pausa interromperá temporariamente o processo de sincronização em um único fragmento. Ele não pausa nenhuma outra instância mongosync que possa estar em execução. Use curl ou outro cliente HTTP para emitir o comando pause para uma instância mongosync .
curl mongosync01Host:27601/api/v1/pause -XPOST --data '{}'
Este comando pausa a instância do mongosync que está executando no mongosync01Host e utilizando o port 27601 para sincronização. Para pausar a sincronização em outros fragmentos, atualize o host e o número da porta e, em seguida, repita a chamada de API para cada instância do mongosync .
Retomar sincronização
Se uma ou mais instâncias mongosync estiverem pausadas, você poderá usar o comando retomar para retomar a sincronização. Execute um comando resume separado em cada instância mongosync pausada para continuar sincronizando.
Use curl ou outro cliente HTTP para emitir o comando resume para cada instância mongosync .
curl mongosync01Host:27601/api/v1/resume -XPOST --data '{}'
Este comando retoma a sincronização na instância do mongosync que está sendo executada no mongosync01Host e usando o port 27601. Para retomar a sincronização em outros fragmentos, atualize o host e o número da porta e, em seguida, repita a chamada de API para cada instância mongosync .
Commit sincronização a partir de múltiplas mongosync instâncias
Quando você deseja concluir a sincronização, emita o comando progresso e verifique os valores para canCommit e lagTimeSeconds.
Para minimizar o bloqueio de gravação no cluster de origem, você só deve executar o comando commit quando o valor lagTimeSeconds for pequeno o suficiente para seu aplicativo.
Se o valor lagTimeSeconds for pequeno o suficiente e canCommit for true, emita o comando commit para confirmar a sincronização. Repita o processo em todas as instâncias do mongosync .
A operação commit está bloqueando. O comando commit não retornará até que commit tenha sido chamado em cada instância mongosync .
// Check progress curl mongosync01Host:27601/api/v1/progress -XGET // Commit curl mongosync01Host:27601/api/v1/commit -XPOST --data '{}'
Esses comandos verificam somente o progresso e confirmam a sincronização para a instância do mongosync que está sendo executada no mongosync01Host e utilizando o port 27601. Para sincronizar todos os fragmentos, faça chamadas adicionais para progress e commit em quaisquer outras instâncias mongosync que possam estar em execução.
Verificação de dados
Antes de transferir a carga do seu aplicativo do cluster de origem para o destino, verifique seus dados para garantir que a sincronização foi bem-sucedida.
Para obter mais informações, consulte Verificar a fonte de dados.
Inverter a direção de sincronização
Observação
Para obter um tutorial detalhado sobre como reverter a direção de sincronização, consulte Inverter direção de sincronização.
Para reverter a sincronização para que o cluster de destino original atue como cluster de origem:
Se ainda não tiver feito isso, emita o comando commit para cada instância do
mongosynce aguarde até que todos os commits terminem. Para verificar se o processo de sincronização foi confirmado, emita o comando progresso para todas as instânciasmongosynce veja se o campostatede cada resposta contém o valorCOMMITTED.Emitir o comando reverso para cada instância do
mongosync.
A operação reverse está bloqueando. O comando reverse não retornará até que reverse tenha sido chamado em cada instância mongosync .
curl mongosync01Host:27601/api/v1/reverse -XPOST --data '{}'
Este comando reverte a sincronização na instância do mongosync que está sendo executada no mongosync01Host e utilizando o port
27601. Faça chamadas adicionais para reverse em quaisquer outras instâncias mongosync que possam estar em execução.
Observação
A sincronização reversa só é possível se reversible e enableUserWriteBlocking estiverem definidos como true quando a API inicial iniciar mongosync.