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.
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
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.
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
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ânciasmongosync
e veja se o campostate
de 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
.