MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Noções básicas de implantação de um conjunto de réplicas e fragmentos do MongoDB usando o Puppet

Os sistemas de banco de dados têm melhor desempenho quando integrados a algumas abordagens bem definidas que facilitam as operações de taxa de transferência de leitura e gravação. O MongoDB foi além ao adotar a replicação e o sharding com o objetivo de permitir o dimensionamento horizontal e vertical em oposição aos DBMs relacionais cujo mesmo conceito apenas aprimora o dimensionamento vertical.

 A fragmentação garante a distribuição da carga entre os membros do cluster de banco de dados para que as operações de leitura sejam realizadas com pouca latência. Sem sharding, a capacidade de um único servidor de banco de dados com um grande conjunto de dados e operações de alto rendimento pode ser tecnicamente desafiada e pode resultar em falha desse servidor se as medidas necessárias não forem levadas em consideração. Por exemplo, se a taxa de consultas for muito alta, a capacidade da CPU do servidor ficará sobrecarregada.

A replicação, por outro lado, é um conceito pelo qual diferentes servidores de banco de dados hospedam os mesmos dados. Garante alta disponibilidade de dados, além de melhorar a integridade dos dados. Tomemos um exemplo de um aplicativo de mídia social de alto desempenho, se o sistema de banco de dados de serviço principal falhar como no caso de um apagão de energia, deveríamos ter outro sistema para servir os mesmos dados. Um bom conjunto de réplicas deve ter mais de 3 membros, um árbitro e uma eleição idealTimeoutMillis. Na replicação, teremos um nó mestre/primário onde todas as operações de escrita são feitas e depois aplicadas a um Oplog. A partir do Oplog, todas as alterações feitas são então aplicadas aos outros membros, que neste caso são chamados de nós secundários ou escravos. Caso os nós primários não se comuniquem após algum tempo:eleiçãoTimeoutMillis, os outros nós são sinalizados para uma eleição. O selectionTimeoutMillis deve ser definido como não muito alto nem muito baixo, pois os sistemas ficarão inativos por um longo tempo, portanto, perderão muitos dados ou eleições frequentes que podem resultar mesmo com latência de rede temporária, portanto, inconsistência de dados, respectivamente. Um árbitro é usado para adicionar um voto a um membro vencedor para se tornar um mestre no caso de haver um empate, mas não carrega nenhum dado como os outros membros.

Por que usar o Puppet para implantar um conjunto de réplicas do MongoDB

Mais frequentemente, a fragmentação é usada em conjunto com a replicação. O processo de configuração e manutenção de um conjunto de réplicas não é fácil devido a:

  1. Altas chances de erro humano
  2. Incapacidade de realizar tarefas repetitivas automaticamente
  3. Demora muito, especialmente quando um grande número de membros está envolvido
  4. Possibilidade de insatisfação no trabalho
  5. Complexidade esmagadora que pode surgir.

Para superar os contratempos descritos, optamos por um sistema automatizado como o Puppet que possui muitos recursos para nos ajudar a trabalhar com facilidade.

Em nosso blog anterior, aprendemos o processo de instalação e configuração do MongoDB com Puppet. No entanto, é importante entender os recursos básicos do Puppet, pois os usaremos na configuração de nosso conjunto de réplicas e fragmentos. Caso você tenha perdido, este é o arquivo manifesto para o processo de instalação e execução do seu MongoDB na máquina que você criou

​  package {'mongodb':

    ensure => 'installed',

  }

  service {'mongodb':

    ensure => 'running',

    enable => true

  }

Então podemos colocar o conteúdo acima em um arquivo chamado runMongoDB.pp e executá-lo com o comando

$ sudo apply runMongoDB.pp

Cantando o módulo e as funções 'mongodb', podemos configurar nosso conjunto de réplicas com os parâmetros correspondentes para cada recurso do mongodb.

Conexão MongoDB

Precisamos estabelecer uma conexão mongodb entre um nó e o servidor mongodb. O principal objetivo disso é impedir que as alterações de configuração sejam aplicadas se o servidor mongodb não puder ser alcançado, mas possa ser usado para outros fins, como monitoramento de banco de dados. Usamos o mongodb_conn_validator

mongodb_conn_validator{‘mongodb_validator’:

ensure => present,

     server: ‘127.0.0.1:27017’,

     timeout: 40,

     tcp_port:27017

    }

name: nesse caso, o nome mongodb_validator define a identidade do recurso. Também pode ser considerado como uma string de conexão

servidor:pode ser uma string ou um array de strings contendo nomes DNS/endereços IP do servidor onde o mongodb deve estar rodando.

timeout:este é o número máximo de segundos que o validador deve esperar antes de decidir que o puppetdb não está em execução.

tcp_port: este é um provedor para o recurso que valida a conexão mongodb tentando a conexão https com o servidor mongodb. A configuração do certificado SSL do fantoche do ambiente do fantoche local é usada na autenticação.

Criando o banco de dados

mongodb_database{‘databaseName’:

ensure => present,

     tries => 10

}

Esta função usa 3 parâmetros que são:

name: nesse caso, o nome databaseName define o nome do banco de dados que estamos criando, que também teria sido declarado como name => ‘databaseName’.

tentativas:define a quantidade máxima de dois segundos de tentativas para aguardar a inicialização do MongoDB

Criando usuário do MongoDB

O módulo mongodb_user permite criar e gerenciar usuários para um determinado banco de dados no módulo puppet.

mongodb_user {userprod:

  username => ‘prodUser’,

  ensure => present,

  password_hash => mongodb_password(‘prodUser’, ‘passProdser’),

  database => prodUser,

  roles => [‘readWrite’, ‘dbAdmin’],

  tries  => 10

}

Propriedades

username:define o nome do usuário.

password_hash:este é o hash da senha do usuário. A função mongodb_password() disponível no MongoDB 3.0 e posterior é usada para criar o hash.

funções:define as funções que o usuário tem permissão para executar no banco de dados de destino.

senha:este é o texto simples da senha do usuário.

banco de dados:define o banco de dados de destino do usuário.

Criando um conjunto de réplicas

Usamos o módulo mongodb_replset para criar um conjunto de réplicas.

Mongodb_replset{'replicaset1':

   arbiter: 'host0:27017',

   ensure  => present,

   members => ['host0:27017','host1:27017', 'host2:27017', 'host3:27017'] 

   initialize_host: host1:27017

}

nome:define o nome do conjunto de réplicas.

membros:uma matriz de membros que o conjunto de réplicas  conterá.

initialize_host:host a ser usado na inicialização do conjunto de réplicas

árbitro:define o membro do conjunto de réplicas que será usado como árbitro.

Criando um fragmento do MongoDB

mongodb_shard{'shard1':

   ensure  => present,

   members => ['shard1/host1:27017', 'shard1/host2:27017', 'shard1/host3:27017'] 

   keys: 'price'

}

nome:define o nome do fragmento.

membros:esta é a matriz de membros que o fragmento guardará.

keys:define a chave a ser usada na fragmentação ou um array de chaves que podem ser usadas para criar uma chave de fragmentação composta.