Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/ / /

Migrar com mongomirror

Nesta página

  • Pré-requisitos
  • Caminho de atualização
  • Download mongomirror
  • mongomirror Processo
  • EXECUTAR mongomirror
  • Mudar para Atlas
  • Monitoramento
  • Desempenho
  • Sintaxe de Comando, Opções e Exemplos
  • Solução de problemas

mongomirror é uma ferramenta para migrar manualmente dados de um replica set existente do MongoDB para um conjunto de réplicas do MongoDB Atlas. mongomirror não exige que você desligue o conjunto de réplicas ou aplicativos existentes e não importa dados de usuário ou função nem copia o banco de dados config.

Use mongomirror para:

  • Executando uma migração única de um conjunto de dados para um cluster Atlas do MongoDB a partir de uma implantação do MongoDB hospedada fora do MongoDB Atlas.

  • Executando uma migração única de um conjunto de dados de um Atlas cluster para outro Atlas cluster.

Consulte também Escolhendo uma Ferramenta de Importação e Migração de Dados.

  • O MongoDB deployment de origem deve ser um conjunto de réplicas. Se a origem for um MongoDB deployment standalone, antes de executar mongomirror, converta o standalone em um conjunto de réplicas.

  • O conjunto de réplicas de origem deve executar MongoDB versão 2.6 ou superior.

  • O conjunto de réplicas MongoDB de origem não pode ser um cluster M0 gratuito ou um cluster M2/M5 compartilhado.

  • Não altere o sinalizador featureCompatibilityVersion em nenhum momento durante o procedimento.

  • Quando você migrar do MongoDB 4.4 ou anterior para um cluster do Atlas que executa o MongoDB 5.0 ou posterior, descarte todos os índices geoHaystack de suas coleções.

  • mongomirror não é compatível com índices TTL. Elimine os índices TTL existentes e os reconstrua quando o processo de migração for concluído. Se não quiser eliminar um índice existente por ele ser importante para o desempenho da query, entre em contato com o suporte para obter opções alternativas.

  • Não faça nenhuma alteração de namespace durante o processo de migração, por exemplo, utilizar o comando renameCollection ou executar um pipeline de agregação que inclua o estágio de agregação do $out.

  • Você não pode usar o comando renameCollection ou o estágio de agregação $out como parte da initial sync, que é executada como parte do processo mongomirror .

  • Você não deve reiniciar o primary durante o estágio initial sync da migração.

  • Se a implementação do MongoDB contiver índices com chaves que excedam o Limite de chave de índice, antes de iniciar o procedimento de migração em tempo real, modifique os índices para que eles não contenham chaves de tamanho grande.

O mongomirror deve ter acesso de rede ao conjunto de réplicas de origem. Se o conjunto de réplicas de origem exigir autenticação, você deverá incluir credenciais de usuário ao executar o mongomirror. Você deve especificar um usuário do banco de dados com, no mínimo, os seguintes privilégios:

Se um usuário assim não existir, crie o usuário em seu conjunto de réplicas MongoDB de origem. Diferentes versões de servidor MongoDB têm diferentes roles integradas. Selecione uma role integrada com base na sua versão do servidor MongoDB e execute os comandos apropriados em mongosh:

  • Para agrupamentos de origem, um usuário deve ter as funções readAnyDatabase, clusterMonitor e backup.

    Para verificar se o usuário do banco de dados que executará o processo de migração em produção tem essas funções, execute o comando db.getUser() no banco de dados admin.

    use admin
    db.getUser("admin")
    {
    "_id" : "admin.admin",
    "user" : "admin",
    "db" : "admin",
    "roles" : [
    {
    "role" : "backup",
    "db" : "admin"
    },
    {
    "role" : "clusterMonitor",
    "db" : "admin"
    }
    {
    "role" : "readAnyDatabase",
    "db" : "admin"
    }
    ]
    } ...

    Além disso, o usuário do banco de dados do cluster de origem deve ter a função de ler o oplog no banco de dados admin. Para saber mais, consulte Oplog Access.

  • Nos clusters de origem que executam o MongoDB 3.4, o usuário deve ter, no mínimo, as funções clusterMonitor e readAnyDatabase. Por exemplo:

    use admin
    db.createUser(
    {
    user: "mySourceUser",
    pwd: "mySourceP@$$word",
    roles: [ "clusterMonitor", "readAnyDatabase" ]
    }
    )
  • Em clusters de origem que executam o MongoDB 3.2, um usuário deve ter, no mínimo, ambas as funções de clusterManager e readAnyDatabase, bem como acesso de leitura no banco de dados local. Isso requer uma função personalizada, que você pode criar com os seguintes comandos:

    use admin
    db.createRole(
    {
    role: "migrate",
    privileges: [
    { resource: { db: "local", collection: "" }, actions: [ "find" ] }
    ],
    roles: ["readAnyDatabase", "clusterManager"]
    }
    )
    db.createUser(
    {
    user: "mySourceUser",
    pwd: "mySourceP@$$word",
    roles: [ "migrate" ]
    }
    )
  • Para clusters de origem que executam o MongoDB 2.6 ou 3.0, o usuário deve ter, no mínimo, a função readAnyDatabase. Por exemplo:

    use admin
    db.createUser(
    {
    user: "mySourceUser",
    pwd: "mySourceP@$$word",
    roles: [ "readAnyDatabase" ]
    }
    )

O sistema do Atlas de destino:

  • Não pode ser um cluster gratuito M0 , M2ou M5 cluster compartilhado.

  • Não pode ser uma instância sem servidor.

  • Deve ser um conjunto de réplicas.

  • Deve ter a versão que é igual ou posterior à versão MongoDB do cluster de origem. Consulte Caminho de atualização.

  • Não deve conter nenhum namespace que se sobreponha ao cluster de origem. Se o mongomirror detectar sobreposição de namespaces no cluster de destino, ocorrerá uma falha antes de iniciar o processo. Se o cluster de destino tiver namespaces sobrepostos, exclua todos os dados do cluster de destino com --drop ou liste os namespaces a serem importados do cluster de origem com --includeNamespace.

  • Deve incluir na sua lista de acesso IP:

    • O endereço IP público do servidor no qual o mongomirror está sendo executado, ou

    • Se configurado para emparelhamento da VPC, o bloco CIDR da VPC do peer (ou um subconjunto) ou o Grupo de Segurança do peer VPC.

    Observação

    Para localizar o endereço IP público para qualquer nó em seu cluster, utilize a ferramenta nslookup a partir da linha de comando. Para saber mais, consulte Os IPs públicos do Atlas cluster mudam?.

mongomirror deve ter acesso de rede ao cluster de destino.

Você deve especificar um usuário do banco de dados com o role Atlas admin para executar o mongomirror. Para saber mais, consulte Adicionar usuários do banco de dados.

mongomirror permite os seguintes caminhos de migração.

Importante

Você não pode usar mongomirror para migrar de um conjunto de réplicas de origem 6.0.x ou posterior para um conjunto de réplicas de destino 6.0.x ou posterior. Para migrar conjuntos de réplica 6.0.x ou posterior, atualize o MongoDB para pelo menos 6.0.13 e use este procedimento de migração live.

Conjunto de réplicas de origem
Versão do MongoDB
Conjunto de réplicas do Atlas de destino
Versão do MongoDB
5.0
4.4, 5.0
4.4
4.4, 5.0
4. 2
4.4, 5.0
4. 0
4.4, 5.0
3. 6
4.4, 5.0
3. 4
4.4, 5.0
3. 2
4.4, 5.0
3. 0
4.4, 5.0
2.6
4.4, 5.0

Observação

Para fazer downgrade de 5.0 a 4.4, a origem FCV deve corresponder ao destino.

Observação

No macOS 64-bit, um alerta de segurança aparece quando você tenta abrir o arquivo mongomirror pela primeira vez depois de baixá-lo. Para continuar, consulte Abrir um aplicativo substituindo as configurações de segurança.

Quando você inicia o mongomirror, ele:

  1. Conecta-se ao Atlas por TLS/SSL.

  2. Executa uma sincronização inicial, copiando collections do conjunto de réplicas MongoDB existente definido para o cluster de destino no Atlas.

  3. Após a sincronização inicial, executa continuamente o oplog do conjunto de réplicas para alterações de entrada e as reproduz no cluster de destino no Atlas. mongomirror não copia o banco de dados do config. A partir da versão 0.9.0, mongomirror usa a compactação de cabo se você habilitá-la no cluster de origem ou de destino e usar --compressors para especificar quais bibliotecas de compactação permitir.

    Observação

    A partir da versão 0.5.0, mongomirror cria todos os índices no cluster de destino em primeiro plano, independentemente de como os índices foram criados no cluster de origem. As compilações de índice em primeiro plano bloqueiam todas as outras operações no banco de dados. Para saber mais, consulte Operações de Compilação de Índice em uma Coleção Preenchida.

Uma vez iniciado, o mongomirror é executado continuamente até você desligá-lo:

1

Se o conjunto de réplica de origem exigir autenticação, você deverá incluir credenciais de usuário ao executar o mongomirror. Para saber os requisitos, consulte Acesso necessário no conjunto de réplicas de origem.

Anote o nome de usuário e senha desse usuário, pois você deve especificar essas credenciais ao executar o mongomirror.

2
  1. Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.

  2. Se ainda não estiver exibido, selecione seu projeto no menu Projects na barra de navegação.

  3. Na barra lateral, clique em Database Access sob o título Security .

3

Você deve especificar um usuário do banco de dados com o role Atlas admin para executar o mongomirror. Consulte Adicionar usuários do banco de dados para obter a documentação da criação de um usuário do banco de dados.

Se esse usuário não existir, crie o usuário:

  1. Se não estiver exibido, clique na aba Database Users .

  2. Clique em Add New Database User.

  3. Adicione um usuário Atlas admin .

Anote o nome de usuário e senha selecionados para o novo usuário, pois você deve especificar estas credenciais ao executar o mongomirror.

4

Se o host onde você executará o mongomirror não estiver na Lista de Acesso IP do seu cluster, atualize a lista. Você pode especificar:

  • O endereço IP público do servidor no qual o mongomirror será executado, ou

  • Se configurado para emparelhamento da VPC, o bloco CIDR da VPC do par (ou uma sub-rede) ou o grupo de segurança da VPC do mesmo par.

5
  1. Se ainda não estiver exibido, selecione a organização que contém o projeto desejado no Menu Organizations na barra de navegação.

  2. Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.

  3. Se a página Clusters ainda não estiver exibida, clique em Database na barra lateral.

6

Clique em Connect para o Atlas cluster para o qual você deseja migrar os dados.

7

Você pode obter informações de nome de host do seu agrupamento do Atlas a partir da interface de usuário do Atlas.

Observação

Você não precisa usar um driver para migrar dados com mongomirror.

  1. Na caixa de diálogo Connect , clique em Shell.

  2. Na lista suspensa, selecione 3.4 or earlier. A cadeia de conexão deve ser semelhante ao exemplo a seguir. Este exemplo foi dividido em várias linhas para legibilidade:

    mongodb://<username>:<PASSWORD>@
    00.foo.mongodb.net:27017,
    01.foo.mongodb.net:27017,
    02.foo.mongodb.net:27017/test?
    ssl=true&replicaSet=myAtlasRS&authSource=admin
  3. Em um editor de texto, cole o valor de replicaSet, adicione uma barra (/) e acrescente a lista de hospedagem como valores separados por vírgula, conforme mostrado no exemplo a seguir:

    myAtlasRS/00.foo.mongodb.net:27017,01.foo.mongodb.net:27017,02.foo.mongodb.net:27017

Use esse valor para --destination na próxima etapa.

8

Para completar o processo de migração, mude para Atlas.

Depois que mongomirror concluir a initial sync e fizer o tails do oplog do conjunto de réplicas, você poderá alternar para o Atlas cluster de destino.

1

Isso garante que não ocorra nenhuma gravação adicional no cluster de origem.

2

Isso significa que os clusters de origem e destino estão em um estado consistente.

3

Após o Atlas cluster estar atualizado, pare mongomirror.

4

Atualize seus aplicativos cliente com a cadeia de conexão Atlas fornecida por meio do botão Connect no painel do cluster.

Para obter detalhes sobre conexões com o Atlas, consulte Conectar via drivers.

mongomirror registra seu progresso na saída padrão do terminal. Durante o initial sync, o mongomirror registra uma barra de progresso para cada collection copiada. Por exemplo:

2021-08-09T16:35:50.227-0000 [#....................] park.events 2179/34184 (6.4%)
2021-08-09T16:35:50.227-0000 [#############........] zoo.animals 29000/49778 (58.3%)

Ao finalizar o oplog, o mongomirror registra o tempo de atraso, em segundos, entre a entrada de oplog mais recente no cluster de origem e a última entrada de oplog processada no cluster de destino. Por exemplo:

2016-12-12T16:22:17.027-0800 Current lag from source: 6s

Um tempo de atraso de 6 segundos significa que a última entrada do oplog mongomirror processada ocorreu 6 segundos antes da entrada mais recente disponível no cluster de origem.

Observação

O tempo necessário para que mongomirror se atualize pode ser maior ou menor que 6 segundos, dependendo do número de entradas que chegam por segundo.

Um tempo de atraso de 0 segundos indica que mongomirror está processando entradas que chegaram menos de um segundo antes da última entrada do oplog.

Se o cluster de origem tiver índices, o mongomirror construirá os mesmos índices no cluster de destino. O registro de progresso mostra os horários de início e fim do processo de construção do índice. Para visualizar o progresso das construções do índice, você pode:

  • Use o comando currentOp no nó primário do cluster de destino. O campo command mostra informações sobre a operação em execução. As entradas de construção de índice são semelhantes a estas:

    "command" : {
    "createIndexes" : "perfs",
    "indexes" : [
    {
    "key" : {
    "animal" : "text"
    },
    "name" : "animal_text"
    }
    ]...
  • Baixar os registros do mongodb para seu cluster de destino e procurar entradas recentes para linhas relacionadas ao índice. As mensagens de log relacionadas à construção de índices são semelhantes a estas:

    {"t":{"$date":"2021-08-09T16:35:50.227+00:00"},"s":"I", "c":"INDEX", "id":20447, "ctx":"conn1080","msg":"Index build: completed","attr":{"buildUUID":{"uuid":{"$uuid":"c4a62739-bf19-456d-bbd6-7baa29f1063b"}}}}

Para evitar a contenção de recursos de rede e CPU, execute mongomirror em hosts diferentes dos hosts de instância mongod do conjunto de réplicas.

  • mongomirror afeta o desempenho do seu conjunto de réplica de origem, semelhante ao ter um secundário:

    • Para o estágio initial sync, a carga é escalonada de acordo com o tamanho do seu conjunto de dados.

    • Após a conclusão de um initial sync, a carga é dimensionada com gigabytes do oplog usado por hora.

Para obter a sintaxe, as opções e os exemplos do mongomirror, consulte a página de referência do mongomirror.

Para solução de problemas mongomirror, consulte Erros comuns de pós-validação para migração live (Pull).

Voltar

Ferramentas autogerenciadas

Próximo

espelho mongomiclo