O desempenho do MongoDB depende de como ele utiliza os recursos subjacentes. Ele armazena dados em disco, bem como na memória. Ele usa recursos de CPU para realizar operações e uma rede para se comunicar com seus clientes. Deve haver recursos adequados para apoiar sua vivacidade geral. Neste artigo, discutiremos vários requisitos de recursos para o sistema de banco de dados MongoDB e como podemos otimizá-los para obter o máximo desempenho.
Requisitos para MongoDB
Além de fornecer recursos de grande escala, como RAM e CPU para o banco de dados, o ajuste do sistema operacional também pode melhorar o desempenho até certo ponto. Os utilitários significativos necessários para estabelecer um ambiente MongoDB incluem:
- Espaço em disco suficiente
- Memória adequada
- Excelente conexão de rede.
O sistema operacional mais comum para o MongoDB é o Linux, então veremos como otimizá-lo para o banco de dados.
Condição de reinicialização.
Existem muitas técnicas de ajuste que podem ser aplicadas ao Linux. No entanto, como algumas alterações ocorrem sem reinicializar seu host, é sempre uma boa prática reinicializar após fazer as alterações para garantir que elas sejam aplicadas. Nesta seção, as implementações de ajuste que vamos discutir são:
- Pilha de rede
- Daemon NTP
- Limite de usuários Linux
- Sistema de arquivos e opções
- Segurança
- Memória Virtual
Pilha de rede
Como qualquer outro software, uma excelente conexão de rede fornece uma melhor interface de troca de solicitações e respostas com o servidor. No entanto, o MongoDB não é favorecido com os ajustes de rede do kernel padrão do Linux. Como o nome indica, este é um arranjo de muitas camadas que podem ser categorizadas em 3 principais:área do usuário, área do kernel e área do dispositivo. A área do usuário e a área do kernel são chamadas de host, pois suas tarefas são realizadas pela CPU. A área de dispositivos é responsável por enviar e receber pacotes através de uma interface chamada Network Interface Card. Para melhor desempenho com o ambiente MongoDB, o host deve ser limitado a um limite de interface de rede de 1 Gbps. Nesse caso, o que devemos ajustar são as configurações de taxa de transferência que incluem:
- net.core.somaxconn (aumentar o valor)
- net.ipv4.tcp_max_syn_backlog (aumentar o valor)
- net.ipv4.tcp_fin_timeout (reduzir o valor)
- net.ipv4.tcp_keepalive_intvl (reduzir o valor)
- net.ipv4.tcp_keepalive_time (reduzir o valor)
Para tornar essas alterações permanentes, crie um novo arquivo /etc/sysctl.d/mongodb-sysctl.conf se ele não existir e adicione essas linhas a ele.
net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_max_syn_backlog = 4096
Em seguida, execute o comando como usuário root /sbin/sysctl -p para aplicar as alterações permanentemente.
Daemon NTP
Network Time Protocol (NTP) é uma técnica para a qual um relógio de software de um sistema Linux é sincronizado com servidores de tempo da Internet. O MongoDB, sendo um cluster, depende da consistência de tempo entre os nós. Por esse motivo, é importante que o NTP seja executado permanentemente nos hosts MongoDB. A importância da configuração NTP é garantir o serviço contínuo do servidor por algum tempo definido após uma desconexão da rede. Por padrão, o NTP é instalado no lado do cliente, então para o MongoDB instalar o NTP em um sistema Linux com sabor Debian/Ubuntu, basta executar o comando:
$ sudo apt-get install ntp
Você pode visitar ntp.conf para ver a configuração do daemon NTP para diferentes sistemas operacionais.
Limite de usuários Linux
Às vezes, uma falha do lado do usuário pode acabar afetando todo o servidor e o sistema host. Para evitar isso, o sistema Linux foi projetado para cumprir alguns limites de recursos do sistema em relação aos processos que estão sendo executados por usuário. Sendo isso evidente, será inadequado implantar o MongoDB em tais configurações de sistema padrão, pois exigiria mais recursos do que a provisão padrão. Além disso, o MongoDB é frequentemente o principal processo de utilização do hardware subjacente, portanto, será predominante otimizar o sistema Linux para tal uso dedicado. O banco de dados pode então explorar totalmente os recursos disponíveis.
No entanto, não será conveniente desabilitar essas restrições de limite ou defini-las para um estado ilimitado. Por exemplo, se você tiver falta de armazenamento de CPU ou RAM, uma pequena falha pode se transformar em um grande problema e resultar na falha de outros recursos - por exemplo, SSH, que é vital para resolver o problema inicial.
Para obter melhores estimativas, você deve entender os requisitos de restrições no nível do banco de dados. Por exemplo, estimar o número de usuários que farão solicitações ao banco de dados e o tempo de processamento. Você pode consultar as principais coisas para monitorar para MongoDB. Um limite mais preferível para max-user-processes e open-files é 64000. Para definir esses valores, crie um novo arquivo se ele não existir como /etc/security/limits.de adicione estas linhas
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 64000
mongod hard nproc 64000
Para você aplicar essas alterações, reinicie seu mongod, pois as alterações se aplicam apenas a novos shells.
Sistema de arquivos e opções
O MongoDB emprega 3 tipos de sistemas de arquivos, ext3, ext4 e XFS para dados de banco de dados em disco. Para o mecanismo de armazenamento WiredTiger empregado para a versão MongoDB superior a 3, o XFS é melhor usado em vez do ext4, que é considerado como criando alguns problemas de estabilidade, enquanto o ext3 também é evitado devido ao seu baixo desempenho de pré-alocação. O MongoDB não usa a técnica de sistema de arquivos padrão para realizar uma atualização de metadados de tempo de acesso como outros sistemas. Portanto, você pode desabilitar as atualizações de tempo de acesso para economizar na pequena quantidade de atividade de E/S de disco utilizada por essas atualizações.
Isso pode ser feito adicionando um sinalizador noatime ao campo de opções do sistema de arquivos no arquivo etc/fstab para o disco que serve os dados do MongoDB.
$ grep "/var/lib/mongo" /proc/mounts
/dev/mapper/data-mongodb /var/lib/mongo ext4 rw, seclabel, noatime, data=ordered 0 0
Essa mudança só pode ser realizada quando você reiniciar ou reiniciar seu MongoDB.
Segurança
Entre os vários recursos de segurança que um sistema Linux possui, no nível do kernel está o Security-Enhanced Linux. Esta é uma implementação de controle de acesso obrigatório refinado. Ele fornece uma ponte para a política de segurança para determinar se uma operação deve continuar. Infelizmente, muitos usuários do Linux configuram este módulo de controle de acesso apenas para avisar ou o desativam totalmente. Isso geralmente ocorre devido a alguns contratempos associados, como erro inesperado de permissão negada. Este módulo, por mais que muitas pessoas o ignorem, desempenha um papel importante na redução de ataques locais ao servidor. Com esse recurso ativado e os modos correspondentes definidos como positivos, ele fornecerá um plano de fundo seguro para o seu MongoDB. Portanto, você deve habilitar o modo SELinux e também aplicar o modo Enforcing especialmente no início de sua instalação. Para alterar o modo SELinux para Enforcing:execute o comando
$ sudo setenforce Enforcing
Você pode verificar o modo SELinux em execução executando
$ sudo getenforce
Vários noves Torne-se um DBA do MongoDB - Trazendo o MongoDB para a produçãoSaiba mais sobre o que você precisa saber para implantar, monitorar, gerenciar e dimensionar o MongoDBBaixe gratuitamente Memória Virtual
Proporção suja
O MongoDB emprega a tecnologia de cache para aprimorar a busca rápida de dados. Nesse caso, páginas sujas são criadas e alguma memória será necessária para mantê-las. Portanto, a proporção suja se torna a porcentagem da memória total do sistema que pode conter páginas sujas. Na maioria dos casos, os valores padrão estão entre (25 - 35)%. Se esse valor for ultrapassado, as páginas serão confirmadas no disco e terão o efeito de criar uma pausa brusca. Para evitar isso, você pode configurar o kernel para sempre liberar os dados por meio de outra proporção conhecida como dirty_background_ratio cujo valor varia entre (10% - 15%) para o disco em segundo plano sem necessariamente criar a pausa forte.
O objetivo aqui é garantir um desempenho de consulta de qualidade. Você pode, portanto, reduzir a proporção de plano de fundo se seu sistema de banco de dados exigir muita memória. Se uma pausa forte for permitida, você pode acabar tendo dados duplicados ou alguns dados podem não ser gravados durante esse período. Você também pode reduzir o tamanho do cache para evitar que os dados sejam gravados no disco em pequenos lotes com frequência, o que pode acabar aumentando a taxa de transferência do disco. Para verificar o valor atualmente em execução, você pode executar este comando:
$ sysctl -a | egrep “vm.dirty.*_ratio”
e você será presenteado com algo assim.
vm.dirty_background_ratio = 10
vm.dirty_ratio = 20
Troca
É um valor que varia de 1 a 100 para o qual o comportamento do gerenciador de memória virtual pode ser influenciado. Configurá-lo para 100 implica trocar com força para o disco e configurá-lo para 0 direciona o kernel para trocar apenas para evitar problemas de falta de memória. O intervalo padrão para Linux é de 50 a 60, o que não é apropriado para sistemas de banco de dados. No meu próprio teste, definir o valor entre 0 e 10 é o ideal. Você sempre pode definir esse valor no /etc/sysctl.conf
vm.swappiness = 5
Você pode então verificar esse valor executando o comando
$ sysctl vm.swappiness
Para você aplicar essas alterações execute o comando /sbin/sysctl -p ou você pode reinicializar seu sistema.