Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/
MongoDB Mongosync
/

Sincronizar clusters fragmentados

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.

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 .

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 :

  1. Verificar a configuração do cluster

  2. Determinar os IDs do fragmento

  3. Conectar as instâncias

1

A partir do mongosync 1.1, você pode sincronizar entre clusters com diferentes números de shards. No entanto, se você quiser reverter a sincronização, o cluster de origem e o cluster de destino deverão ter o mesmo número de shards.

2

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 })
}
]
3

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 mongos no cluster de origem.

  • Conecta-se a instâncias mongos no 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.

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 .

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 .

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 .

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 .

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.

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.

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 mongosync e 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âncias mongosync e veja se o campo state de cada resposta contém o valor COMMITTED.

  • 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.

Voltar

Réplica definida para cluster fragmentado

Nesta página