Notas de produção para implantações autogerenciadas
Nesta página
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.
Suporte a plataformas
Para execução em produção, consulte as Plataformas recomendadas para obter recomendações de sistema operacional.
Notas de suporte da plataforma
x86_64
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.
O MongoDB oferece suporte apenas ao Oracle Linux executando o Red Hat Compatible Kernel (RHCK). O MongoDB não suporta o Unbreakable Enterprise Kernel (UEK).
MongoDB 5.0 requer o uso do conjunto de instruções AVX, disponível em processadores Intel e AMD selecionados.
arm64
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.
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.
Matriz de suporte da plataforma
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 [RHEL8-tcmalloc-support] | ppc64le | Enterprise | ✓ | ✓ | ✓ | ✓ | ✓ |
RHEL/CentOS 7 | ppc64le | Enterprise | 6.0.7+ | ✓ | ✓ | ||
RHEL/Rocky/Alma 9 | s390x | Enterprise | ✓ | ✓ | |||
RHEL/Rocky/Alma 8 | 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. |
Plataformas recomendadas
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 [5]
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.
[5] | 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. |
Use os pacotes estáveis mais recentes
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.
MongoDB dbPath
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.
Concurrency
wiredTiger
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.
Consistência de dados
Registro no diário
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.
Preocupação de leitura
Você pode usar sessões causalmente consistentes para ler suas próprias gravações, se as gravações solicitarem confirmação.
Escreva preocupaçã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.
Networking
Usar ambientes de rede confiáveis
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:
Lista de verificação de segurança para implantações autogerenciadas
Proteção de rede e configuração para implantações autogerenciadas
Para usuários do Windows, considere o Artigo técnico do Windows Server sobre configuração TCP ao implementar MongoDB no Windows.
Desabilitar interface HTTP
A interface HTTP está desabilitada por padrão. Não habilite a interface HTTP em ambientes de produção.
Gerenciar tamanhos de repositórios de conexões
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.
Considerações sobre hardware
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.
Alocar RAM e CPU suficientes
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.
wiredTiger
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
.
Compressão e criptografia
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.
Usar discos de estado sólido (SSDs)
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.
Hardware de MongoDB e NUMA
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.
Configuração do NUMA no Windows
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.
Configuração do NUMA no Linux
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.
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 Certifique-se de que
mongod
emongos
sejam iniciados pornumactl
. 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 vianumactl
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 suasmongod
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:Copie o arquivo de serviço MongoDB padrão:
sudo cp /lib/systemd/system/mongod.service /etc/systemd/system/ Edite o arquivo
/etc/systemd/system/mongod.service
e atualize a declaraçãoExecStart
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 Aplique a alteração a
systemd
:sudo systemctl daemon-reload Reinicie todas as instâncias
mongod
em execução:sudo systemctl stop mongod sudo systemctl start mongod Se aplicável, repita estas etapas para quaisquer instâncias do
mongos
.
Você deve usar
numactl
para iniciar cada uma de suasmongod
instâncias, incluindo todos os servidores de configuração,mongos
instâncias e clientes.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 pacotenumactl
.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/*.
Sistemas de disco e armazenamento
Swap
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:
Atribua espaço de troca em seu sistema e configure o kernel para permitir apenas a troca sob alta carga de memória, ou
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.
RAID
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.
Sistemas de arquivos remotos (NFS)
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.
Separe componentes em diferentes dispositivos de armazenamento
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.
Agendamento
Agendamento para dispositivos virtuais ou hospedados na nuvem
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.
Agendamento para servidores físicos
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.
Arquitetura
Conjuntos de réplicas
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.
Clusters fragmentados
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.
Compressã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
ouzstd
, 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 quesnappy
ezstd
.
- zstd
- Oferece melhor taxa de compressão do que
snappy
ezlib
e tem um custo de CPU menor do quezlib
.
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.
Sincronização do Relógio
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 demaxAcceptableLogicalClockDriftSecs
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()
,NOW
eCLUSTER_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.
Considerações específicas da plataforma
MongoDB no Linux
Sistemas de arquivos e kernel
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.
Biblioteca do Sistema C
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
fsync()
em Diretórios
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.
Definir vm.swappiness
como 1
ou 0
“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 [6].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.
[6] | 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:
Edite o arquivo
/etc/sysctl.conf
e adicione a seguinte linha:vm.swappiness = 1 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
.
Configuração recomendada
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 deulimit
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 em64000
, o MongoDB gerará um aviso de inicialização.Desative páginas enormes transparentes. O MongoDB tem melhor desempenho com páginas normais de memória virtual (4.096 bytes). Consulte Configurações de páginas enormes transparentes.
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.
Bibliotecas de TLS/SSL e MongoDB
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_
.
MongoDB no Windows
Para instâncias MongoDB usando o mecanismo de armazenamento WiredTiger, o desempenho no Windows é comparável ao desempenho no Linux.
MongoDB em ambientes virtuais
Esta seção descreve considerações ao executar MongoDB em alguns dos ambientes virtuais mais comuns.
Para todas as plataformas, considere o agendamento.
AWS EC2
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 IOPS provisionadas para o armazenamento, com dispositivos separados para registro e dados. Não use o armazenamento efêmero (SSD) disponível na maioria dos tipos de instância, pois seu desempenho muda a cada momento. (A série
i
é uma exceção notável, mas é muito cara).Desative os modos de economia de energia DVFS e CPU.
Desativar o hyperthreading.
Use
numactl
para vincular a localidade da memória a um único soquete.
Azure
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 valortcp_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 soquetesmongod
emongos
e definidos como300
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 ou0x6ddd00
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
emongos
.
VMware
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.
KVM
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.
Monitoramento de desempenho
iostat
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
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.
Backups
Para fazer backups de seu banco de dados MongoDB, consulte a Visão geral dos métodos de backup do MongoDB.