Descrição
Inverte a direção de uma operação de sincronização confirmada.
Por exemplo:
Você tem uma operação de sincronização
COMMITTED
.cluster0
é a origem ecluster1
é o destino.Após a operação de sincronização ser
COMMITTED
, novas gravações ocorrerão somente no cluster de destino. O cluster de origem não aceitará novas gravações.
Nesse cenário, você pode usar o endpoint reverse
para sincronizar gravações de cluster1
para cluster0
, incluindo quaisquer gravações que tenham ocorrido em cluster1
depois que mongosync
atingiu canWrite=true
. Para verificar o status canWrite
durante a sincronização, use o endpoint /progress .
Para obter mais informações e um tutorial sobre como usar o reverse
endpoint, consulte Direção de sincronização inversa.
Requisitos
Para usar o ponto de extremidade reverse
:
mongosync
deve ser configurado quando a sincronização inicial começar. A chamada para o ponto de conexão da API /start deve ser definida:reversible
paratrue
enableUserWriteBlocking
para"sourceAndDestination"
.
Observação
O bloqueio duplo de gravação é um pré-requisito para a execução reverse
de.
Você não pode atualizar essas opções após o início da sincronização.
mongosync
deve estar no estadoCOMMITTED
.O oplog do cluster de destino não deve ser acumulado entre
mongosync
, alcançarcanWrite=true
e receber a solicitação/reverse
.
Aviso
Os índices únicos no cluster de origem não devem usar o formato legado.
Para validar se os índices de collection no cluster de origem usam a formatação adequada, consulte Validar índices únicos.
Os clusters de origem e destino devem ter o mesmo número de shards. Não é possível fazer a sincronização reversa quando os clusters têm topologias ou versões principais diferentes.
O usuário especificado na string de conexão
mongosync
deve ter as permissões necessárias nos clusters de origem e destino. As permissões variam dependendo do seu ambiente e se você deseja modificar as configurações de bloqueio de escrita ou usar a sincronização reversa.
Observação
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 obter mais informações, consulte Reverter vários Mongosyncs.
Validar índices únicos
Para reverter a direção, mongosync
exige que todos os índices únicos no cluster de origem (exceto _id
) não tenham chaves de índice único legado.
Antes de começar
Você pode garantir que os índices únicos não_id
usem a formatação correta no cluster de origem com o estágio de agregação $collStats
. Para executar esse pipeline de agregação em sua coleção, copie e cole o código de exemplo , substituindo <collection>
pelo nome da coleção e <field_name>
pelo nome do campo indexado. Você deve executar isso em todos os nós, para todas as collections que possuem índices únicos. Observe que somente os índices únicos não_id
precisam ter formatVersion 13
ou 14
.
db.<collection>.aggregate( [ { $collStats: { storageStats: { } } }, { $project: { "storageStats.indexDetails.<field_name>.metadata.formatVersion": 1 } } ] )
[ { storageStats: { indexDetails: { <field_name>: { metadata: { formatVersion: 14 } } } } } ]
É garantido que índices únicos com formatVersion 13
ou 14
não tenham chaves legado .
Se você tiver índices únicos de um formatVersion diferente, você também poderá usar o métododb.collection.validate()
com full = false
para confirmar se houver chaves de índice legado. Você deve executar isso em todos os nós de todas as collections com índices únicos. validate()
retorna um aviso se forem detectadas chaves de índice de formato legado .
Passos
Para atualizar a versão de formato dos índices para compatibilidade com mongosync
, você deve ressincronizar todos os nós no cluster de origem original. Para sincronizar todos os nós novamente:
Sincronize todos os secundários, um por um.
Para obter um tutorial sobre a ressincronização de nós, consulte Sincronizar novamente um membro de um conjunto de réplicas.
Solicitar
POST /api/v1/reverse
Parâmetros do corpo da solicitação
Este endpoint não usa parâmetros do corpo da solicitação HTTP. No entanto, você deve especificar a opção --data
com um objeto vazio { }
.
Resposta
Campo | Tipo | Descrição |
---|---|---|
| booleano | Quando a solicitação é bem-sucedida, esse valor é |
| string | Se ocorreu um erro, indica o nome do erro. Este campo é omitido da resposta quando |
| string | Descrição detalhada do erro que ocorreu. Este campo é omitido da resposta quando |
Exemplo
O exemplo a seguir reverte a direção de uma operação de sincronização confirmada.
Solicitar
curl localhost:27182/api/v1/reverse -XPOST --data '{ }'
Resposta
{"success":true}
Comportamento
O endpoint reverse
inicia o estado REVERSING
. mongosync
troca os clusters de origem e destino e retoma a aplicação de eventos de alteração.
Se a sincronização reverse
for bem-sucedida, mongosync
entrará no estado RUNNING
. A sincronização continua na direção inversa do tarefa de sincronização original. Você não precisa reiniciar todo o processo de sincronização para copiar os dados originais.
Para visualizar a direção de mapeamento para a sincronização dos clusters de origem e destino, use o endpoint de progresso e verifique o objeto directionMapping
.
Verificador incorporado
O verificador embarcado é habilitado por padrão para migrações de conjunto de réplicas.
Proteção de endpoint
mongosync
não protege o endpoint reverse
. No entanto, por padrão, a API é vinculada apenas ao host local e não aceita chamadas de outras fontes. Além disso, a chamada reverse
não expõe credenciais de conexão ou dados de usuário.
Limitações
O endpoint reverse
não suporta:
migrações de 6.0 clusters de origem pré-.