Embora o MongoDB tenha passado quase uma década alcançando a maturidade (lançamento inicial em fevereiro de 2009), a tecnologia é um mistério para aqueles experientes em ambientes convencionais de banco de dados relacional (RDBMS). Integrar o NoSQL em um ambiente existente sem conhecimento aprofundado pode ser um desafio. Não é incomum ver o MongoDB rodando junto com MySQL ou outro banco de dados RDBMS.
A experiência do RDBMS pode ajudar a entender alguns dos processos, mas você precisa saber como traduzir seu conhecimento para o mundo NoSQL. O gerenciamento de ambientes de produção envolve etapas como implantação, monitoramento do tempo de atividade e desempenho, manutenção da segurança do sistema, gerenciamento de HA, backups e assim por diante. Tanto o RDBMS quanto o NoSQL são opções viáveis, mas existem diferenças críticas específicas entre os dois que os usuários devem ter em mente ao implementar ou gerenciar o MongoDB. A tecnologia muda rapidamente e precisamos nos adaptar rapidamente.
Quando o MongoDB é subitamente sua responsabilidade, as ferramentas de gerenciamento garantem que os bancos de dados MongoDB que você gerencia sejam estáveis e seguros. O uso de processos e automação predefinidos pode não apenas economizar seu tempo, mas também proteger contra erros comuns. Uma plataforma de gerenciamento que aborda sistematicamente todos os diferentes aspectos do ciclo de vida do banco de dados será mais robusta do que juntar várias soluções pontuais.
No coração do ClusterControl está sua funcionalidade de automação que permite automatizar as tarefas de banco de dados que você precisa executar regularmente, como implantar novos bancos de dados, adicionar e dimensionar novos nós, gerenciar backups, alta disponibilidade e failover, alterações de topologia, atualizações e muito mais. O ClusterControl oferece segurança programada, mantendo a integridade de sua infraestrutura de banco de dados. Além disso, com o ClusterControl, os usuários do MongoDB não estão mais sujeitos ao aprisionamento do fornecedor; algo que foi questionado por muitos recentemente. Você pode implantar e importar uma variedade de versões e fornecedores do MongoDB de um único console gratuitamente. Os usuários do MongoDB geralmente precisam usar uma mistura de ferramentas e scripts caseiros para atingir seus requisitos, e é bom saber que você pode encontrá-los combinados em um único produto.
Neste artigo, mostraremos como implantar e gerenciar o MongoDB 4.0 de maneira automatizada. Você vai encontrar aqui como fazer:
- Instalação do ClusterControl
- Processo de implantação do MongoDB
- Implantar um novo cluster
- Importar cluster existente
- Escala do MongoDB
- Escala de leitura (replicaSet)
- Escala de escala (fragmentação)
- Protegendo o MongoDB
- Monitoramento e tendências
- Backup e recuperação
Instalação do ClusterControl
Para começar com o ClusterControl, você precisa de uma máquina virtual ou host dedicado. A VM e os requisitos de sistemas suportados são descritos aqui. A VM base pode começar a partir de 2 GB, 2 núcleos e espaço em disco de 20 GB de espaço de armazenamento, no local ou na nuvem.
A instalação está bem descrita na documentação, mas basicamente, trata-se do download do script de instalação que o guiará pelo assistente. O script do assistente configura o banco de dados interno, instala os pacotes e repositórios necessários e faz outros ajustes necessários. Para os ambientes de bloqueio de internet, você pode usar o processo de instalação offline.
O ClusterControl requer acesso SSH aos hosts do banco de dados e o monitoramento pode ser baseado em agente ou sem agente. A gestão é sem agente.
A configuração do SSH sem senha para todos os nós de destino (ClusterControl e todos os hosts de banco de dados) envolve a execução dos seguintes comandos no servidor ClusterControl:
$ ssh-keygen -t rsa # press enter on all prompts
$ ssh-copy-id -i ~/.ssh/id_rsa [ClusterControl IP address]
$ ssh-copy-id -i ~/.ssh/id_rsa [Database nodes IP address] # repeat this to all target database nodes
Implantação e dimensionamento do MongoDB
Implantar um novo cluster MongoDB 4.0
Uma vez que entramos na interface ClusterControl, a primeira coisa a fazer é implantar um novo cluster ou importar um existente. A nova versão 1.7.1 apresenta suporte para a versão 4.0. Agora você pode implantar/importar e gerenciar o MongoDB v4.0 com suporte para conexões SSL.
Selecione a opção “Deploy Database Cluster” e siga as instruções que aparecem.
ClusterControl Deploy Database Cluster
Ao escolher o MongoDB, devemos especificar Usuário, Chave ou Senha e porta para conectar por SSH aos nossos servidores. Também precisamos do nome do nosso novo cluster e se queremos que o ClusterControl instale o software e as configurações correspondentes para nós.
Após configurar as informações de acesso SSH, devemos inserir os dados para acessar nosso banco de dados. Também podemos especificar qual repositório usar. A configuração do repositório é um aspecto importante para servidores de banco de dados e clusters. Você pode ter três tipos de repositório ao implantar o servidor/cluster de banco de dados usando o ClusterControl:
- Use o repositório do fornecedor
Provisione software configurando e usando o repositório de software preferido do fornecedor do banco de dados. O ClusterControl instalará a versão mais recente do que é fornecido pelo repositório do fornecedor do banco de dados. - Não configurar repositórios de fornecedores
Provisione software usando o repositório de software pré-existente já configurado nos nós. O usuário deve configurar o repositório de software manualmente em cada nó do banco de dados e o ClusterControl usará esse repositório para implantação. Isso é bom se os nós do banco de dados estiverem sendo executados sem conexões com a Internet. - Usar repositórios espelhados (criar novo repositório)
Crie e espelhe o repositório do fornecedor de banco de dados atual e, em seguida, implante usando o repositório espelhado local. Isso permite que você “congele” as versões atuais dos pacotes de software.
Na próxima etapa, precisamos adicionar nossos servidores ao cluster que vamos criar. Ao adicionar nossos servidores, podemos inserir o IP ou o nome do host. Para este último, devemos ter um servidor DNS ou ter adicionado nossos servidores MongoDB ao arquivo de resolução local (/etc/hosts) do nosso ClusterControl, para que ele possa resolver o nome correspondente que você deseja adicionar. Para nosso exemplo, implantaremos um ReplicaSet com três servidores, um primário e dois secundários. É possível implantar apenas 2 nós MongoDB (sem árbitro). A ressalva dessa abordagem não é o failover automático, pois uma configuração de 2 nós é vulnerável ao cérebro dividido. Se o nó primário ficar inativo, o failover manual será necessário para tornar o outro servidor primário. O failover automático funciona bem com 3 nós ou mais. Recomenda-se que um conjunto de réplicas tenha um número ímpar de membros votantes. A tolerância a falhas para um conjunto de réplicas é o número de membros que podem ficar indisponíveis e ainda deixar membros suficientes no conjunto para eleger um primário. A tolerância a falhas para três membros é um, para cinco é dois etc.
Na mesma página, você pode escolher entre diferentes versões do MongoDB:
ClusteControl Deploy MongoDB versão 4.0
Quando tudo estiver definido, aperte o botão de implantação. Você pode monitorar o status da criação do nosso novo cluster no monitor de atividades do ClusterControl. Uma vez finalizada a tarefa, podemos ver nosso cluster na tela principal do ClusterControl e na visualização de topologia.
Visualização de topologia de controle de cluster
Como podemos ver na imagem, uma vez criado nosso cluster, podemos realizar várias tarefas nele, como converter o conjunto de réplicas em shard ou adicionar nós ao cluster.
Escala de controle de cluster
Importar um novo cluster
Também temos a opção de gerenciar um cluster existente importando-o para o ClusterControl. Tal ambiente pode ser criado pelo ClusterControl ou outros métodos como a instalação do docker.
ClusterControl importar MongoDB
Primeiro, devemos inserir as credenciais de acesso SSH aos nossos servidores. Em seguida, inserimos as credenciais de acesso ao nosso banco de dados, o diretório de dados do servidor e a versão. Adicionamos os nós por IP ou nome de host, da mesma forma que quando implantamos, e pressionamos Importar. Quando a tarefa estiver concluída, estamos prontos para gerenciar nosso cluster a partir do ClusterControl.
Escalando o MongoDB
Um dos pilares do MongoDB é que ele é construído com alta disponibilidade e dimensionamento em mente. O dimensionamento pode ser feito verticalmente adicionando mais recursos ao servidor ou horizontalmente com mais nós. O dimensionamento horizontal é o que o MongoDB é bom, e não é muito mais do que distribuir a carga de trabalho para várias máquinas. Na verdade, estamos usando várias caixas de hardware de baixo custo, em vez de atualizar para um servidor de alto desempenho mais caro. O MongoDB oferece dimensionamento de leitura e gravação, e descobriremos as diferenças entre essas duas estratégias para você. A escolha do dimensionamento de leitura ou gravação depende da carga de trabalho do seu aplicativo:se seu aplicativo tende a ler com mais frequência do que grava dados, você provavelmente desejará usar os recursos de dimensionamento de leitura do MongoDB.
Com o ClusterControl, adicionar mais servidores ao cluster é uma etapa fácil. Você pode fazer isso a partir da GUI ou CLI. Para usuários mais avançados, você pode usar o ClusterControl Developer Studio e escrever uma condição de base de recursos para expandir seu cluster horizontalmente.
MongoDB ReplicaSet
Fragmentação
A solução de fragmentação do MongoDB é semelhante às estruturas de fragmentação existentes para outras grandes soluções de banco de dados. Ele faz uso de uma solução de pesquisa típica, onde a fragmentação é definida em uma chave de fragmentação e os intervalos são armazenados dentro de um banco de dados de configuração. O MongoDB trabalha com três componentes para encontrar o fragmento correto para seus dados. Um ambiente MongoDB fragmentado típico se parece com isso:
Fragmentação do MongoDB
O primeiro componente usado é o roteador de fragmentos chamado mongos. Todas as operações de leitura e gravação devem ser enviadas ao roteador de fragmentos, fazendo com que todos os fragmentos atuem como um único banco de dados para o aplicativo cliente. O roteador de estilhaços roteará as consultas para os estilhaços apropriados consultando o Configserver.
ClusterControl Converter em fragmento
O gerenciamento de fragmentos é realmente fácil no MongoDB. Você pode adicionar e remover shards online e o roteador de shard MongoDB se ajustará automaticamente ao que você disser. Se você deseja saber mais a fundo sobre a melhor forma de gerenciar shards, leia nossa postagem no blog sobre como gerenciar shards do MongoDB.
Protegendo o MongoDB
Recursos relacionados ClusterControl para MongoDB MongoDB Automation &Management with ClusterControlO MongoDB vem com muito pouca segurança pronta para uso:por exemplo, a autenticação é desabilitada por padrão. Em outras palavras:por padrão, qualquer pessoa tem direitos de root em qualquer banco de dados. Uma das mudanças que o MongoDB aplicou para mitigar os riscos foi alterar sua vinculação padrão para 127.0.0.1. Isso evita que ele seja vinculado ao endereço IP externo, mas, naturalmente, isso será revertido pela maioria das pessoas que o instalarem. O ClusterControl remove erros humanos e fornece acesso a um conjunto de recursos de segurança para proteger automaticamente seus bancos de dados contra hacks e outras ameaças. Publicamos anteriormente um pequeno vídeo com dicas de segurança.
A nova versão do ClusterControl oferece suporte SSL para conexões MongoDB. A ativação do SSL adiciona outro nível de segurança para comunicação entre os aplicativos (incluindo o ClusterControl) e o banco de dados. Os clientes MongoDB abrem conexões criptografadas com os servidores de banco de dados e verificam a identidade desses servidores antes de transferir qualquer informação sensível.
Para habilitar a conexão SSL, você precisa usar o cliente s9s mais recente. Você pode instalá-lo com
wget http://repo.severalnines.com/s9s-tools/install-s9s-tools.sh
chmod 755 install-s9s-tools.sh
./install-s9s-tools.sh
Ou siga outros métodos de instalação possíveis descritos aqui.
Depois de ter as ferramentas s9s instaladas (versão min 1.7-93.1), você pode usar o sinalizador --enable-ssl para habilitar a conexão SSL.
Exemplo abaixo:
[[email protected] ~]# s9s cluster --cluster-id=3 --enable-ssl --log
This is an RPC V2 job (a job created through RPC V2).
The job owner is 'admin'.
Accessing '/.runtime/jobs/jobExecutor' to execute...
Access ok.
Stopping the cluster
node1:27017: Node is already stopped by the user.
node2:27017: Node is already stopped by the user.
node3:27017: Node is already stopped by the user.
Checking/generating (expire 1000 days) server and CA certificate.
node1:27017: setting up SSL as required way of connection.
Using certificate 'mongodb/cluster_3/server'
node1:27017: installed /etc/ssl/mongodb/cluster_3/server.crt, /etc/ssl/mongodb/cluster_3/server.key and /etc/ssl/mongodb/cluster_3/server_ca.crt
node1:27017: Deploying client certificate 'mongodb/cluster_3/client'
Writing file 'node1:/etc/mongod.conf'.
node1:27017: /etc/mongod.conf [mongod] set: ssl_cert, ssl_key and ssl_ca values.
node2:27017: setting up SSL as required way of connection.
Using certificate 'mongodb/cluster_3/server'
node2:27017: installed /etc/ssl/mongodb/cluster_3/server.crt, /etc/ssl/mongodb/cluster_3/server.key and /etc/ssl/mongodb/cluster_3/server_ca.crt
node2:27017: Deploying client certificate 'mongodb/cluster_3/client'
Writing file 'node2:/etc/mongod.conf'.
node2:27017: /etc/mongod.conf [mongod] set: ssl_cert, ssl_key and ssl_ca values.
node3:27017: setting up SSL as required way of connection.
Using certificate 'mongodb/cluster_3/server'
node3:27017: installed /etc/ssl/mongodb/cluster_3/server.crt, /etc/ssl/mongodb/cluster_3/server.key and /etc/ssl/mongodb/cluster_3/server_ca.crt
node3:27017: Deploying client certificate 'mongodb/cluster_3/client'
Writing file 'node3:/etc/mongod.conf'.
node3:27017: /etc/mongod.conf [mongod] set: ssl_cert, ssl_key and ssl_ca values.
Starting the cluster
node3:27017: Doing some preparation for starting the node.
node3:27017: Disable transparent huge page and its defrag according to mongo suggestions.
node3:27017: Checking file permissions and ownership.
node3:27017: Starting mongod MongoDb server with command:
ulimit -u 32000 -n 32000 && runuser -s /bin/bash mongod '-c mongod -f /etc/mongod.conf'
node3:27017: Verifing that 'mongod' process is started.
SSL setup done.
O ClusterControl executará todas as etapas necessárias, incluindo a criação de certificação em todos os nós do cluster. Esses certificados podem ser mantidos posteriormente na guia Gerenciamento de chaves.
Gerenciamento de chaves do ClusterControl
Monitoramento
Ao trabalhar com sistemas de banco de dados, você deve ser capaz de monitorá-los. Isso permitirá que você identifique tendências, planeje atualizações ou melhorias ou reaja de forma eficaz a quaisquer problemas ou erros que possam surgir.
Visão geral do MongoDB do ClusterControl
O novo ClusterControl 1.7.1 adiciona monitoramento de alta resolução para MongoDB baseado. Está usando o Prometheus como o armazenamento de dados com a linguagem de consulta PromQL. A lista de painéis inclui MongoDB Server, MongoDB ReplicaSet, System Overview e Cluster Overview Dashboards. O ClusterControl instala os agentes do Prometheus, configura as métricas e mantém o acesso à configuração dos exportadores do Prometheus por meio de sua GUI, para que você possa gerenciar melhor a configuração dos parâmetros, como sinalizadores do coletor para os exportadores (Prometheus). Descrevemos em detalhes o que pode ser monitorado recentemente no artigo How to Monitor MongoDB with Prometheus &ClusterControl.
ClusterControl MongoDB SCUMM Dashboards
Alertando
Como operador de banco de dados, precisamos ser informados sempre que algo crítico ocorrer em nosso banco de dados. Os três métodos principais no ClusterControl para obter um alerta incluem:
- notificações por e-mail
- integrações
- consultores
Você pode definir as notificações por e-mail em um nível de usuário. Vá para Configurações> Notificações por e-mail. Onde você pode escolher entre criticidade e tipo de alerta a ser enviado.
O próximo método é usar os serviços de integração. Isso é para passar a categoria específica de eventos para o outro serviço, como tickets do ServiceNow, Slack, PagerDuty etc., para que você possa criar métodos avançados de notificação e integrações em sua organização.
ClusterControl Integration Services
A última é envolver análises de métricas sofisticadas na seção Advisor, onde você pode criar verificações e gatilhos inteligentes. Um exemplo aqui pode ser uma previsão de uso de espaço em disco ou dimensionamento de cluster adicionando nós quando a carga de trabalho atingir o nível predefinido.
ClusterControl Advisors para MongoDB
Backup e recuperação
Agora que você tem sua réplica do MongoDB configurada e funcionando, e tem seu monitoramento no lugar, é hora da próxima etapa:garantir que você tenha um backup de seus dados.
ClusterControl Criar política de backup
O ClusterControl fornece uma interface para gerenciamento de backup do MongoDB com suporte para agendamento e relatórios criativos. Ele oferece duas opções para métodos de backup.
- Mongodump
- Backup consistente do Mongodb
O Mongodump despeja todos os dados no formato Binary JSON (BSON) para o local especificado. O Mongorestore pode mais tarde usar os arquivos BSON para restaurar seu banco de dados. O backup consistente do ClusterControl MongoDB inclui as transações do oplog que estavam em execução ao fazer o backup.
Criptografia de backup do ClusterControl
Uma boa estratégia de backup é uma parte crítica de qualquer sistema de gerenciamento de banco de dados. O ClusterControl oferece muitas opções para backups e recuperação/restauração.
Controle de agendamento de backup do ClusterControl
A retenção de backup do ClusterControl é configurável; você pode optar por manter seu backup por qualquer período de tempo ou nunca excluir backups. A criptografia AES256 é empregada para proteger seus backups contra elementos invasores. Para uma recuperação rápida, os backups podem ser restaurados diretamente no cluster de backup - o ClusterControl lida com o processo de restauração completo desde o lançamento até a recuperação do cluster, removendo etapas manuais propensas a erros do processo.