Baixe o app para aproveitar ainda mais
Prévia do material em texto
12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 1/61 BANCO DE DADOS APLICADO ABANCO DE DADOS APLICADO A BIG DATABIG DATA TÓPICOS AVANÇADOS EMTÓPICOS AVANÇADOS EM BANCOS DE DADOS NÃOBANCOS DE DADOS NÃO RELACIONAIS (NOSQL)RELACIONAIS (NOSQL) Autor: PhD Everton Gomede Reviso r : I sa be l Cr ist in a S iqu e ira da S i lva INICIAR 1.00 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 2/61 Introdução A continuidade dos serviços baseados em uso massivo de dados, principalmente fornecidos por bancos NoSQL, apresenta alguns desa�os. Para isso, vamos estudar como superar tais desa�os com o MongoDB e entender como o monitoramento de bancos de dados não relacionais pode ser feito, quais ferramentas podemos utilizar e quais são os benefícios disso. Depois, veremos quais seriam as estratégias para recuperação de desastres, e os backups e as formas de recuperação do MongoDB. Além disso, estudaremos estratégias para garantir a segurança e a disponibilidade, pois elas impactam diretamente a continuidade dos serviços. Por �m, aprenderemos sobre os conceitos de continuidade de bancos de dados não relacionais, de forma geral. Isso servirá como base para de�nições de estratégias no geral. introdução 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 3/61 Depois de implantar o MongoDB em produção, você vai querer �car de olho nele. E se o desempenho está se degradando lentamente ou se as falhas estão ocorrendo com frequência, você vai querer ser informado sobre isso. É aí que entra o monitoramento. Vamos começar com o tipo mais simples de monitoramento: logging. Então, vamos explorar os comandos integrados que fornecem o máximo de informações sobre o MongoDB em execução no servidor – esses comandos são a base do utilitário mongostat e do console web, que descreveremos em breve. Em seguida, veremos o monitoramento de MMS fornecido pela empresa MongoDB, bem como algumas recomendações sobre ferramentas de monitoramento externo e dois utilitários de diagnóstico: bsondump e mongosniff. Logging Monitoramento deMonitoramento de Bancos de DadosBancos de Dados não relacionaisnão relacionais 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 4/61 Log é o primeiro nível de monitoramento; como tal, você deve planejar manter registros para todas as suas implantações (DOURADO, 2013). Isso geralmente não é um problema, porque o MongoDB requer que você especi�que a opção - -logpath ao executá-lo em segundo plano. Mas existem algumas con�gurações extras para estar ciente. Para habilitar o registro detalhado, inicie o processo mongod com a opção -vvvvv (quanto mais v, mais detalhada a saída). Isso é útil se, por exemplo, você precisar depurar algum código e desejar registrar todas as consultas. Mas esteja atento: esse registro detalhado tornará seus logs muito grandes e pode afetar o desempenho do servidor. Se seus registros se tornarem muito pesados, lembre-se de que você sempre pode armazenar seus registros em uma partição diferente. Em seguida, pode iniciar o mongod com a opção --logappend. Isso irá anexá-lo a um registro existente, em vez de movê-lo, e anexá um carimbo de data/hora ao nome do arquivo, que é o comportamento-padrão. Finalmente, se você tiver um processo MongoDB de longa duração, pode querer escrever um script que rotaciona periodicamente os arquivos de log. MongoDB fornece o comando logrotate para este propósito. Veja como executá-lo a partir do shell: use admin db.runCommand({logrotate: 1}) O envio do sinal SIGUSR1 para o processo também executa o comando logrotate. Veja como enviar esse sinal para o número de processo 12345: $ kill -SIGUSR1 12345 Você pode encontrar o ID do processo para o qual deseja enviar o sinal usando o comando ps, assim: 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 5/61 $ ps –ef | grep mongo Observe que o comando kill nem sempre é tão terrível quanto parece. Ele apenas envia um sinal para um processo em execução, mas foi nomeado nos dias em que a maioria dos sinais (ou todos) encerrou o processo (DOURADO, 2013). Mas executar kill com a opção de linha de comando -9 encerrará um processo de forma abrupta, e isso deve ser evitado tanto quanto possível em sistemas de produção. Comandos de diagnóstico do MongoDB O MongoDB tem vários comandos de banco de dados usados para relatar o estado interno, que são a base de todos os aplicativos de monitoramento do MongoDB. Aqui está uma referência rápida para alguns dos comandos que você pode achar úteis: a. Estatísticas globais do servidor: db.serverStatus() b. Estatísticas para a operação em execução: db.currentOp() c. Incluir estatísticas para operações de sistema ocioso: db.currentOp(true) d. Por contadores de banco de dados e estatísticas de atividade: db.runCommand({top: 1}) e. Estatísticas de uso de memória e disco: db.stats() A saída de todos esses comandos se aperfeiçoa a cada versão do MongoDB; portanto, documentar em um meio semipermanente como este estudo nem sempre é útil (CAMPELLO; CALDEIRA, 2014). Consulte a documentação de sua versão do MongoDB para descobrir o que cada campo apresenta como saída. Ferramentas de diagnóstico MongoDB 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 6/61 Além dos comandos de diagnóstico listados anteriormente, o MongoDB vem com algumas ferramentas úteis. A maioria delas é construída nos comandos anteriores, e elas podem ser facilmente implementadas usando-se um driver ou o shell. Aqui está uma introdução rápida ao que cobrimos nesta seção: a. mongostat – estatísticas globais do sistema. b. mongotop – estatísticas de operação global. c. mongosniff – tráfego de rede MongoDB. d. bsondump – exibe arquivos BSON como JSON. MONGOSTAT O método db.currentOp() mostra apenas as operações en�leiradas ou em andamento em um momento particular no tempo. Da mesma forma, o comando serverStatus fornece um ponto instantâneo de vários campos e contadores do sistema. Mas às vezes você precisa de uma visão da atividade em tempo real do sistema, e é aí que entra o mongostat. Modelado após iostat e outras ferramentas semelhantes, mongostat pesquisa o servidor em um intervalo �xo e exibe uma série de estatísticas, desde o número de inserções por segundo até a quantidade de residentes na memória, para a frequência de perdas de página da árvore B. Você pode invocar o comando mongostat no localhost, e a votação ocorrerá uma vez por segundo: $ mongostat Ele também é altamente con�gurável, e você pode iniciá-lo com --help para ver todas as opções. Por exemplo, pode usar a opção –-host para se conectar a um host e à porta além do padrão de localhost: 27017. Um dos recursos mais notáveis é a descoberta de cluster; quando você inicia o mongostat com a opção --discover, pode usar a opção –host para apontá-lo para um único nó, e ele descobrirá os nós restantes em um conjunto de réplicas ou em um cluster fragmentado. Em seguida, exibe todas as estatísticas do cluster agregadas. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 7/61 MONGOTOP Semelhante à forma como mongostat é a ferramenta externa para o db.currentOp() e server-status, mongotop é a ferramenta externa para o comando superior. Você pode correr isso exatamente da mesma maneira que mongostat, supondo que você tenha um servidor em execução na máquina local e ouvindo na porta- padrão: $ mongotopTal como acontece com mongostat, você pode executar este comando com –help para ver uma série de opções úteis de con�guração. MONGOSNIFF O comando mongosniff identi�ca pacotes de um cliente para o servidor MongoDB e os imprime de forma inteligível (DOURADO, 2013). Se estiver escrevendo um driver ou depurando uma conexão errônea, esta é a sua ferramenta. Você pode iniciar com o seguinte comando para escutar a interface de rede local na porta-padrão: sudo mongosniff --source NET I0 Então, quando se conectar com qualquer cliente – digamos, o shell do MongoDB –, você obterá um �uxo da conversa da rede: 127.0.0.1:58022 -->> 127.0.0.1:27017 test.$cmd 61 bytes id:89ac9c1d 2309790749 query: { isMaster: 1.0 } ntoreturn: -1 127.0.0.1:27017 <<-- 127.0.0.1:58022 87 bytes 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 8/61 reply n:1 cursorId: 0 { ismaster: true, ok: 1.0 } Aqui, você pode ver um cliente executando o comando isMaster, que é representado como um consulta para {isMaster: 1.0} contra a coleção especial de teste $cmd. Você também pode ver que o documento de resposta contém ismaster: true, indicando que o nó ao qual este comando foi enviado era de fato o principal. Você pode ver todos os mongosniff opções executando-o com --help. BSONDUMP Outro comando útil é o bsondump, que permite examinar arquivos BSON brutos. Os arquivos BSON são gerados pelo comando mongodump e por rollbacks de conjunto de réplicas (CAMPELLO; CALDEIRA, 2014). Por exemplo, digamos que você tenha alocado uma coleção com um único documento. Se essa coleção acabar em um arquivo chamado users.bson, então pode examinar o conteúdo facilmente: $ bsondump users.bson {"_id": ObjectId ("4d82836dc3efdb9915012b91"), "nome": "Kyle"} Como pode ver, o bsondump mostra o BSON como JSON por padrão. Se estiver trabalhando com depuração, você vai querer ver a composição real dos tipos e tamanhos de BSON. Por isso, execute o comando no modo de depuração: $ bsondump --type = debug users.bson Isso lhe dá o tamanho total do objeto, os tipos dos dois campos (7 e 2) e os tamanhos desses campos. O web console 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_ID… 9/61 Finalmente, o MongoDB fornece algum acesso às estatísticas por meio de uma interface da web e um REST servidor. A partir da v3.0, esses sistemas são antigos e estão em desenvolvimento ativo (CAMPELLO; CALDEIRA, 2014). Além disso, eles relatam as mesmas informações disponíveis por meio de outras ferramentas ou comandos de banco de dados apresentados anteriormente. Se quiser usar esses sistemas, certi�que-se de olhar a documentação atual e considere cuidadosamente as implicações de segurança. Serviço de monitoramento MongoDB MongoDB, Inc. fornece monitoramento de MMS gratuitamente, o que não só permite que você visualize painéis para ajudá-lo a entender seu sistema, mas também fornece uma maneira fácil de compartilhar as informações do seu sistema com suporte MongoDB, que é indispensável caso precise de ajuda com seu sistema. O monitoramento de MMS também pode ser licenciado como uma versão auto-hospedada para grandes empresas, com contratos pagos. Para começar, tudo que você precisa fazer é criar uma conta no site de monitoramento de MMS em https://mms.mongodb.com. Então, verá instruções para orientá-lo no processo de con�guração MMS, mas não as abordaremos aqui. Aplicativos de monitoramento externo A maioria das implantações sérias exigirá um aplicativo de monitoramento externo. Nagios e Munin são dois sistemas populares de monitoramento de código aberto usados para �car de olho em muitas implementações do MongoDB. Você pode usar cada um deles com o MongoDB instalando um simples plug-in de código aberto. Escrever um plug-in para qualquer aplicativo de monitoramento arbitrário não é difícil; envolve, principalmente, a execução de vários comandos de estatísticas em um banco de dados MongoDB ativo. Os comandos serverStatus, dbstats e collstats geralmente fornecem todas as informações necessárias, e você pode obter todos eles diretamente da interface HTTP REST, evitando a necessidade de um driver (DOURADO, 2013). Finalmente, não se esqueça da riqueza de ferramentas disponíveis para monitoramento de https://mms.mongodb.com/ 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 10/61 sistemas de baixo nível. Por exemplo, o comando iostat pode ser útil para diagnosticar o desempenho de problemas do MongoDB. A maioria dos problemas de desempenho em implantações MongoDB pode ser rastreada por uma única fonte: o disco rígido. No exemplo a seguir, usamos a opção -x para mostrar estatísticas estendidas; especi�que 2 para exibir essas estatísticas em intervalos de dois segundos: $ iostat -x 2 Para uma descrição detalhada de cada um desses campos ou para detalhes sobre sua versão especí�ca de iostat, consulte as páginas de manual do seu sistema (BAHGA; MADISETTI, 2016). Para um diagnóstico rápido, concentre-se em duas das colunas mostradas: a. A coluna de espera indica o tempo médio em milissegundos para servir o I/O das solicitações de HTTP. Esta média inclui o tempo gasto na �la de I/O e o tempo gasto realmente atendendo às solicitações de I/O. b. % útil é a porcentagem da CPU durante a qual as solicitações de I/O foram emitidas para o dispositivo, que essencialmente se traduz no uso de largura de banda do dispositivo. O iostat mostra o uso moderado do disco (BAHGA; MADISETTI, 2016). O tempo médio de espera em I/O é cerca de 100 ms (dica: isso é muito!), e a utilização é de cerca de 30%. Se você fosse investigar os logs do MongoDB nesta máquina, provavelmente veria várias operações (consultas, inserções ou outros). Na verdade, são essas operações lentas que inicialmente o alertariam sobre um problema potencial. A saída iostat pode ajudá-lo a con�rmar o problema. Cobrimos muitas maneiras de diagnosticar e monitorar um sistema em execução para mantê-lo funcionando sem problemas, mas agora vamos entrar em um aspecto inevitável de uma implantação de produção: backups. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 11/61 Ferramentas de diagnóstico MongoDB A instalação do MongoDB também possibilita que uma ferramenta seja instalada (BAHGA; MADISETTI, 2016). A MongoDB Compass é uma ferramenta que permite o gerenciamento de bancos, coleções, documentos, importação e monitoramento. Ela é ideal para que o gerenciamento seja feito de forma visual e que sua equipe de NOC (network operations center, em inglês, centro de operações de rede) possa acompanhar, em tempo real, como o servidor do MongoDB está operando. A �gura a seguir mostra um exemplo da ferramenta #PraCegoVer: a imagem apresenta um exemplo de monitoramento do banco de dados MongoDB fornecido pela ferramenta MongoDB Compass. Existem quatro grá�cos de linha apresentando IOPS, processamento, memória e rede. Como podemos ver na Figura 4.1, existem diversas informações que são coletadas, processadas, agrupadas e exibidas em tempo real. Isso é de grande importância para a equipe de infraestrutura, que geralmente utiliza grandes Figura 4.1 - Exemplo de monitoramento fornecido pela ferramenta MongoDB Compass Fonte: Adaptada de Mongo DB Compass (2020). 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 12/61 painéis de monitoramento para acompanhar todos os elementos presentes na entrega dos serviços. Outro ponto interessante da ferramenta é a possibilidade de monitorar planos de execução. Um plano de execução é o caminho escolhido pelo MongoDB para localizar os dados de acordo com os predicados da consulta.Dessa forma, podemos acompanhar quais índices são utilizados e monitorar o desempenho da consulta, para identi�car eventuais gargalos e pontos de melhoria. A Figura 4.2 exibe um exemplo de plano de execução para uma das coleções. #PraCegoVer: a imagem apresenta um exemplo de análise de índices fornecido pela ferramenta MongoDB Compass. A imagem contém três elementos principais: um �ltro para escolha dos parâmetros de análise, uma imagem com um resumo dos índices e, por �m, os detalhes do índice selecionado. De forma adicional, podemos monitorar o que está sendo armazenado nas coleções. Isso é importante para entender a qualidade dos dados e, consequentemente, monitorar se poderemos ter surpresas por conta de erros Figura 4.2 - Exemplo de análise de índices fornecido pela ferramenta MongoDB Compass Fonte: Adaptada de Mongo DB Compass (2020). 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 13/61 na coleta dos documentos. A Figura 4.3. exibe um exemplo de análise de dados para os documentos coletados na coleção chamada catalog.books. #PraCegoVer: a imagem apresenta um exemplo da ferramenta MongoDB Compass para análise de dados dentro de uma coleção. Existe a análise de três características, sendo elas pageCount, publishedDate e shortedDescription. Esta coleção está contida no banco de dados Catalog. Portanto, a ferramenta MongoDB Compass pode ser uma grande aliada para a equipe de NOC e também para o pessoal de desenvolvimento, pois permite monitorar uma miríade de informações para facilitar a construção de aplicações de big data que fazem uso intensivo de bancos de dados NoSQL, como é o caso do MongoDB. Além disso, tal ferramenta pode ser um ponto de partida para a resolução dos mais variados problemas que se possa encontrar em operação. Figura 4.3 - Exemplo de análise dos dados de uma coleção feita pelo MongoDB Compass Fonte: Adaptada de Mongo DB Compass (2020). 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 14/61 praticarVamos Praticar O primeiro passo para um bom diagnóstico envolve obter bons dados. O banco de dados MongoDB apresenta uma série de ferramentas para realizar um monitoramento efetivo. Além disso, existe a possibilidade de combinar tais ferramentas, como é o caso do MongoDB Compass. Assinale a alternativa que indique corretamente qual é a ferramenta que podemos utilizar para veri�car como a interface de rede lo está sendo utilizada: BANKER, K. et al. MongoDB in action. 2. ed. Nova Iorque: Manning Publications, 2016. a) mongostat. Feedback: alternativa incorreta, pois a ferramenta mongostat obtém as estatísticas globais do sistema. Tal ferramenta possibilita a obtenção das estatísticas do banco e não estatísticas da interface de rede que seria necessária para monitorar a interface lo. b) mongosniff. Feedback: alternativa correta, pois a ferramenta bsondump exibe o tráfego de rede MongoDB. Isso pode ser aplicado a qualquer uma das interfaces e permite o monitoramento tanto da entrada quanto da saída do �uxo de bits do banco de dados MongoDB c) mongotop. Feedback: alternativa incorreta, pois a ferramenta mongotop obtém as estatísticas de operação global. Tal ferramenta possibilita a obtenção das estatísticas do processamento atual do banco de dados, e não estatísticas da interface de rede que seriam necessárias para monitorar a interface lo. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 15/61 d) bsondump. Feedback: alternativa incorreta, pois a ferramenta bsondump exibe arquivos BSON como JSON. Tal ferramenta possibilita a obtenção dos dados do banco em um formato legível para os desenvolvedores, e não estatísticas da interface de rede que seriam necessárias para monitorar a interface lo. e) iostat. Feedback: alternativa incorreta, pois a ferramenta iostat permite o monitoramento do que está acontecendo com o disco do banco de dados. Tal ferramenta possibilita a obtenção das estatísticas do atual estado do disco do banco de dados, e não estatísticas da interface de rede que seriam necessárias para monitorar a interface lo. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 16/61 Parte da implantação de banco de dados em produção envolve deixá-lo preparado para desastres. Os backups desempenham um papel importante nisso. Quando ocorre um desastre, um bom backup pode salvar o dia, e, nesses casos, você nunca se arrependerá de ter investido tempo e diligência em uma política de backup (DOURADO, 2013). Mesmo assim, alguns usuários ainda decidem que podem viver sem backups; neste caso, eles são os únicos culpados quando não conseguem recuperar seus bancos de dados (CORONEL; MORRIS, 2015). Não seja um desses usuários! Três estratégias gerais para fazer backup de um banco de dados MongoDB são as seguintes: a. Usando mongodump e mongorestore. b. Copiando os arquivos de dados brutos. c. Usando backups de MMS. Estratégias paraEstratégias para recuperação derecuperação de DesastresDesastres 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 17/61 Examinaremos cada uma destas estratégias nas próximas cinco seções. São elas: mongodump e mongorestore; restauração dos arquivos BSON; backups baseados em arquivos de dados; cópia de arquivos de dados e backups de MMS. mongodump e mongorestore O mongodump grava o conteúdo de um banco de dados como arquivos BSON. Por sua vez, o mongorestore lê estes arquivos e os restaura (BANKER et al., 2016). Essas ferramentas são úteis para fazer backup de coleções individuais e bancos de dados completos, bem como, eventualmente, de todo o servidor. Eles podem ser executados em um servidor ativo (que você não precisa bloquear ou desligar) ou você pode direcioná-los para um conjunto de arquivos de dados, mas apenas quando o servidor está bloqueado ou desligado. A maneira mais simples de executar o mongodump é assim: $ mongodump -h localhost --port 27017 Isso armazenará cada banco de dados e coleção do servidor em localhost para um diretório chamado dump. O diretório dump incluirá todos os documentos de cada coleção, até mesmo as coleções do sistema que de�nem usuários e índices. Mas os próprios índices não serão incluídos no armazenamento. Isso signi�ca que, quando você restaurar, todos os índices terão que ser reconstruídos. Se você tiver um conjunto de dados especialmente grande ou um grande número de índices, isso vai demorar. Restaurando arquivos BSON Para restaurar arquivos BSON, execute mongorestore e aponte-o para a pasta de armazenamento: $ mongorestore -h localhost --port 27017 dump 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 18/61 Observe que, ao restaurar, mongorestore não descarta dados por padrão, então, se você estiver restaurando para um banco de dados existente, certi�que-se de executar com o sinalizador --drop. Backups baseados em arquivos de dados A maioria dos usuários opta por um backup baseado em arquivo; nele, os arquivos de dados brutos são copiados para uma nova localização. Esta abordagem é geralmente mais rápida do que o mongodump, porque os backups e as restaurações não requerem nenhuma transformação dos dados (CAMPELLO; CALDEIRA, 2014). O único problema potencial com um backup baseado em arquivo é que ele requer o bloqueio do banco de dados, mas geralmente você bloqueará um nó secundário e, portanto, deve ser capaz de manter seu aplicativo on-line durante o backup. Copiando os arquivos de dados Os usuários frequentemente cometem o erro de copiar os arquivos dedados sem primeiro bloquear a base de dados (CORONEL; MORRIS, 2015). Mesmo se o registro no diário estiver ativado, isso resultará na corrupção do arquivo copiado arquivos. Esta seção ensinará a tornar consistentes os arquivos de dados, bloqueando o banco de dados para permitir backups seguros. Para copiar os arquivos de dados com segurança, primeiro você precisa se certi�car de que eles estão em um mesmo estado; então, tem que desligar o banco de dados ou bloqueá-lo. Desligar o banco de dados pode envolver algumas implantações, e a maioria dos usuários opta pelo bloqueio de aproximação. Este é o comando para sincronizar e bloquear: use admin db.fsyncLock() 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 19/61 Neste ponto, o banco de dados está bloqueado contra gravação, e os arquivos de dados são sincronizados com disco. Isso signi�ca que agora é seguro copiar os arquivos de dados. Se você estiver executando um sistema de arquivos ou sistema de armazenamento que suporte instantâneo, é melhor tirar um instantâneo e copiar os dados mais tarde. Isso permite que você desbloqueie o banco de dados rapidamente (BANKER et al., 2016). Se não puder executar um instantâneo, terá que manter o banco de dados bloqueado enquanto copia os arquivos de dados. Se estiver copiando arquivos de dados de um nó secundário, certi�que-se de que o nó está atualizado com o primário e tem oplog su�ciente para permanecer o�-line durante todo o tempo do backup. Depois de terminar de fazer um instantâneo ou backup, você pode desbloquear o banco de dados. O comando de desbloqueio pode ser feito assim: db.fsyncUnlock() Observe que esta é apenas uma solicitação para desbloquear; o banco de dados pode não desbloquear imediatamente. Execute o método db.currentOp() para veri�car se ele não está mais bloqueado. Backups de MMS Mais uma vez, a equipe de MMS do MongoDB tem uma solução para esse problema. Ao fazer backups de MMS use o oplog de replicação para fornecer backups point-in-time a todo o cluster. Isso funciona para conjuntos de réplicas independentes, bem como para todo o cluster fragmentado (CORONEL; MORRIS, 2015). Como mencionamos anteriormente, a equipe de MMS está constantemente adicionando novos recursos; portanto, veri�que a documentação atualizada para detalhes. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 20/61 praticarVamos Praticar Backup é um dos pontos fundamentais para uma estratégia de continuidade de negócios. O MongoDB possibilita diversas formas de realizar tais cópias de segurança, bem como diversas maneiras para restaurá-las. Imagine-se como o projetista do banco de dados que queira realizar uma cópia de segurança do banco de dados no ip 127.0.0.1 para o diretório bkp. Neste caso, assinale a alternativa que indica corretamente qual comando utilizar: BANKER, K. et al. MongoDB in action. 2. ed. Nova Iorque: Manning Publications, 2016. a) mongod --bind_ip 127.0.0.1,10.4.1.55 Feedback: alternativa incorreta, pois o comando mongod --bind_ip permite que exista uma tradução do endereço de rede 127.0.0.1 para o endereço 10.4.1.55. Isso não faz uma cópia de segurança. b) $ sudo tcpdump -i lo -X Feedback: alternativa incorreta, pois o comando tcpdump permite que os dados que estão sendo trafegados na interface de rede do servidor MongoDB sejam armazenados. Mas estes não são os dados do banco. c) $ mongodump -h localhost --port 27017 Feedback: alternativa incorreta, pois o mongorestore permite a criação de uma cópia do banco de dados. Os parâmetros -h --port fornecem o servidor e a porta, respectivamente. O parâmetro bkp, que indica o local a ser armazenado, está ausente. d) $ mongorestore -h localhost --port 27017 bkp 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 21/61 Feedback: alternativa correta, pois o mongorestore permite a criação de uma cópia do banco de dados. Os parâmetros -h --port fornecem o servidor e a porta, respectivamente. O parâmetro bkp indica o local a ser armazenado. e) db.fsyncLock() Feedback: alternativa incorreta, pois o comando db.fsyncLock() está relacionado à sincronização dos dados em um conjunto de réplicas. Apesar de realizar uma espécie de cópia, não se trata de um backup. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 22/61 A maioria dos mecanismos de segurança depende da troca de chaves para manter a disponibilidade. Certi�que-se de manter suas chaves seguras (e armazenadas usando as permissões adequadas) e não as compartilhe entre os servidores, exceto quando necessário. Como um exemplo extremo, se você usar a mesma chave em todas as máquinas, tudo o que um invasor tem que fazer é comprometer essa única chave para ler todo o tráfego em sua rede. Vamos estudar tais aspectos a seguir. Segurança A segurança é um aspecto extremamente importante e muitas vezes esquecido da implantação em produção de uma base de dados. Nesta seção, abordaremos os principais tipos de segurança, incluindo ambientes seguros, criptogra�a de rede, autenticação e autorização. Terminaremos com uma breve Estratégias paraEstratégias para garantir Segurançagarantir Segurança e Disponibilidadee Disponibilidade 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 23/61 discussão sobre quais recursos de segurança estão disponíveis apenas na edição empresarial do MongoDB. Talvez mais do que em qualquer outro tópico, é vital permanecer atualizado com as ferramentas de segurança e práticas recomendadas. Portanto, esta seção apresenta uma visão geral do que considerar ao pensar em segurança, porém consulte a documentação ao colocá-la em produção. Ambientes Seguros O MongoDB, como todos os bancos de dados, deve ser executado em um ambiente seguro. Usuários de produção do MongoDB devem tirar proveito dos recursos de segurança dos sistemas operacionais modernos para garantir a saibamaisSaiba mais A documentação do MongoDB está sendo permanentemente atualizada. Para obter as informações mais precisas, é importante sempre acessar a documentação o�cial antes de considerar colocar o banco de dados em operação. Fonte: Banker et al. (2016), Security (2008, on- line). ACESSAR https://docs.mongodb.org/manual/security 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 24/61 segurança de seus dados. Provavelmente, o mais importante desses recursos é o �rewall (CORONEL; MORRIS, 2015). A única di�culdade potencial em usar um �rewall com MongoDB é saber qual das máquinas precisam se comunicar umas com as outras. Felizmente, as regras de comunicação são simples: a. Com um conjunto de réplicas, cada nó deve ser capaz de alcançar todos os outros nós. b. Todos os clientes de banco de dados devem ser capazes de se conectar a cada nó do conjunto de réplicas. c. Todas as comunicações são feitas usando o protocolo TCP. d. Para um nó ser alcançável, signi�ca que ele pode ser alcançado na porta em que estava con�gurado para ouvir. Por exemplo, mongod escuta na porta TCP 27017 por padrão, portanto, para ser alcançável, deve estar acessível nessa porta. Um cluster de shard consiste em partes de conjuntos de réplicas. Todas as regras do conjunto de réplicas se aplicam; o cliente, no caso de fragmentação, é o roteador mongos. Além disso: a. Todos os shards devem ser capazes de se comunicar diretamente uns com os outros. b. Os shards e os roteadores mongos devem ser capazes de se comunicar com os servidores de con�guração. A Figura 4.4 mostra uma visualização simpli�cada dessasregras de conectividade. Além disso, qualquer seta conectada a um conjunto de réplicas em caixa ou conjunto de servidores de con�guração signi�ca que o requisito de conectividade se aplica a cada servidor individual dentro da caixa. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 25/61 #PraCegoVer: a imagem apresenta um exemplo simpli�cado de como o MongoDB depende do hardware e sistema operacional. Existem três tipos de con�gurações: con�guração do MongoDB (MongoDB server, MongoDB read/write locks, MongoDB data �les); con�guração do hardware (CPU, RAM, DISK); e con�guração do sistema operacional (NTP, Filesystem). A pilha inicia, de baixo para cima, com os elementos MongoDB data �les (journal on separate disk, directoryperdb ), Filesystem (ext4 or xfs with noatime and correct ulimits set) e Disk (RAID 10 using LVM). Depois disso, segue com MongoDB server, CPU (64 bit, little endian), RAM (>working set), MongoDB read/write locks,Accurate system time (NTP) em paralelo. Na maior parte das vezes, executar o MongoDB em um ambiente seguro é um tópico completo por si só (CAMPELLO; CALDEIRA, 2014). Mas uma opção, -- bind_ip, é relevante aqui. Por padrão, o MongoDB ouvirá em todos os endereços da máquina B, mas você pode querer que o MongoDB escute em um ou mais endereços especí�cos. Por isso você pode iniciar mongod e mongos com a opção --bind_ip, que pega uma lista de um ou mais endereços IP separados por Figura 4.4 - Exemplo simpli�cado da visualização de como MongoDB depende do sistema operacional e hardware Fonte: Banker et al. (2016, p. 379). 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 26/61 vírgula. Por exemplo, para ouvir na interface de loopback, bem como no endereço IP interno 10.4.1.55, você iniciaria o mongod assim: mongod --bind_ip 127.0.0.1,10.4.1.55 Observe que os dados entre as máquinas serão enviados com clareza, a menos que tenha SSL ativado, o que abordaremos na próxima seção. Criptogra�ia de Rede Talvez o aspecto mais fundamental de proteger seu sistema seja garantir que o tráfego em sua rede seja criptografado (DOURADO, 2013). A menos que seu sistema esteja completamente isolado e ninguém possa ver seu tráfego (por exemplo, se todo o seu tráfego já é criptografado em uma rede privada virtual, ou se as regras de roteamento de rede são con�guradas de modo que nenhum tráfego seja enviado para suas máquinas de fora de sua rede con�ável), você provavelmente deve usar MongoDB com criptogra�a. Felizmente, a partir da v2.4, o MongoDB vem com uma biblioteca que lida com essa criptogra�a, chamada Secure Sockets Layer (SSL), de modo integrado. Para ver por que isso é importante, vamos desempenhar o papel de um bisbilhoteiro, usando o Unix comando tcpdump. Primeiro, use o comando ifconfig para encontrar o nome do loopback interface, ou a interface que programa a comunicação da máquina local para o uso da máquina local. Esta é a aparência do início da saída em nossa máquina: $ ifconfig Para nós, a interface de loopback é lo. Agora podemos usar o comando tcpdump apropriado para despejar todo o tráfego nesta interface: $ sudo tcpdump -i lo -X 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 27/61 Ler o tráfego de rede usando tcpdump requer permissões de root, portanto, se você não pode executar esse comando, apenas leia o exemplo a seguir (CONNOLLY; BEGG, 2019). Em outro terminal na mesma máquina, inicie um servidor mongod sem SSL habilitado (altere o caminho dos dados conforme apropriado): $ mongod –dbpath /data/db/ Em seguida, conecte-se ao banco de dados e insira um único documento: db.test.insert ({"message": "plaintext"}) Agora, se voc olhar a saída do tcpdump no terminal, verá uma série de pacotes de saída, uma das quais se parece com isto: 16: 05: 10.507867 IP localhost.localdomain.50891 Agora, vamos executar o MongoDB com SSL e ver o que acontece. Executar Mongodb com SSL Primeiro, gere a chave para o servidor: openssl req -newkey rsa: 2048 -new -x509 -days 365 -nodes - out mongodbcert.crt -keyout mongodb-cert.key cat mongodb-cert.key mongodb-cert.crt > mongodb.pem Em seguida, execute o servidor mongod com SSL, usando --sslPEMKeyFile e – sslMode como opções: 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 28/61 $ mongod --sslMode requireSSL --sslPEMKeyFile mongodb.pem Agora, conecte o cliente com SSL e faça exatamente a mesma operação: $ mongo --ssl ... db.test.insert ({"message": "plaintext"}) Se você voltar para a janela com tcpdump, verá algo completamente incompreensível onde a mensagem costumava estar: 16: 09: 26.269944 IP localhost.localdomain.50899 Sucesso! Nosso sistema está seguro agora? Não exatamente. A criptogra�a adequada é apenas um aspecto da proteção do sistema. Na próxima seção, discutiremos como veri�car a identidade de serviços e usuários e, a seguir, falaremos sobre como obter controle re�nado do que cada usuário tem permissão para fazer. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 29/61 Autenticação A próxima camada de segurança é a autenticação. Para que serve a criptogra�a de rede, se alguém na internet pode se passar por um usuário legítimo e �zer o que quiser com seu sistema? A autenticação permite que você veri�que a identidade de serviços e usuários em um ambiente seguro. Primeiro, discutiremos por que e como autenticar serviços e, em seguida, usuários. Bem saibamaisSaiba mais SSL em clusters Agora você sabe como con�gurar SSL entre o shell mongo e um único mongod, o que levanta a questão óbvia de como isso se estende a um cluster inteiro (BANKER et al., 2016). Felizmente, isso é bastante semelhante ao exemplo anterior. Basta iniciar cada nó do cluster com a opção requireSSL --sslMode. Se você já está executando um cluster sem SSL, há um processo de atualização para garantir que possa atualizar sem perder a conectividade entre seus nós na transição. Fonte: (UPGRADE…, 2008). ACESSAR https://docs.mongodb.org/manual/tutorial/upgrade-cluster-to-ssl/ 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 30/61 então discuta brevemente como esses conceitos se traduzem em conjuntos de réplicas e clusters fragmentados (CONNOLLY; BEGG, 2019). Como sempre, cobriremos os conceitos principais aqui, mas você deve consultar a documentação mais recente para sua versão do MongoDB para garantir que você esteja atualizado; consulte https://docs.mongodb.org/manual/core/authentication (AUTHENTICATION, 2008). Autenticação de Serviço O primeiro estágio de autenticação é veri�car se o programa na outra extremidade da conexão é con�ável. Por que isso é importante? O principal ataque que se pretende evitar é o ataque man-in-the-middle, no qual o invasor se disfarça de cliente, a �m de interceptar todo o tráfego. Veja a Figura 4.5 para uma visão geral deste ataque. #PraCegoVer: a imagem apresenta um exemplo de um tipo de ataque conhecido como man-in-the-middle. Existem três elementos na �gura: um chamado “Client”, que representa uma requisição de um computador de um usuário; um chamado “Attacker”, que representa um potencial invasor; e, por �m, um elemento chamado “Server”, que representa o serviço baseado no MongoDB. O primeiro elemento, na cor amarela, representando um usuário, acessa o elemento na cor branca, representando o man-in-the-middle; já o elemento na cor roxa representa o servidor que será acessado. Geralmente o acesso é feito via cor amarela, branca e roxa. Figura 4.5 - Exemplo de ataqueconhecido como man-in-the-middle Fonte: Banker et al. (2016, p. 398). https://docs.mongodb.org/manual/core/authentication 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 31/61 Como você pode ver na Figura 4.5, um ataque man-in-the-middle é exatamente o que parece: a. Um invasor mal-intencionado se apresenta como um servidor, criando uma conexão com o cliente, e em seguida se apresenta como cliente e cria uma conexão com o servidor. b. Depois disso, ele não pode apenas descriptografar e criptografar todo o tráfego entre o cliente e servidor, mas pode enviar mensagens arbitrárias para o cliente e o servidor. Felizmente, há esperança. A biblioteca SSL que o MongoDB usa não só fornece criptogra�a, mas também fornece algo chamado autenticação de certi�cado, que consiste em usar um terceiro con�ável não envolvido na comunicação para veri�car se a pessoa que envia a chave é quem a�rma ser. Em teoria, o invasor não comprometeu o terceiro. Gerar certi�cados e fazer com que sejam assinados por terceiros con�áveis, conhecidos como a autoridade de certi�cação (CA), para comunicação on-line está fora do escopo deste estudo. Existem inúmeras opções aqui, e cada uma é um tópico à parte. Para começar, você pode trabalhar com um CA diretamente, como Symantec, Comodo SSL, GlobalSign e outros, ou pode usar ferramentas que foram criadas para tornar esse processo mais fácil, como SSLMate. Depois de ter um certi�cado, você pode usá-lo no MongoDB, assim: mongod --clusterAuthMode x509 --sslMode requireSSL -- sslPEMKeyFile server.pem --sslCAFile ca.pem mongo --ssl --sslPEMKeyFile client.pem Em que ca.pem contém a cadeia de certi�cados raiz da CA e client.pem é assinado por esse CA. O servidor usará o conteúdo de ca.pem para veri�car se client.pem foi realmente assinado pela CA e, portanto, é con�ável (CONNOLLY; BEGG, 2019). Seguir essas etapas garantirá que nenhum programa malicioso possa estabelecer uma conexão com seu banco de dados. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 32/61 Autenticação de Usuário Embora a autenticação de serviço seja excelente para evitar que invasores até mesmo criem uma conexão com o seu sistema, às vezes queremos conceder ou revogar o acesso de usuários individuais. No MongoDB, uma função é essencialmente um conjunto de privilégios, e um privilégio é qualquer operação que possa ser executada no MongoDB. A função é um conceito útil porque às vezes nossa ideia lógica de uma “função” do usuário não mapeia as operações de banco de dados primitivas de modo adequado (CAMPELLO; CALDEIRA, 2014). Por exemplo, a função de leitura saibamaisSaiba mais Esta API mudou drasticamente de v2.4 para v2.6 e pode mudar novamente em versões futuras; portanto, certi�que-se de ler a documentação de sua versão de servidor quando tentar con�gurar isso. Os exemplos aqui são para v2.6 e v3.0, que suportam autenticação baseada em função. Fonte: Campello e Caldeira (2014) e Authentication (2008). ACESSAR https://docs.mongodb.com/manual/core/authentication/ 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 33/61 integrada não permite apenas que um usuário execute consultas de localização, mas também que os usuários executem certos comandos que exibem estatísticas sobre os bancos de dados e coleções para as quais eles têm a função de leitura. O MongoDB tem um conjunto conveniente de funções integradas, mas também oferece suporte extra se elas não forem su�cientes (BANKER et al., 2016). Não cobrimos as funções em detalhes aqui; este tópico cai na categoria de recursos de segurança mais avançados e especializados, então, se você estiver em uma situação em que precise de funções de�nidas pelo usuário, recomendamos consultar a documentação mais atualizada para seu sistema e sua versão do MongoDB (CONNOLLY; BEGG, 2019). Agora, vamos pular direto para um exemplo de como con�gurar a autenticação básica para um único mongod. Con�igurando a autenticação básica Primeiro você deve iniciar um nó mongod com a autenticação habilitada. Observe que se este nó estiver em um cluster fragmentado ou em um conjunto de réplicas, você também precisa de opções para permitir a autenticação com outros servidores. Mas, para um único nó, habilitar a autenticação requer apenas uma bandeira: $ mongod --auth Ao se conectar ao servidor pela primeira vez, adicione um usuário administrativo à conta: use admin db.createUser( { user: "boss", 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 34/61 pwd: "supersecretpassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) Em nosso exemplo, demos a esse usuário uma função de userAdminAnyDatabase, que lhe dá acesso completo ao sistema, incluindo a possibilidade de adicionar e remover novos usuários, bem como alterar seus privilégios. Este é essencialmente o superusuário do MongoDB. Agora, podemos fazer login como este usuário: use admin db.auth ("boss", "supersecretpassword") Podemos, então, criar usuários para bancos de dados individuais. Mais uma vez, usamos o método createUser. As principais diferenças, aqui, são as funções: use stocks db.createUser( { user: "trader", pwd: "youlikemoneytoo", roles: [ { role: "readWrite", db: "stocks" } ] } 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 35/61 ) db.createUser( { user: "read-only-trader", pwd: "weshouldtotallyhangout", roles: [ { role: "read", db: "stocks" } ] } ) Agora, o usuário trader tem a função readWrite no banco de dados de stocks, enquanto o read-only-trader tem apenas a função de leitura. Basicamente, isso signi�ca que o primeiro usuário pode ler e gravar dados do stocks, e o segundo pode apenas lê-los. Como adicionamos esses usuários ao banco de dados de stocks, precisamos autenticar usando esse banco de dados também: use stocks db.auth("trader", "youlikemoneytoo") Removendo um Usuário Para remover um usuário, use o auxiliar dropUser no banco de dados ao qual ele foi adicionado: use stocks db.dropUser("trader") 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 36/61 Isso é um pouco pesado, então você também pode revogar o acesso do usuário sem removê-lo completamente do sistema, usando o ajudante revokeRolesFromUser, e então conceder-lhe os papéis novamente, usando o auxiliar grantRolesToUser. Para fechar a sessão, você não precisa se desconectar explicitamente; encerrar a conexão (fechando o shell) fará isso muito bem. Mas há um ajudante para registro, se precisar: db.logout() Naturalmente, você pode usar toda a lógica de autenticação que exploramos aqui usando os drivers. Veri�que a API do seu driver para obter os detalhes. Autenticação de conjunto de Réplicas Os conjuntos de réplicas oferecem suporte à mesma API de autenticação que acabamos de descrever. Mas permitir a autenticação para um conjunto de réplicas requer con�guração extra, porque não apenas os clientes precisam de tal con�guração para autenticar com o conjunto de réplicas, mas os nós do conjunto de réplicas também precisam ser capazes de se autenticarem. A autenticação interna do conjunto de réplicas pode ser feita por meio de dois mecanismos separados: a. Autenticação de arquivo de chave. b. Autenticação X509. Em ambos os casos, cada nó do conjunto de réplicas se autentica com os outros como um usuário interno especial, que tem privilégios su�cientes para fazer a replicação funcionar corretamente. Autenticação de arquivo de Chave O mecanismo de autenticaçãomais simples e menos seguro é a autenticação de arquivo de chave (BANKER et al., 2016). Isso envolve a criação de um arquivo de chave para cada nó que contém a senha do conjunto de réplicas que será 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 37/61 usada para autenticação com os outros nós do mesmo conjunto de réplicas. O lado positivo disso é que ele é fácil de con�gurar. Já a desvantagem é que, se um invasor compromete apenas uma máquina, você terá que alterar a senha para cada nó no cluster, o que não pode ser feito sem algum tempo de inatividade. Para começar, crie o arquivo que contém seu segredo. O conteúdo do arquivo servirá como a senha que cada membro do conjunto de réplicas usa para se autenticar com os outros. Como exemplo, você pode criar um arquivo chamado secret.txt e preenchê-lo com o seguinte (não use esta senha em um cluster real): tOps3cr3tpa55word Coloque o arquivo na máquina de cada membro do conjunto de réplicas e ajuste as permissões, para que ele seja acessível apenas ao proprietário: sudo chmod 600 /home/mongodb/secret.txt Por �m, inicie cada membro do conjunto de réplicas especi�cando a localização do arquivo de senha, usando a opção --keyFile: mongod --keyFile /home/mongodb/secret.txt A autenticação agora será habilitada para o conjunto. Você vai criar um usuário administrador e avançar, como fez na seção anterior. Autenticação X509 A autenticação do certi�cado X509 é integrada ao OpenSSL, a biblioteca que o MongoDB usa para criptografar o tráfego de rede. Como mencionamos anteriormente, obter certi�cados assinados está fora do escopo deste estudo. No entanto, uma vez que você os tenha, poderá iniciar cada nó como: 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 38/61 mongod --replSet myReplSet --sslMode requireSSL -- clusterAuthMode x509 -sslClusterFile --sslPEMKeyFile server.pem --sslCAFile ca.pem Em que server.pem é uma chave assinada pela autoridade de certi�cação e ca.pem corresponde ao cliente. Existe uma maneira de atualizar um sistema usando autenticação de arquivo de chave por meio de certi�cados X509, a �m de que não haja tempo de inatividade (CAMPELLO; CALDEIRA, 2014). Veja os documentos do MongoDB para obter detalhes sobre como fazer isso ou veri�que a documentação mais recente do MMS para ver se o suporte foi adicionado à automação MMS. Autenticação de sharding A autenticação de sharding é uma extensão da autenticação do conjunto de réplicas. Cada conjunto de réplicas no cluster é protegido conforme descrito na seção anterior. Além disso, toda a con�guração servidora e cada instância mongos podem ser con�guradas para autenticar com o resto do cluster exatamente da mesma maneira, usando um arquivo de chave compartilhada ou um certi�cado X509 de autenticação. Depois de fazer isso, todo o cluster pode usar autenticação. Recursos de segurança corporativa Alguns recursos de segurança existem apenas no plug-in empresarial pago do MongoDB. Por exemplo, os mecanismos de autenticação e autorização que permitem ao MongoDB interagir com Kerberos e LDAP são corporativos. Além disso, o módulo corporativo adiciona suporte de auditoria, para que os eventos relacionados à segurança sejam rastreados e registrados. No MongoDB, os documentos mencionam explicitamente se um determinado recurso é apenas corporativo. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 39/61 praticarVamos Praticar A autenticação de sharding é uma extensão da autenticação do conjunto de réplicas. Além disso, toda a con�guração servidora e de cada instância mongos pode ser con�gurada para autenticar com o restante do cluster exatamente da mesma maneira, usando um arquivo de chave compartilhada ou um certi�cado X509 de autenticação. Depois de fazer isso, todo o cluster pode usar autenticação. Nesse caso, para qual �nalidade uma autenticação sharding deve ser utilizada? Exempli�que em termos conceituais. Feedback: Esse tipo de autenticação deve ser utilizado no conjunto de réplicas, para evitar que seja con�gurado individualmente em cada réplica. Quando temos poucas réplicas, isso pode ser fácil, mas pense em um conjunto com 300 réplicas. Tal tarefa seria muito custosa para ser feita individualmente. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 40/61 Nesta seção, abordaremos algumas tarefas administrativas básicas, incluindo importação e exportação de dados, lidar com a fragmentação do disco e atualizar o sistema. Importação e exportação de dados Se estiver migrando um sistema existente para o MongoDB ou se precisar propagar o banco de dados com informações de algo, como um data warehouse, precisará de um método de importação e�ciente (BANKER et al., 2016). Você também pode precisar de uma boa estratégia de exportação, porque pode ter que exportar dados do MongoDB para trabalhos de processamento externo. Por exemplo, exportar dados ao Hadoop para Conceitos deConceitos de continuidade decontinuidade de bancos de dadosbancos de dados não relacionaisnão relacionais 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 41/61 processamento em lote tornou-se uma prática comum. Existem duas maneiras de importar e exportar dados com MongoDB: a. Use as ferramentas incluídas, mongoimport e mongoexport. b. Escreva um programa simples usando um dos drivers. Tais ferramentas podem ser utilizadas para importação pontuais (ad hoc) de dados ou para importação automatizada. Tais importações podem ser processadas via scripts (shell ou bat) e ser agendadas e realizadas via MongoDB Compass. O importante é sempre pensar na otimização dos processos para facilitar a administração dos bancos de dados não relacionais. mongoimport e mongoexport Junto com o MongoDB estão dois utilitários para importar e exportar dados: mongoimport e mongoexport. Você pode usar o mongoimport para importar arquivos JSON, CSV e TSV. Isto é útil para carregar dados de bancos de dados relacionais no MongoDB: $ mongoimport -d stocks -c values --type csv --headerline stocks.csv No exemplo, você importa um arquivo CSV chamado stocks.csv para a coleção de valores do banco de dados de ações. O sinalizador --headerline indica que a primeira linha do arquivo CSV contém os nomes dos campos. Você pode ver todas as opções de importação executando mongoimport --help. Use mongoexport para exportar todos os dados de uma coleção para um arquivo JSON ou CSV: $ mongoexport -d stocks -c values -o stocks.csv 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 42/61 Este comando exporta dados para o arquivo stocks.csv. Assim como sua contraparte, você pode ver o resto das opções de comando do mongoexport iniciando-o com o sinalizador --help. Scripts de importação e exportação personalizados É provável que você use as ferramentas de importação e exportação do MongoDB quando os dados com os quais está lidando são relativamente planos; depois de introduzir subdocumentos e matrizes, o formato CSV torna-se estranho, porque não foi projetado para representar dados aninhados (CONNOLLY; BEGG, 2019). Quando precisa exportar um documento rich para CSV ou importar um CSV para um documento rich MongoDB, pode ser mais fácil construir uma ferramenta personalizada. Você consegue fazer isso usando qualquer um dos drivers (BANKER et al., 2016). Por exemplo, os usuários do MongoDB geralmente escrevem scripts que se conectam a um banco de dados relacional e, em seguida, combinam os dados de duas tabelas em uma coleçãoúnica. Esta é a parte complicada de mover dados para dentro e para fora do MongoDB: a maneira como os dados são modelados pode diferir entre os sistemas. Nesses casos, esteja preparado para usar os drivers como suas ferramentas de conversão. Compactação e reparo O MongoDB inclui uma ferramenta integrada para reparar um banco de dados. Você pode iniciá-la a partir da linha de comando para reparar todos os bancos de dados no servidor: $ mongod --repair 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 43/61 É possível, ainda, executar o comando repairDatabase para reparar um único banco de dados: use cloud-docs db.runCommand ({repairDatabase: 1}) O reparo é uma operação o�-line. Enquanto estiver em execução, o banco de dados será bloqueado para leitura e escrita. O processo de reparo funciona lendo e escrevendo todos os arquivos de dados, e descartando quaisquer documentos corrompidos no processo. Ele também reconstrói cada índice. Isso signi�ca que, para reparar um banco de dados, você precisa de espaço livre em disco o su�ciente para armazenar a reescrita de seus dados. Dizer que os reparos são caros é um eufemismo, pois reparar um grande banco de dados pode levar dias e afetar o tráfego para outros bancos de dados no mesmo nó. O reparo do MongoDB foi originalmente usado como uma espécie de último esforço para recuperar um banco de dados corrompido (BANKER et al., 2016). No caso de um desligamento sujo, sem registro no diário habilitado, um reparo é a única maneira de retornar os arquivos de dados a um estado consistente, e mesmo assim você pode perder dados. Se implantar com replicação, execute pelo menos um servidor com journaling habilitado e realize backups regulares fora do local; lembre-se de que você nunca deve ter que recuperar executando um reparo, a�nal, depender de reparos para recuperação é tolice, então, evite- os. Para que, então, um reparo de banco de dados pode ser bom? Executar um reparo compactará os arquivos de dados e reconstruirá os índices. Desde o lançamento v2.0, o MongoDB não tem um suporte ótimo para compactação de arquivos de dados. Se �zer muitas exclusões aleatórias, especialmente se estiver excluindo pequenos documentos (menos de 4 KB), é possível que o tamanho total do armazenamento permaneça constante ou aumente, apesar dessas exclusões que ocorrem regularmente. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 44/61 Compactar os arquivos de dados é um bom remédio para esse uso excessivo de espaço. Se você não tem tempo ou recursos para executar um reparo completo, há duas opções, ambas operando em uma única coleção: a. Reconstruir índices. b. Compactar a coleção. Para reconstruir índices, use o método reIndex(): use cloud-docs db.spreadsheets.reIndex() Isso pode ser útil, mas, de modo geral, o espaço de índice é reutilizado com e�ciência. Os dados de espaço de arquivo é o que pode ser um problema, portanto, o comando compact costuma ser uma escolha melhor, pois ele reescreverá os arquivos de dados e reconstruirá todos os índices para uma coleção. Aqui está como executá-lo a partir do shell: db.runCommand ({compact: "spreadsheets"}) Esse comando foi projetado para ser executado em um secundário ativo, eliminando a necessidade para o tempo de inatividade. Depois de terminar de compactar todos os secundários em um conjunto de réplicas, você pode descer do nó primário e compactar esse nó. Você pode executar o comando compact no primário adicionando {force: true} ao comando objeto. Observe que, se seguir este caminho, o comando gravará o bloqueio do sistema: db.runCommand ({compact: "spreadsheets", force: true}) Em bancos de dados WiredTiger, o comando compact() libera em disco o espaço desnecessário para o sistema operacional. Observe também que o campo 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 45/61 paddingFactor, que é aplicável para o mecanismo de armazenamento MMAPv1, não tem efeito quando usado com o armazenamento WiredTiger motor. Atualizando Como acontece com qualquer projeto de software, você deve manter a implantação do MongoDB até a data possível, porque as versões mais recentes contêm muitas correções de bugs importantes e melhorias (BANKER et al., 2016). Um dos princípios básicos de design por trás do MongoDB é sempre garantir que uma atualização seja possível sem tempo de inatividade. Para um conjunto de réplicas, isso signi�ca uma atualização contínua, e, para um cluster fragmentado, signi�ca que os roteadores mongos ainda podem funcionar contra clusters mistos. Você pode seguir um destes dois caminhos ao lidar com atualizações: a. Primeiro, você pode escolher fazer o processo manualmente. Neste caso, veri�que as notas de lançamento que descrevem o processo de atualização e leia-as com atenção. Às vezes, há advertências ou etapas importantes que devem ser seguidas, para garantir que a atualização seja segura. A vantagem é que você tem controle total ao longo do processo e sabe exatamente o que está acontecendo. b. A segunda opção é usar novamente o MongoDB Management Service. A automação não só pode ser usada para provisionar seus nós, mas também pode ser usada para atualizá-los. Certi�que-se de ler as notas de lançamento para a versão que você está atualizando, bem como a documentação MMS, para ter certeza de que sabe o que está acontecendo. Sempre que possível, é interessante saber o que está acontecendo nos bastidores de eventos como atualizações. Tais eventos podem ser acompanhados de forma a permitir um entendimento mais adequado de como o MongoDB os processa. Além disso, permite ao administrador conhecer bem 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 46/61 seus dados e, consequentemente, melhorar suas habilidades de resolução de problemas. Resolução de problemas de desempenho O desempenho no MongoDB é um problema complicado que afeta quase todos os outros componentes (BANKER et al., 2016). É quase impossível saber exatamente como seu aplicativo funcionará antes de testá-lo com sua carga de trabalho e ambiente especí�cos. Um nó na Joyent Cloud terá características de desempenho completamente diferentes de um nó no EC2, que, por sua vez, terá características de desempenho completamente diferentes de um nó que você tenha instalado em seu próprio data center privado. Nesta seção, abordaremos alguns problemas comuns que surgem no suporte do MongoDB, pelo menos até a versão 3.0, aos quais é preciso estar atento. Primeiro, vamos reintroduzir o conceito de conjunto de trabalho; em seguida, cobrimos duas maneiras pelas quais o conjunto de trabalho pode afetar seu sistema: a queda de desempenho e as interações de consulta. No �nal, cabe a você monitorar seu sistema de perto e entender como ele se comporta. Um bom monitoramento pode ser a diferença entre resolver rapidamente, ou mesmo prever e prevenir problemas de desempenho, e ter usuários irritados dizendo que seus sistemas �caram vagarosos. Conjunto de trabalho Abordamos a ideia do conjunto de trabalho em várias partes deste estudo, mas vamos de�ni-lo aqui novamente, com foco em sua implantação de produção. Imagine que você tem uma máquina com 8 GB de RAM, executando um banco de dados com um disco de 16 GB, sem incluir índices (BANKER et al., 2016). Seu conjunto de trabalho é a quantidade de dados que você está acessando em um intervalo de tempo especi�cado. Neste exemplo, se suas consultas são todas varreduras completas de uma coleção, seu “conjunto de trabalho” será de 16 GB, porque, para responder às perguntas, todo o seu o banco de dados deve ser paginado na memória. Mas, se suas consultas forem indexadas 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I…47/61 corretamente e você só estiver consultando a maioria dos dados do trimestre recente, a maior parte do seu banco de dados pode permanecer no disco, e serão necessários apenas 2 GB, além de algum espaço extra para índices, na memória (CONNOLLY; BEGG, 2019). A Figura 4.6 mostra visualmente o que isso signi�ca para o uso do disco. #PraCegoVer: a imagem apresenta um exemplo de como o banco de dados MongoDB utiliza a memória. Existem dois cenários: o primeiro, no qual a quantidade de dados no disco é equivalente à quantidade de memória disponível. Desta forma, não existe gargalo. Neste cenário, os dois retângulos que apresentam quantidade de dados e de memória estão equilibrados. No segundo cenário, existem mais dados no disco do que espaço disponível na memória, gerando, portanto, um gargalo. Neste cenário, os dois retângulos que apresentam quantidade de dados e de memória estão desequilibrados. Na linha inferior da �gura, quando você está fazendo varreduras completas da tabela, você tem muitos passos para trabalhar ou mover blocos de dados para Figura 4.6 - Exemplo do consumo de memória realizada pelo banco de dados MongoDB Fonte: Banker (2016, p. 406). 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 48/61 dentro e para fora da RAM, porque não pode manter todos os 16 GB em seus 8 GB de RAM de uma vez. No exemplo acima, você pode trazer os 2 GB de que precisa para a memória e, em seguida, mantê-los lá, respondendo a todas as perguntas com apenas um acesso mínimo ao disco. Isso não só ilustra que manter seu conjunto de trabalho na RAM é extremamente importante, mas também mostra como uma mudança simples, como adicionar o índice certo, pode mudar completamente o seu desempenho. Precipício de desempenho Intimamente relacionado ao conceito de conjunto de trabalho, está um artefato que atrapalha a forma como o MongoDB executa consultas (BANKER et al., 2016). A partir da versão 3.0, o MongoDB não limita os recursos em uma única operação nem deixa os clientes desassistidos quando está começando a �car sobrecarregado. Contanto que não esteja se aproximando dos limites do MongoDB, não haverá problemas, mas, conforme atinge o limite, pode ver uma espécie de precipício de desempenho. Para compreender melhor, imagine que você tem um sistema com 8 GB de RAM, executando um banco de dados de 64 GB em disco. Na maioria das vezes, seu conjunto de trabalho é de apenas 6 GB e seu aplicativo funciona perfeitamente bem. Agora, avance para a véspera de Natal, quando há um pico de tráfego grande o su�ciente para chegar a 8 GB. Então, o MongoDB começará a �car lento, porque o conjunto de trabalho não cabe mais na memória e começará a debulhar no disco (BANKER et al., 2016). Apesar disso, o MongoDB continuará aceitando novas solicitações. A combinação de desacelerar e ainda aceitar novas solicitações é desastrosa para o desempenho, e você pode ver uma queda acentuada neste ponto. Se isso for uma preocupação para você, recomendamos que saiba exatamente quanta carga sua implantação do MongoDB pode suportar e, se possível, coloque algum tipo de balanceador de carga na frente dele, para escapar desse problema. Interações de consulta 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 49/61 Outro efeito colateral de o MongoDB não impor limites de recursos é que uma consulta com comportamento inadequado pode afetar o desempenho de todas as outras consultas no sistema. É o mesmo exercício de antes. Suponha que você tenha um conjunto de trabalho de 2 GB, com 64 GB de dados. Tudo pode estar indo bem, até que alguém execute uma consulta com uma varredura completa. Esta consulta não só vai impor uma grande carga sobre o disco, mas também poderá exibir os dados que estavam sendo usados para outras consultas no sistema, causando desaceleração nelas também. A Figura 4.5 ilustra esse problema: a parte superior representa o carregamento normal da consulta e a parte inferior representa a carga após a consulta ruim. reflitaRe�ita A maior parte dos bancos de dados é utilizada para leitura, não para escrita. Neste caso, a leitura dos dados, realizada por meio de consultas, é de grande importância no projeto de banco de dados. Neste caso, imagine- se como projetista de banco de dados e pense em como você poderia melhorar as consultas do seu banco. Fonte: Banker et al. (2016). 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 50/61 Este é outro motivo pelo qual os controles de acesso são importantes. Mesmo se todo o resto estiver certo, uma veri�cação mal estruturada, feita por um estagiário, pode dani�car seu sistema. Certi�que-se de que todos que consultem seu banco de dados entendam as consequências de uma consulta ruim. Lista de veri�icação de implantação Cobrimos muitos tópicos neste estudo. Pode parecer demasiadamente complexo no início, mas, contanto que tenha as principais áreas cobertas, seu sistema continuará funcionando perfeitamente (DOURADO, 2013). Esta seção é uma referência rápida para garantir que você compreendeu os pontos importantes: A. Hardware a. RAM – o su�ciente para lidar com o conjunto de trabalho esperado. b. Espaço em disco – espaço su�ciente para lidar com todos os seus dados, índices e metadados internos do MongoDB. c. Velocidade de disco – o su�ciente para satisfazer seus requisitos de latência e taxa de transferência. Considerá-la em conjunto com a RAM (menos RAM geralmente signi�ca mais uso de disco) e CPU (normalmente não é gargalo do MongoDB, mas, se pouco disco é utilizado, mas o rendimento é baixo, pode ter uma carga de trabalho vinculada à CPU). Faça uma veri�cação, com um teste de desempenho cuidadoso. d. Rede – certi�que-se de que a rede seja rápida e con�ável o su�ciente para satisfazer seus requisitos de desempenho. Nós do MongoDB comunicam-se uns com os outros internamente. Lembre-se ainda de testar todas as conexões, não apenas as de seus clientes para os mongos ou servidores mongod. B. Segurança 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 51/61 a. Proteção do tráfego de rede – execute em um ambiente completamente isolado ou certi�que-se de que seu tráfego seja criptografado, usando o suporte SSL integrado do MongoDB ou algum método externo, como VPN, para evitar ataques man-in-the-middle. b. Controle de acesso – certi�que-se de que apenas usuários con�áveis e programas clientes possam operar no banco de dados. Certi�que-se de que seus estagiários não tenham o privilégio de root. C. Monitoramento a. Uso de hardware (discos, CPU, rede, RAM) – certi�que-se de ter algum tipo de monitoramento da con�guração de todos os recursos de hardware, não apenas para acompanhar o uso, mas também para que o alertem se atingir um certo limite (BANKER et al., 2016). b. Veri�cações de saúde – certi�que-se periodicamente de que seus servidores estão funcionando e respondendo, e que irão alertá-lo se alguém parar de ligar de volta (teste de conexão via ping). c. Monitoramento de MMS – monitore seus serviços usando o monitoramento de MMS. Isso fornece não apenas monitoramento, veri�cações de saúde e alertas, mas é o que a equipe de suporte do MongoDB usará para ajudá-lo se você tiver problemas. Seu uso é gratuito, então não deixe de adicioná-lo à sua implantação. d. Monitoramento de desempenho do cliente – execute testes automatizados de ponta a ponta periodicamente como cliente, para veri�car se têm um desempenho tão bom quanto o esperado. A última coisa que você quer é que um cliente o avise que seu aplicativo é lento. D. Recuperação de desastres a. Avalie o risco – imagine que você perdeu todos os seus dados. Como você se sente em relação a isso? Perderdados pode ser pior em alguns aplicativos do que em outros. Se está analisando as tendências do Twitter, perder seus dados pode custar uma semana de trabalho, mas, se estiver armazenando dados bancários, perdê-los pode custar um pouco mais. Ao fazer esta avaliação, suponha que um desastre poderá acontecer e planeje-se de acordo. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 52/61 b. Tenha um plano – crie um plano para recuperação em caso de falha. Você pode reagir de maneiras completamente diferentes, dependendo de como o sistema falha. c. Teste seu plano – certi�que-se de testar seu plano. O maior erro que as pessoas cometem com backups e recuperação de desastres é pressupor que ter um backup ou um plano é o su�ciente. Não é. Talvez o backup esteja corrompido. Talvez esteja em um formato impossível de importar para seus sistemas de produção. Como em um sistema de produção, muitas coisas podem dar errado, então é importante garantir que sua estratégia de recuperação funcione. d. Tenha um plano de backup – seu primeiro plano de recuperação de desastres pode falhar. Então, é preciso ter outro recurso disponível. Esta hipótese não é muito animadora, mas você �cará feliz caso algo extremo ocorra. E. Desempenho a. Teste de carga – certi�que-se de testar a carga de seu aplicativo com uma carga de trabalho realista. No �nal, esta é a única maneira de ter certeza de que seu desempenho é o que você espera. praticarVamos Praticar Existem diversos itens que devem ser con�gurados para garantir um bom desempenho e uma maior probabilidade de continuidade do serviço. Quando se trata de banco de dados, um item importante é a qualidade do disco utilizado. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 53/61 Neste caso, descreva como o disco pode interferir no desempenho e na continuidade do serviço baseado em bancos de dados NoSQL, como o MongoDB. Você deve fazer isso em termos conceituais, escrevendo como tal item deve ser observado. Feedback: A velocidade de disco deve ser su�ciente para satisfazer seus requisitos de latência e taxa de transferência. Isso deve ser considerado em conjunto com a RAM (menos RAM geralmente signi�ca mais uso de disco) e o CPU (normalmente não é gargalo do MongoDB, mas, se pouco disco é utilizado, mas o rendimento é baixo, pode ter uma carga de trabalho vinculada à CPU). Isso deve ser veri�cado com um teste de desempenho cuidadoso. Os eventos de desastres são o ponto central das estratégias e técnicas de recuperação de tais cenários. Alguns exemplos são incêndio, inundações, sequestro de dados, ataque de �ooding (que acaba com o desempenho), roubo de dados, entre outros. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 54/61 #PraCegoVer: o infográ�co apresenta o texto “Os eventos de desastres são o ponto central das estratégias e técnicas de recuperação. Alguns exemplos são incêndios, inundações, sequestro de dados, ataque de �ooding (que acaba com o desempenho), roubo de dados, entre outros”. Logo abaixo, seguem cinco tópicos verticais. Ao clicar no primeiro tópico, com o título “Desastres”, é apresentado o texto: “são eventos que podem levar a falhas no seu banco de dados, ser irrecuperáveis e afetar a continuidade do negócio”. Ao clicar no segundo tópico, com o título “Disponibilidade”, é apresentado o texto: “envolve estratégias para evitar desastres, do ponto de vista de desempenho”. Ao clicar no terceiro tópico, com o título “Recuperação”, é apresentado o texto: “envolve estratégias para recuperação de desastres que podem ser a diferença entre a continuidade e a interrupção do negócio”. Ao clicar no quarto tópico, com título “Segurança”, é apresentado o texto: “envolve técnicas para evitar acessos indevidos, que possam levar a desastres”. Ao clicar no quinto tópico, com o título “Continuidade”, é apresentado o texto: “envolve estratégias para manter o negócio, baseado em uso massivo de dados, em cenários de desastres”. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 55/61 Material Complementar indicações L IVRO MongoDB Administrator’s Guide Cyrus Dasadia Editora: Packt Publishing ISBN: 178712648X Comentário: Este livro apresenta uma visão aprofundada sobre a administração de banco de dados MongoDB, diretamente relacionada à continuidade dos negócios. Questões como backup, recuperação, tuning, segurança, entre outros itens, estão presentes neste livro. 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 56/61 F ILME Privacidade Hackeada Ano: 2019 Comentário: Este �lme toca em um dos pontos mais importantes da administração de bancos de dados atualmente, segurança, e mostra como falhas de segurança em bancos de dados podem gerar crises sem precedentes. Questões como a LGPD e a GDPR estão obrigando muitas empresas a darem respostas aos desa�os atuais. TRAIL ER 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 57/61 Conclusão Este estudo apresentou as considerações mais importantes para a implantação do MongoDB em produção. Você deve ter o conhecimento de que precisa para selecionar o hardware certo para o MongoDB, monitorar suas implantações e manter backups regulares. Além disso, deve ter alguma ideia sobre como resolver problemas de desempenho. No �nal das contas, esse conhecimento se desenvolverá com a experiência. Mas o MongoDB é previsível o su�ciente para ser receptivo à heurística simples apresentada aqui – exceto quando não é. O MongoDB tenta tornar a vida mais simples, mas os bancos de dados e suas interações com as aplicações são bastante complexas. As diretrizes neste estudo podem orientá-lo na direção certa, mas, no �nal, depende de você ter um papel ativo na compreensão de seu sistema. Certi�que-se de aproveitar ao máximo os recursos disponíveis, da documentação do MongoDB até o suporte o�cial e da comunidade de mantenedores e usuários. conclusão Referências Bibliográ�cas referências 12/03/2021 Ead.br https://uniritter.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_PLAYER&COURSE_ID=_684922_1&PARENT_I… 58/61 AUTHENTICATION. MongoDB. [2008]. Disponível em: https://docs.mongodb.org/manual/core/authentication. Acesso em: 16 dez. 2020. BAHGA, A.; MADISETTI, V. Big data analytics: a hands-on approach. Califórnia: VPT, 2016. BANKER, K. et al. MongoDB in action. 2. ed. Nova Iorque: Manning Publications, 2016. CAMPELLO, B.; CALDEIRA, P. D. T. Introdução às fontes de informação. 3. ed. Belo Horizonte: Autêntica, 2014. (Biblioteca Laureate). CONNOLLY, T.; BEGG, C. Database systems: a practical approach to design, implementation, and management. 6. ed. Nova Iorque: Person, 2019. (Biblioteca Laureate). CORONEL, C.; MORRIS, S. Database systems: design, implementation, and management. 11. ed. Nova Iorque: Cengage Learning, 2015. DOURADO, D. Big data. São Paulo: Brasport, 2013. MONGODB Compass. MongoDB, [2020]. Disponível em: https://www.mongodb.com/products/compass. Acesso em: 16 dez. 2020. PRIVACIDADE Hackeada | Trailer o�cial | Net�ix. [S. l.: s. n.], 2019. 1 vídeo (2 min 17 s). Publicado pelo canal Net�ix Brasil. Disponível em: https://www.youtube.com/watch?v=wjXYCrxRWqc. Acesso em: 17 dez. 2020. UPGRADE a cluster to use TLS/SSL. MongoDB, [2008]. Disponível em: https://docs.mongodb.com/manual/tutorial/upgrade-cluster-to-ssl/. Acesso em: 16 dez. 2020. SECURITY. MongoDB, [2008]. Disponível em: https://docs.mongodb.com/manual/security/. Acesso em: 16 dez. 2020. https://docs.mongodb.org/manual/core/authentication
Compartilhar