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

Notas de produção para implantações autogerenciadas

Nesta página

  • Suporte a plataformas
  • Notas de suporte da plataforma
  • Matriz de suporte da plataforma
  • MongoDB dbPath
  • Concurrency
  • Consistência de dados
  • Networking
  • Considerações sobre hardware
  • Arquitetura
  • Compressão
  • Sincronização do Relógio
  • Considerações específicas da plataforma
  • Monitoramento de desempenho
  • Backups

Esta página detalha as configurações do sistema que afetam o MongoDB, especialmente ao executar em produção.

Observação

MongoDB Atlas é um banco de dados como serviço hospedado na nuvem. O MongoDB Cloud Manager, um serviço hospedado, e o Ops Manager, uma solução local, fornecem monitoramento, backup e automação de instâncias do MongoDB . Para obter documentação, consulte a documentação do Atlas, a documentação do MongoDB Cloud Manager e a documentação do Ops Manager

Para saber mais sobre a execução em produção das implantações hospedadas no MongoDB Atlas, consulte Notas de produção do Atlas.

Para execução em produção, consulte as Plataformas recomendadas para obter recomendações de sistema operacional.

O MongoDB exige as seguintes microarquiteturas mínimas x86_64:

  • Para a Intel x86_64, o MongoDB exige um dos seguintes:

    • um processador Core Sandy Bridge ou posterior, ou

    • um processador Tiger Lake ou posterior Celeron ou Pentium.

  • Para AMD x86_64, o MongoDB exige:

    • um processador Bulldozer ou posterior.

A partir do MongoDB 5.0, mongod, mongos e o shell mongo legado não são mais compatíveis com plataformas x86_64 que não atendem a esse requisito mínimo de microarquitetura.

MongoDB em arm64 requer o ARMv8,2-A ou microarquitetura posterior.

A partir do MongoDB 5.0, mongod, mongos e o shell herdado mongo não suportam mais plataformas arm64 que não atendem a esse requisito mínimo de microarquitetura.

Para usar a microarquitetura ARM v8.4-A ou posterior, use o MongoDB versão 7.0 ou posterior.

Observação

O MongoDB não é mais compatível com hardware de placa única sem a arquitetura de CPU adequada (Raspberry Pi 4). Consulte Mudanças de compatibilidade no MongoDB 5.0 para obter mais informações.

A partir do MongoDB 8.0, as novas versões do MongoDB Server (principais e secundárias) suportam a versão secundária mínima do sistema operacional (OS) definida pelo fornecedor do sistema operacional. Depois que uma versão secundária do sistema operacional não é mais suportada pelo fornecedor do sistema operacional, o MongoDB atualiza o MongoDB Server para oferecer suporte à próxima versão secundária do sistema operacional. Para obter detalhes, consulte Melhorias no suporte à plataforma MongoDB.

O MongoDB 8.0 é compatível com as seguintes versões secundárias mínimas do sistema operacional:

  • Red hat enterprise Linux 8.8

  • Red hat enterprise Linux 9.3

  • SUSE Linux enterprise server 15 SP5

  • Amazon Linux 2023 versão 2023.3

Importante

v4.4 Fim da vida útil

v4.4 chegou ao fim da vida útil em 29 2024 e não é mais compatível com o MongoDB.

Plataforma
Arquitetura
Edição
8.0
7.0
6.0
5.0
4.4
Amazon Linux 2023
x86_64
Enterprise
Amazon Linux 2023
x86_64
Community
Amazon Linux V2
x86_64
Enterprise
Amazon Linux V2
x86_64
Community
Debian 12
x86_64
Enterprise
Debian 12
x86_64
Community
Debian 11
x86_64
Enterprise
5.0.8+
Debian 11
x86_64
Community
5.0.8+
Debian 10
x86_64
Enterprise
Debian 10
x86_64
Community
Debian 9
x86_64
Enterprise
Debian 9
x86_64
Community
RHEL/Rocky/Alma/Oracle Linux 9.0+ [1]
x86_64
Enterprise
6.0.4+
RHEL/Rocky/Alma/Oracle Linux 9.0+ [1]
x86_64
Community
6.0.4+
RHEL/Rocky/Alma/Oracle Linux 8.0+ [1]
x86_64
Enterprise
RHEL/Rocky/Alma/Oracle Linux 8.0+ [1]
x86_64
Community
RHEL/CentOS/Oracle linux 7.0+ [1]
x86_64
Enterprise
RHEL/CentOS/Oracle linux 7.0+ [1]
x86_64
Community
RHEL/CentOS/Oracle linux 6.2+ [1]
x86_64
Enterprise
RHEL/CentOS/Oracle linux 6.2+ [1]
x86_64
Community
SLES 15
x86_64
Enterprise
SLES 15
x86_64
Community
SLES 12
x86_64
Enterprise
SLES 12
x86_64
Community
Ubuntu 24.04
x86_64
Enterprise
Ubuntu 24.04
x86_64
Community
Ubuntu 22.04
x86_64
Enterprise
6.0.4+
Ubuntu 22.04
x86_64
Community
6.0.4+
Ubuntu 20.04
x86_64
Enterprise
Ubuntu 20.04
x86_64
Community
Ubuntu 18.04
x86_64
Enterprise
Ubuntu 18.04
x86_64
Community
Ubuntu 16.04
x86_64
Enterprise
Ubuntu 16.04
x86_64
Community
Windows 11
x86_64
Enterprise
Windows 11
x86_64
Community
Windows Server 2022
x86_64
Enterprise
Windows Server 2022
x86_64
Community
Windows Server 2019
x86_64
Enterprise
Windows Server 2019
x86_64
Community
Windows 10 / Server 2016
x86_64
Enterprise
Windows 10 / Server 2016
x86_64
Community
macOS 14
x86_64
Enterprise
macOS 14
x86_64
Community
macOS 13
x86_64
Enterprise
macOS 13
x86_64
Community
macOS 12
x86_64
Enterprise
macOS 12
x86_64
Community
macOS 11
x86_64
Enterprise
macOS 11
x86_64
Community
macOS 10.15
x86_64
Enterprise
macOS 10.15
x86_64
Community
macOS 10.14
x86_64
Enterprise
macOS 10.14
x86_64
Community
macOS 10.13
x86_64
Enterprise
macOS 10.13
x86_64
Community
macOS 14
arm64
Enterprise
macOS 14
arm64
Community
macOS 13
arm64
Enterprise
macOS 13
arm64
Community
macOS 12
arm64
Enterprise
macOS 12
arm64
Community
macOS 11
arm64
Enterprise
macOS 11
arm64
Community
Amazon Linux 2023
arm64
Enterprise
Amazon Linux 2023
arm64
Community
Amazon Linux 2
arm64
Enterprise
4.4.4+
Amazon Linux 2
arm64
Community
4.4.4+
RHEL/CentOS/Rocky/Alma 9
arm64
Enterprise
RHEL/CentOS/Rocky/Alma 9
arm64
Community
RHEL/CentOS/Rocky/Alma 8
arm64
Enterprise
4.4.4+
RHEL/CentOS/Rocky/Alma 8
arm64
Community
4.4.4+
Ubuntu 24.04
arm64
Enterprise
Ubuntu 24.04
arm64
Community
Ubuntu 22.04
arm64
Enterprise
6.0.4+
Ubuntu 22.04
arm64
Community
6.0.4+
Ubuntu 20.04
arm64
Enterprise
Ubuntu 20.04
arm64
Community
Ubuntu 18.04
arm64
Enterprise
Ubuntu 18.04
arm64
Community
Ubuntu 16.04
arm64
Enterprise
RHEL/Rocky/Alma 9
ppc64le
Enterprise
RHEL/Rocky/Alma 8 [5]
ppc64le
Enterprise
RHEL/CentOS 7
ppc64le
Enterprise
6.0.7+
RHEL/Rocky/Alma 8 [5]
s390x
Enterprise
5.0.9+
RHEL/CentOS 7
s390x
Enterprise
RHEL/CentOS 7
s390x
Community
[1](1, 2, 3, 4, 5, 6, 7, 8) No Oracle Linux, o MongoDB suporta somente o Kernel Compatível com Red Hat.
[2] As versões 5.0 e superiores do MongoDB são testadas no SLES 12 service pack 5. Versões anteriores do MongoDB são testadas no SLES 12 sem pacote de serviços.
[3] As versões 7.0 e posteriores do MongoDB são testadas no SLES 15 service pack 4. Versões anteriores do MongoDB são testadas no SLES 15 sem pacote de serviços.
[4] A versão 7.0 do MongoDB foi construída e testada em relação ao RHEL 7.9. Versões anteriores do MongoDB são testadas em relação ao RHEL 7 e assumem compatibilidade direta.
[5](1, 2) RHEL 8 no PPC64LE e s390x não tem compatibilidade com a versão atualizada do TCMalloc usada nas versões 8.0 e posteriores do MongoDB. Nessas arquiteturas, o rhel 8 usa a versão legada do TCMallloc. Para saber mais, consulte Otimização de desempenho do TCMalloc para uma implantação autogerenciada.
[6] rhel 9 em PPC64LE não é compatível com a versão atualizada do TCMallloc usada nas versões do MongoDB 8.0 e posteriores. Nesta arquitetura, o rhel 9 usa a versão legado do TCMallloc. Para saber mais, consulte Otimização de desempenho do TCmalloc para uma implantação autogerenciada.

Enquanto o MongoDB suporta uma variedade de plataformas, os seguintes sistemas operacionais são recomendados para uso de produção na arquitetura do x86_64:

  • Amazon linux

  • Debian

  • RHEL [ 7 ]

  • SLES

  • Ubuntu LTS

  • Windows Server

Para melhores resultados, execute a versão mais recente da sua plataforma. Se você executar uma versão mais antiga, confirme se ela ainda tem suporte do provedor.

[7] Os produtos locais do MongoDB lançados para RHEL versão 8.0+ são compatíveis com Rocky Linux versão 8.0+ e AlmaLinux versão 8.0+, desde que as distribuições cumpram sua obrigação de fornecer compatibilidade total com RHEL.

Dica

Veja também:

Certifique-se de ter a versão estável mais recente.

As versões do MongoDB estão disponíveis na Central de Download do MongoDB:

Para obter detalhes sobre a atualização para a versão secundária mais recente, consulte Atualizar para a versão de patch autogerenciada mais recente do MongoDB.

Os seguintes pacotes relacionados também estão disponíveis no Centro de Downloads do MongoDB:

Para outros produtos MongoDB , consulte sua respectiva documentação.

Os arquivos no diretório do dbPath devem corresponder ao mecanismo de armazenamento configurado. O mongod não iniciará se o dbPath contiver arquivos de dados criados por um mecanismo de armazenamento diferente do especificado pelo --storageEngine.

mongod deve possuir permissões de leitura e gravações para o dbPath especificado.

Se você usar um scanner antivírus (AV) ou um scanner de detecção e resposta de terminal (EDR), configure o scanner para excluir o database storage path e o database log path da análise.

Os arquivos de dados em database storage path são compactados. Além disso, se você utilizar o mecanismo de armazenamento criptografado, os arquivos de dados também serão criptografados. Os custos de E/S e CPU para verificar esses arquivos podem diminuir significativamente o desempenho sem oferecer nenhum benefício de segurança.

Se você não excluir os diretórios em seu database storage path e database log path, o scanner poderá colocar em quarentena ou excluir arquivos importantes. Arquivos ausentes ou em quarentena podem corromper seu banco de dados e travar sua instância do MongoDB.

O WiredTiger suporta o acesso simultâneo de leitores e escritores aos documentos de uma coleção. Os clientes podem ler documentos enquanto as operações de gravação estão em andamento e vários threads podem modificar diferentes documentos em uma coleção ao mesmo tempo.

Dica

Veja também:

Alocar RAM e CPU suficientes fornece informações sobre como o WiredTiger tira proveito de vários núcleos de CPU e como melhorar o rendimento da operação.

O MongoDB usa registro de gravação antecipada em um diário em disco. O registro no diário garante que o MongoDB possa recuperar rapidamente operações de gravação que foram gravadas no diário, mas não gravadas nos arquivos de dados, nos casos em que mongod foi encerrado devido a uma falha ou outra falha grave. Consulte Registro no diário para obter mais informações.

Você pode usar sessões causalmente consistentes para ler suas próprias gravações, se as gravações solicitarem confirmação.

Preocupação de gravação descreve o nível de confirmação solicitado do MongoDB para operações de gravação. O nível de preocupação de gravação afeta a rapidez com que a operação de gravação retorna. Quando as operações de gravação apresentam uma preocupação de gravação fraca, elas retornam rapidamente. Com preocupação de gravação mais fortes, os clientes devem aguardar após o envio de uma operação de gravação até que o MongoDB confirme a operação de gravação no nível de preocupação de gravação solicitado. Com preocupações de gravação insuficientes, as operações de gravação podem parecer bem-sucedidas para um cliente, mas podem não persistir em alguns casos de falha do servidor.

Consulte o documento Write Concern para obter mais informações sobre como escolher um nível de Write Concern adequado para sua implementação.

Sempre execute o MongoDB em um ambiente confiável, com regras de rede que impeçam o acesso de todas as máquinas, sistemas e redes desconhecidos. Como acontece com qualquer sistema sensível que dependa de acesso à rede, sua implantação do MongoDB deve ser acessível apenas a sistemas específicos que exijam acesso, como servidores de aplicativos, serviços de monitoramento e outros componentes do MongoDB.

Importante

Por padrão, a autorização não está habilitada e o mongod assume um ambiente confiável. Ative o modo authorization conforme necessário. Para obter mais informações sobre mecanismos de autenticação suportados no MongoDB, bem como autorização no MongoDB, consulte Autenticação em implantações autogerenciadas e Controle de acesso baseado em função em implantações autogerenciadas.

Para obter informações e considerações adicionais sobre segurança, consulte os documentos na Seção de Segurança, especificamente:

Para usuários do Windows, considere o Artigo técnico do Windows Server sobre configuração TCP ao implementar MongoDB no Windows.

A interface HTTP está desabilitada por padrão. Não habilite a interface HTTP em ambientes de produção.

Evite sobrecarregar os recursos de conexão de uma instância mongod ou mongos por exemplo, ajustando o tamanho do pool de conexões para se adequar ao seu caso de uso. Comece com 110-115% do número típico de solicitações de banco de dados atuais e modifique o tamanho do pool de conexões conforme necessário. Consulte as Pool de conexões para ajustar o tamanho do conjunto de conexões.

O comando connPoolStats retorna informações sobre o número de conexões abertas para o banco de dados atual para instâncias do mongos e mongod em agrupamentos fragmentados.

Consulte também Alocar RAM e CPU suficientes.

O MongoDB foi projetado especificamente com o hardware de commodity em mente e tem poucos requisitos ou limitações de hardware. Os componentes principais do MongoDB são executados em hardware little-endian, principalmente processadores x86/x86_64. Bibliotecas de clientes (ou seja, drivers) podem ser executados em sistemas big ou little endian.

No mínimo, garanta que cada instância do mongod ou mongos tenha acesso a dois núcleos reais ou uma CPU física de vários núcleos.

O mecanismo de armazenamento do WiredTiger é multithread e pode aproveitar os núcleos adicionais da CPU. Especificamente, o número total de threads ativos (ou seja, operações simultâneas) em relação ao número de CPUs disponíveis pode afetar o desempenho:

  • O rendimento aumenta à medida que o número de operações ativas simultâneas aumenta até o número de CPUs.

  • A taxa de transferência diminui à medida que o número de operações ativas simultâneas excede o número de CPUs em algum limite.

O limite depende do seu aplicativo. Você pode determinar o número ideal de operações ativas simultâneas para o seu aplicativo experimentando e medindo a taxa de transferência. O resultado de mongostat fornece estatísticas sobre o número de leituras/gravações ativas na coluna (ar|aw).

Com o WiredTiger, o MongoDB utiliza o cache interno do WiredTiger e o cache do sistema de arquivos.

O tamanho do cache interno padrão do WiredTiger é o maior entre:

  • 50% de (RAM - 1 GB) ou

  • 256 MB.

Por exemplo, em um sistema com um total de 4 GB de RAM, o cache WiredTiger usa 1.5GB de RAM (0.5 * (4 GB - 1 GB) = 1.5 GB). Por outro lado, em um sistema com um total de 1.25 GB de RAM, o WiredTiger aloca 256 MB para o cache do WiredTiger porque isso é mais da metade da RAM total menos um gigabyte (0.5 * (1.25 GB - 1 GB) = 128 MB < 256 MB).

Observação

Em alguns casos, como quando executado em um container, o banco de dados pode ter restrições de memória inferiores à memória total do sistema. Nesses casos, esse limite de memória, em vez do total memória do sistema, é usado como a RAM máxima disponível.

Para ver o limite de memória, consulte hostInfo.system.memLimitMB.

Por padrão, o WiredTiger usa compressão de bloco Snappy para todas as collections e compactação de prefixo para todos os índices. Os padrões de compactação são configuráveis em nível global e também podem ser definidos por collection e por índice durante a criação da collection e do índice.

Diferentes representações são usadas para dados no cache interno do WiredTiger versus o formato no disco:

  • Os ficheiros de dados no cache do sistema de arquivos são os mesmos do formato no disco, incluindo os benefícios de qualquer compactação para ficheiros de dados. O cache do sistema de arquivos é usado pelo sistema operacional para reduzir a E/S do disco.

  • Os índices carregados no cache interno do WiredTiger têm uma representação de dados diferente do formato no disco, mas ainda podem aproveitar a compactação de prefixo do índice para reduzir o uso de RAM. A compactação de prefixo de índice deduplica prefixos comuns de campos indexados.

  • Os dados de coleta no cache interno do WiredTiger são descompactados e utilizam uma representação diferente do formato no disco. A compactação de blocos pode proporcionar uma economia significativa de armazenamento em disco, mas os dados devem ser descompactados para serem manipulados pelo servidor.

Com o cache do sistema de arquivos, o MongoDB usa automaticamente toda a memória livre que não é usada pelo cache do WiredTiger ou por outros processos.

Para ajustar o tamanho do cache interno do WiredTiger, consulte storage.wiredTiger.engineConfig.cacheSizeGB e --wiredTigerCacheSizeGB. Evite aumentar o tamanho do cache interno do WiredTiger acima do valor padrão.

Observação

O storage.wiredTiger.engineConfig.cacheSizeGB limita o tamanho do cache interno do WiredTiger. O sistema operacional usa a memória livre disponível para o cache do sistema de arquivos, o que permite que os arquivos de dados compactados do MongoDB permaneçam na memória. Além disso, o sistema operacional usa qualquer RAM livre para armazenar em buffer blocos do sistema de arquivos e cache do sistema de arquivos.

Para acomodar os consumidores adicionais de RAM, pode ser necessário diminuir o tamanho do cache interno do WiredTiger.

O valor padrão do tamanho do cache interno do WiredTiger pressupõe que haja uma única instância mongod por máquina. Se uma única máquina contiver várias instâncias do MongoDB, você deverá diminuir a configuração para acomodar as outras instâncias mongod.

Se você executar mongod em um contêiner (por exemplo, lxc, cgroups, Docker etc.) que não tenha acesso a toda a RAM disponível em um sistema, será necessário definir storage.wiredTiger.engineConfig.cacheSizeGB como um valor menor que a quantidade de RAM disponível no contêiner. A quantidade exata depende dos outros processos em execução no contêiner. Consulte memLimitMB.

Para exibir estatísticas sobre o cache e a taxa de despejo, consulte o campo wiredTiger.cache retornado pelo comando serverStatus.

Ao usar criptografia, CPUs equipadas com extensões de conjunto de instruções AES-NI mostram vantagens significativas de desempenho. Se estiver usando o MongoDB Enterprise com o mecanismo de armazenamento criptografado, escolha uma CPU compatível com AES-NI para obter melhor desempenho.

Dica

Veja também:

O MongoDB tem bons resultados e uma boa relação preço/desempenho com SSD SATA (disco de estado sólido).

Use SSD, se disponível, e econômico.

As unidades giratórias SATA (Commodity) geralmente são uma boa opção, pois o aumento aleatório do desempenho de E/S com unidades giratórias mais caras não é tão dramático (apenas da ordem de 2x). Usar SSDs ou aumentar a RAM pode ser mais eficaz no aumento da taxa de transferência de E/S.

A execução do MongoDB em um sistema com acesso não uniforme à memória (NUMA) pode causar vários problemas operacionais, incluindo desempenho lento por períodos de tempo e alto uso do processo do sistema.

Ao executar servidores e clientes MongoDB no hardware NUMA, você deve configurar uma diretiva de intercalação de memória para que o host se comporte de maneira não NUMA. O MongoDB verifica as configurações de NUMA na inicialização quando implantado em máquinas Linux (desde a versão 2.0) e Windows (desde a versão 2.6). Se a configuração NUMA puder degradar o desempenho, o MongoDB imprime um aviso.

O processo do daemon do numad também pode reduzir o desempenho do mongod . Você deve garantir que numad não esteja habilitado no MongoDB Server.

Dica

Veja também:

  • O problema do MySQL " swap insanity " e os efeitos da postagem NUMA, que descreve os efeitos do NUMA em bancos de dados. O post apresenta o NUMA e seus objetivos, e ilustra como esses objetivos não são compatíveis com bancos de dados de produção. Embora a publicação do blog aborde o impacto do NUMA no MySQL, os problemas do MongoDB são semelhantes.

  • NUMA: Uma visão geral.

No Windows, o intercâmbio de memória deve ser habilitado através do BIOS da máquina. Consulte a documentação do sistema para obter detalhes.

No Linux, você deve desativar a zone reclaim e também garantir que suas instâncias demongod e mongos sejam started by numactl, que geralmente é configurado por meio do sistema de inicialização da sua plataforma. Você deve executar ambas as operações para desabilitar adequadamente o NUMA para uso com MongoDB.

  1. Desative a reclamação de zona com um dos seguintes comandos:

    echo 0 | sudo tee /proc/sys/vm/zone_reclaim_mode
    sudo sysctl -w vm.zone_reclaim_mode=0
  2. Certifique-se de quemongod e mongos sejam iniciados por numactl. Isso geralmente é configurado por meio do sistema de inicialização da sua plataforma. Execute o seguinte comando para determinar qual sistema de inicialização está em uso na sua plataforma:

    ps --no-headers -o comm 1
    • Se "systemd", sua plataforma usa o sistema de entrada systemd e você deve seguir as etapas na aba systemd abaixo para editar seu(s) arquivo(s) de serviço MongoDB.

    • Se "init", sua plataforma usa o sistema SysV Init e você não precisa executar esta etapa. O script de inicialização padrão do MongoDB para SysV Init inclui as etapas necessárias para iniciar instâncias do MongoDB via numactl por padrão.

    • Se você gerencia seus próprios scripts de inicialização (ou seja, se não estiver usando nenhum desses sistemas de inicialização), siga as etapas da guia Scripts de inicialização personalizados abaixo para editar o(s) script(s) de inicialização personalizado(s).


    Você deve usar numactl para iniciar cada uma de suas mongod instâncias, incluindo todos os servidores de configuração, mongos instâncias e clientes. Edite o arquivo de serviço systemd padrão para cada um dos seguintes itens:

    1. Copie o arquivo de serviço MongoDB padrão:

      sudo cp /lib/systemd/system/mongod.service /etc/systemd/system/
    2. Edite o arquivo /etc/systemd/system/mongod.service e atualize a declaração ExecStart para começar com:

      /usr/bin/numactl --interleave=all

      Exemplo

      Se sua instrução ExecStart existente for:

      ExecStart=/usr/bin/mongod --config /etc/mongod.conf

      Atualize essa declaração para ler:

      ExecStart=/usr/bin/numactl --interleave=all /usr/bin/mongod --config /etc/mongod.conf
    3. Aplique a alteração a systemd:

      sudo systemctl daemon-reload
    4. Reinicie todas as instâncias mongod em execução:

      sudo systemctl stop mongod
      sudo systemctl start mongod
    5. Se aplicável, repita estas etapas para quaisquer instâncias do mongos.

    Você deve usar numactl para iniciar cada uma de suas mongod instâncias, incluindo todos os servidores de configuração, mongos instâncias e clientes.

    1. Instale o numactl para sua plataforma, se ainda não estiver instalado. Consulte a documentação do sistema operacional para obter informações sobre como instalar o pacote numactl.

    2. Configure cada um dos seus scripts de inicialização personalizados para iniciar cada instância do MongoDB via numactl:

      numactl --interleave=all <path> <options>

      Onde <path> é o caminho para o programa que você está iniciando e <options> quaisquer argumentos opcionais para passar para esse programa.

      Exemplo

      numactl --interleave=all /usr/local/bin/mongod -f /etc/mongod.conf

Para obter mais informações, consulte a Documentação para /proc/sys/vm/*.

O MongoDB tem melhor desempenho quando a troca pode ser evitada ou reduzida ao mínimo, pois a recuperação de dados da troca sempre será mais lenta do que acessar dados na RAM. No entanto, se o sistema que hospeda o MongoDB ficar sem RAM, a troca pode impedir que o Linux OOM Killer encerre o processomongod.

Geralmente, você deve escolher uma das seguintes estratégias de troca:

  1. Atribua espaço de troca em seu sistema e configure o kernel para permitir apenas a troca sob alta carga de memória, ou

  2. Não atribua espaço de troca no seu sistema e configure o kernel para desabilitar totalmente a troca

Consulte Set vm.swappiness para obter instruções sobre como configurar a troca em seu sistema Linux seguindo estas diretrizes.

Observação

Se sua instância do MongoDB estiver hospedada em um sistema que também execute outro software, como um servidor web, você deverá escolher a primeira estratégia de troca. Não desative a troca neste caso. Se possível, é altamente recomendável executar o MongoDB em seu próprio sistema dedicado.

Para obter desempenho ideal em termos de camada de armazenamento, use discos suportados por RAID-10. RAID-5 e RAID-6 normalmente não fornecem desempenho suficiente para suportar uma implantação do MongoDB.

Com o mecanismo de armazenamento WiredTiger, os objetos WiredTiger podem ser armazenados em sistemas de arquivos remotos se o sistema de arquivos remoto estiver em conformidade com a ISO/IEC 9945-1:1996 (POSIX.1). Como os sistemas de arquivos remotos geralmente são mais lentos do que os sistemas de arquivos locais, o uso de um sistema de arquivos remoto para armazenamento pode prejudicar o desempenho.

Se você decidir utilizar o NFS, adicione as seguintes opções de NFS ao seu arquivo /etc/fstab:

  • bg

  • hard

  • nolock

  • noatime

  • nointr

Dependendo da versão do seu kernel, alguns desses valores podem já ser definidos como padrão. Consulte a documentação da sua plataforma para obter mais informações.

Para melhorar o desempenho, considere separar os dados, o diário e os logs do banco de dados em diferentes dispositivos de armazenamento, com base no padrão de acesso e gravação do aplicativo. Monte os componentes como sistemas de arquivos separados e use links simbólicos para mapear o caminho de cada componente até o dispositivo que o armazena.

Para o mecanismo de armazenamento WiredTiger, você também pode armazenar os índices em um dispositivo de armazenamento diferente. Consulte storage.wiredTiger.engineConfig.directoryForIndexes.

Observação

O uso de diferentes dispositivos de armazenamento afetará sua capacidade de criar backups em estilo de snapshot de seus dados, já que os arquivos estarão em dispositivos e volumes diferentes.

Para dispositivos de bloco locais conectados a uma instância de máquina virtual por meio do hipervisor ou hospedados por um provedor de hospedagem em nuvem, o sistema operacional convidado deve usar o agendador cfq para obter o melhor desempenho. O escalonador do cfq permite ao sistema operacional adiar o agendamento de E/S para o hipervisor subjacente.

Observação

O agendador noop pode ser usado para agendamento se todas as seguintes condições forem atendidas:

  • O hipervisor for VMware.

  • Uma topologia de conjunto de réplica ou agrupamento fragmentado for usada.

  • As máquinas virtuais estão localizadas no mesmo host virtual.

  • O armazenamento subjacente que contém os DBPaths é um repositório comum de blocos de LUN.

Para servidores físicos, o sistema operacional deve usar um agendador de prazo. O agendador de prazos limita a latência máxima por solicitação e mantém uma boa taxa de transferência de disco, o que é melhor para aplicativos de banco de dados com uso intensivo de disco.

Consulte o documento Arquiteturas de conjuntos de réplicas para obter uma visão geral das considerações arquitetônicas para implantações de conjuntos de réplicas.

Consulte Arquitetura de produção de cluster sharded para obter uma visão geral das arquiteturas de cluster sharded recomendadas para implementações de produção.

O WiredTiger pode comprimir dados de coleta usando uma das seguintes bibliotecas de compressão:

  • snappy
    Fornece uma taxa de compressão menor do que zlib ou zstd, mas tem um custo de CPU menor do que qualquer um deles.
  • zlib
    Fornece melhor taxa de compactação que snappy , mas tem um custo de CPU mais alto que snappy e zstd.
  • zstd
    Oferece melhor taxa de compressão do que snappy e zlib e tem um custo de CPU menor do que zlib.

Por padrão, o WiredTiger usa a biblioteca de compressão snappy. Para alterar a configuração de compressão, consulte storage.wiredTiger.collectionConfig.blockCompressor.

O WiredTiger usa compactação de prefixo em todos os índices por padrão.

Os componentes do MongoDB mantêm relógios lógicos para oferecer suporte a operações dependentes do tempo. O uso do NTP para sincronizar os relógios da máquina host reduz o risco de desvio de clock entre os componentes. A deriva do relógio entre os componentes aumenta a probabilidade de comportamento incorreto ou anormal de operações dependentes do tempo, como as seguintes:

  • Se o relógio do sistema subjacente de qualquer componente do MongoDB se desviar um ano ou mais de outros componentes na mesma implementação, a comunicação entre esses membros pode se tornar não confiável ou parar completamente.

    O parâmetro maxAcceptableLogicalClockDriftSecs controla a quantidade de desvio de relógio aceitável entre componentes. Clusters com um valor menor de maxAcceptableLogicalClockDriftSecs têm uma tolerância correspondentemente menor ao desvio do relógio.

  • Dois membros do cluster com relógios de sistema diferentes podem retornar valores diferentes para operações que retornam o cluster atual ou a hora do sistema, como Date(), NOWe CLUSTER_TIME.

  • Os recursos que dependem do controle de tempo podem ter um comportamento inconsistente ou imprevisível em clusters com desvio de relógio entre os componentes do MongoDB.

Ao executar o MongoDB em produção no Linux, você deve usar o Linux kernel versão 2,6,36 ou posterior, com o sistema de arquivos XFS ou EXT4. Se possível, use o XFS, pois ele geralmente tem melhor desempenho com o MongoDB.

Com o mecanismo de armazenamento WiredTiger, o uso do XFS é altamente recomendado para nós de suporte de dados para evitar problemas de desempenho que podem ocorrer ao usar o EXT4 com o WiredTiger .

  • Em geral, se você usa o sistema de arquivos XFS, use pelo menos a versão 2.6.25 do Linux Kernel.

  • Se você usar o sistema de arquivos EXT4, use pelo menos a versão 2.6.28 do Linux Kernel.

  • No Red Hat Enterprise Linux e CentOS, use pelo menos a versão 2.6.18-194 do Linux Kernel.

O MongoDB utiliza a GNU C Library (glibc) no Linux. Geralmente, cada Linux distro fornece sua própria versão verificada desta biblioteca. Para melhores resultados, use a atualização mais recente disponível para esta versão fornecida pelo sistema. Você pode verificar se tem a versão mais recente instalada usando o gerenciador de pacotes do sistema. Por exemplo:

  • Em RHEL / CentOS, o comando a seguir atualiza a Biblioteca GNU C fornecida pelo sistema:

    sudo yum update glibc
  • No Ubuntu / Debian, o comando a seguir atualiza a biblioteca GNU C fornecida pelo sistema:

    sudo apt-get install libc6

Importante

O MongoDB exige um sistema de arquivos que suporta fsync() em diretórios. Por exemplo, as pastas compartilhadas do HGFS e do Virtual Box não suportam esta operação.

"Swappiness" é uma configuração do kernel Linux que influencia o comportamento do gerenciador de memória virtual. A configuração vm.swappiness varia de 0 a 100: quanto maior o valor, mais fortemente ela prefere trocar páginas de memória para o disco em vez de remover páginas da RAM.

  • Uma configuração de 0 desabilita totalmente a troca [8].

  • Uma configuração de 1 permitir que o kernel seja trocado apenas para evitar problemas de falta de memória.

  • Uma configuração do 60 disser ao kernel para trocar para disco frequentemente, e for o valor padrão em muitas distribuições Linux.

  • Uma configuração de 100 disser ao kernel para trocar agressivamente para o disco.

O MongoDB tem melhor desempenho onde a troca pode ser evitada ou reduzida ao mínimo. Como tal, você deve definir vm.swappiness para 1 ou 0 dependendo das necessidades do aplicativo e da configuração do cluster.

Observação

A maioria dos processos de sistema e usuário são executados em um cgroup, que, por padrão, define o vm.swappiness como 60. Se você estiver executando RHEL /CentOS, defina vm.force_cgroup_v2_swappiness como 1 para garantir que o valor vm.swappiness especificado substitua qualquer padrão do cgroup.

[8] Com versões do kernel Linux anteriores a 3.5, ou versões do kernel RHEL / CentOS anteriores a 2.6.32-303, uma configuração vm.swappiness de 0 ainda permitiria que o kernel trocasse em certas situações de emergência.

Observação

Se sua instância do MongoDB estiver hospedada em um sistema que também execute outro software, como um servidor web, você deverá definir vm.swappiness como 1. Se possível, é altamente recomendável executar MongoDB em seu próprio sistema dedicado.

  • Para verificar a configuração atual de troca em seu sistema, execute:

    cat /proc/sys/vm/swappiness
  • Para alterar a troca em seu sistema:

    1. Edite o arquivo /etc/sysctl.conf e adicione a seguinte linha:

      vm.swappiness = 1
    2. Execute o seguinte comando para aplicar a configuração:

      sudo sysctl -p

Observação

Se você estiver executando o RHEL / CentOS e usando um perfil de desempenho tuned, você também deve editar o perfil escolhido para definir vm.swappiness como 1 ou 0.

Para todas as implantações do MongoDB:

  • Use o Network Time Protocol (NTP) para sincronizar o tempo entre seus hosts. Isso é especialmente importante em agrupamentos fragmentados.

Para os mecanismos de armazenamento WiredTiger, considere as seguintes recomendações:

  • Desative o atime para o volume de armazenamento que contém os arquivos do banco de dados.

  • Ajuste as configurações do ulimit para sua plataforma de acordo com as recomendações na referência ulimit. Valores baixos de ulimit afetarão negativamente o MongoDB quando ele estiver sendo usado intensamente e podem levar a falhas nas conexões com os processos do MongoDB e à perda de serviço.

    Observação

    Se o valor ulimit para o número de arquivos abertos estiver em 64000, o MongoDB gerará um aviso de inicialização.

  • Se você estiver executando o MongoDB 8.0, habilite Transparent Hugepages.

    • Se você estiver executando o MongoDB 7.0 ou anterior, desabilite Transparent Hugepages. Em versões anteriores, o MongoDB tem melhor desempenho com páginas de memória virtual típicas (4096 bytes).

  • Desative o NUMA em seu BIOS. Se isso não for possível, consulte MongoDB em hardware NUMA.

  • Configure o SELinux para o MongoDB se não estiver usando os caminhos de diretório ou as portaspadrão do MongoDB .

    Observação

    Se você estiver usando o SELinux, qualquer operação do MongoDB que exija JavaScript no lado do servidor resultará em erros de segfault. Desativar execução de JavaScript no servidor descreve como desativar a execução de JavaScript no servidor.

Para o mecanismo de armazenamento WiredTiger:

  • Defina a configuração de leitura entre 8 e 32, independentemente do tipo de mídia de armazenamento (disco giratório, SSD, etc.).

    Maior leitura antecipada geralmente beneficia operações de E/S sequenciais. Como os padrões de acesso ao disco do MongoDB são geralmente aleatórios, o uso de configurações de leitura mais altas fornece benefício limitado ou possível degradação do desempenho. Como tal, para um desempenho ideal do MongoDB, defina a leitura antecipada entre 8 e 32, a menos que o teste mostre um benefício mensurável, repetível e confiável em um valor de leitura mais alto. O suporte comercial do MongoDB pode fornecer conselhos e orientações sobre configurações alternativas de leitura antecipada.

Em plataformas Linux, você pode observar uma das seguintes afirmações no log MongoDB:

<path to TLS/SSL libs>/libssl.so.<version>: no version information available (required by /usr/bin/mongod)
<path to TLS/SSL libs>/libcrypto.so.<version>: no version information available (required by /usr/bin/mongod)

Esses avisos indicam que as bibliotecas TLS/SSL do sistema são diferentes das bibliotecas TLS/SSL em que o mongod foi compilado. Normalmente, essas mensagens não requerem intervenção; no entanto, você pode usar as seguintes operações para determinar as versões de símbolo que mongod espera:

objdump -T <path to mongod>/mongod | grep " SSL_"
objdump -T <path to mongod>/mongod | grep " CRYPTO_"

Essas operações retornarão a saída que se assemelha a uma das seguintes linhas:

0000000000000000 DF *UND* 0000000000000000 libssl.so.10 SSL_write
0000000000000000 DF *UND* 0000000000000000 OPENSSL_1.0.0 SSL_write

As duas últimas strings nesta saída são a versão do símbolo e o nome do símbolo. Compare estes valores com os valores retornados pelas seguintes operações para detectar incompatibilidade de versão de símbolo:

objdump -T <path to TLS/SSL libs>/libssl.so.1*
objdump -T <path to TLS/SSL libs>/libcrypto.so.1*

Esse procedimento não é exato nem exaustivo: muitos símbolos usados por mongod da biblioteca libcrypto não começam com CRYPTO_.

Para instâncias MongoDB usando o mecanismo de armazenamento WiredTiger, o desempenho no Windows é comparável ao desempenho no Linux.

Esta seção descreve considerações ao executar MongoDB em alguns dos ambientes virtuais mais comuns.

Para todas as plataformas, considere o agendamento.

Existem duas configurações de desempenho a serem consideradas:

  • Desempenho reproduzível para testes de desempenho ou benchmarking, e

  • Desempenho máximo bruto

Para ajustar o desempenho no EC2 para qualquer configuração, você deve:

  • Ative o AWS Enhanced Networking para sua instância. Nem todos os tipos de instância oferecem suporte à rede aprimorada.

    Para saber mais sobre redes aprimoradas, consulte a documentação da AWS .

  • Defina tcp_keepalive_time para 120.

Se você estiver mais preocupado com o desempenho reproduzível no EC2, também deverá fazê-lo:

Use o Armazenamento Premium. O Microsoft Azure oferece dois tipos gerais de armazenamento: armazenamento padrão e armazenamento Premium. O MongoDB no Azure tem melhor desempenho ao usar o armazenamento Premium do que com o armazenamento Standard.

O tempo limite ocioso do TCP no balanceador de carga do Azure é de 240 segundos por padrão, o que pode fazer com que ele desca silenciosamente as conexões se a manutenção do TCP em seus sistemas do Azure for maior que esse valor. Você deve definir tcp_keepalive_time como 120 para melhorar esse problema.

Observação

Você precisará reiniciar mongod e processos demongos para que as novas configurações de keepalive em todo o sistema entrem em vigor.

  • Para visualizar a configuração do keepalive no Linux, use um dos seguintes comandos:

    sysctl net.ipv4.tcp_keepalive_time

    Ou:

    cat /proc/sys/net/ipv4/tcp_keepalive_time

    O valor é medido em segundos.

    Observação

    Embora o nome da configuração inclua ipv4, o valor tcp_keepalive_time se aplica tanto a IPv4 quanto a IPv6.

  • Para alterar o tcp_keepalive_time valor de , pode utilizar um dos seguintes comandos, fornecendo um <value> em segundos:

    sudo sysctl -w net.ipv4.tcp_keepalive_time=<value>

    Ou:

    echo <value> | sudo tee /proc/sys/net/ipv4/tcp_keepalive_time

    Essas operações não persistem durante as reinicializações do sistema. Para persistir a configuração, adicione a seguinte linha a /etc/sysctl.conf, fornecendo um <value> em segundos, e reinicialize a máquina:

    net.ipv4.tcp_keepalive_time = <value>

    Valores de Keepalive maiores que 300 segundos (5 minutos) serão substituídos nos soquetes mongod e mongos e definidos como 300 segundos.

  • Para visualizar a configuração do keepalive no Windows, emita o seguinte comando:

    reg query HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveTime

    O valor do registro não está presente por padrão. O padrão do sistema, usado se o valor estiver ausente, é 7200000 milissegundos ou 0x6ddd00 em hexadecimal.


  • Para alterar o valor do KeepAliveTime, utilize o seguinte comando em um Administrador Command Prompt, onde <value> é expresso em hexadecimal (por exemplo, 120000 é 0x1d4c0):

    reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ /t REG_DWORD /v KeepAliveTime /d <value>

    Os usuários do Windows devem considerar o Artigo Windows Server Technet no KeepAliveTime para obter mais informações sobre como configurar o keepalive para implantações do MongoDB em sistemas Windows. Os valores de keepalive maiores ou iguais a 600000 milissegundos (10 minutos) serão ignorados por mongod e mongos.

O MongoDB é compatível com VMware.

O VMware suporta compromisso de memória, onde você pode atribuir mais memória às suas máquinas virtuais do que a máquina física está disponível. Quando a memória está sobrecarregada, o hipervisor realoca a memória entre as máquinas virtuais. O driver de balão da VMware (vmmemctl) recupera as páginas consideradas menos valiosas.

O driver balão reside dentro do sistema operacional convidado. Sob certas configurações, quando o driver balão se expande, ele pode interferir no gerenciamento de memória do MongoDB e afetar o desempenho do MongoDB.

Para evitar o impacto negativo no desempenho do driver balão e dos recursos de comprometimento excessivo de memória, reserve a quantidade total de memória para a máquina virtual que executa o MongoDB. A reserva da quantidade apropriada de memória para a máquina virtual evita que o balão se infle no sistema operacional local se houver pressão por memória no hipervisor.

Mesmo que o driver balão e os recursos de superalocação de memória possam afetar negativamente o desempenho do MongoDB sob determinadas configurações, não desabilite esses recursos. Se você desabilitar esses recursos, o hipervisor poderá usar seu espaço de troca para atender às solicitações de memória, o que afetará negativamente o desempenho.

Certifique-se de que as máquinas virtuais permaneçam em um host ESX/ESXi específico definindo as regras de afinidade do VMware. Se você precisar migrar manualmente uma máquina virtual para outro host e a instância do mongod na máquina virtual for o primário, antes será necessário fazer step down no primário e depois shut down the instance.

Siga as melhores práticas de rede para vMotion e VMKernel. O não cumprimento das melhores práticas pode resultar em problemas de desempenho e afetar os mecanismos de alta disponibilidade do definir e do cluster fragmentado .

Você pode clonar uma máquina virtual executando o MongoDB. Você pode usar essa função para implantar um novo host virtual para adicionar como nó de um conjunto de réplicas.

O MongoDB é compatível com KVM.

O KVM oferece suporte ao comprometimento excessivo de memória, onde você pode atribuir mais memória às máquinas virtuais do que a máquina física tem disponível. Quando a memória está sobrecarregada, o hipervisor realoca a memória entre as máquinas virtuais. O driver de balão da KVM recupera as páginas consideradas menos valiosas.

O driver balão reside dentro do sistema operacional convidado. Sob certas configurações, quando o driver balão se expande, ele pode interferir no gerenciamento de memória do MongoDB e afetar o desempenho do MongoDB.

Para evitar o impacto negativo no desempenho do driver balão e dos recursos de comprometimento excessivo de memória, reserve a quantidade total de memória para a máquina virtual que executa o MongoDB. A reserva da quantidade apropriada de memória para a máquina virtual evita que o balão se infle no sistema operacional local se houver pressão por memória no hipervisor.

Mesmo que o driver balão e os recursos de superalocação de memória possam afetar negativamente o desempenho do MongoDB sob determinadas configurações, não desabilite esses recursos. Se você desabilitar esses recursos, o hipervisor poderá usar seu espaço de troca para atender às solicitações de memória, o que afetará negativamente o desempenho.

No Linux, utilize o comando iostat para verificar se a E/S do disco é um gargalo para seu banco de dados. Especifique um número de segundos ao executar iostat para evitar a exibição de estatísticas cobrindo o tempo desde a inicialização do servidor.

Por exemplo, o comando a seguir exibirá estatísticas estendidas e o tempo para cada relatório exibido, com tráfego em MB/s, em um segundo intervalo:

iostat -xmt 1

Campos principais de iostat:

  • %util: este é o campo mais útil para uma verificação rápida, ele indica qual a porcentagem do tempo que o dispositivo/drive está em uso.

  • avgrq-sz: tamanho médio da solicitação. Um número menor para este valor reflete mais operações IO aleatórias.

bwm-ng é uma ferramenta de linha de comando para monitorar o uso da rede. Se você suspeitar de um gargalo baseado na rede, poderá usar bwm-ng para iniciar o processo de diagnóstico.

Para fazer backups de seu banco de dados MongoDB, consulte a Visão geral dos métodos de backup do MongoDB.

Voltar

Administração