Menu Docs
Página inicial do Docs
/
Sincronização de Cluster-to-Cluster do MongoDB
/

Sincronizar clusters fragmentados

Nesta página

  • Configurar uma única instância mongosync
  • Configurar múltiplas instâncias do mongosync
  • Iniciar múltiplas instâncias mongosync
  • Verificar progresso
  • Pausar uma instância mongosync
  • Retomar sincronização
  • Commit sincronização de múltiplas instâncias do mongosync
  • Verificação de dados
  • Inverter a direção de sincronização

Existem duas maneiras de sincronizar clusters fragmentados. Você pode usar uma instância mongosync ou várias instâncias mongosync . Para obter o melhor desempenho com clusters grandes ou muito 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. Para parar o balanceador,moveRange balancerStop execute o 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 designar um intervalo de portas para simplificar a criação de scripts de operações de Cluster-to-Cluster Sync.

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.

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

Sincronizar um conjunto de réplicas com um cluster fragmentado