sql >> Base de Datos >  >> NoSQL >> MongoDB

Los conceptos básicos de la implementación de un conjunto de réplicas y fragmentos de MongoDB mediante Puppet

El sistema de base de datos funciona mejor cuando está integrado con algunos enfoques bien definidos que facilitan las operaciones de rendimiento de lectura y escritura. MongoDB hizo un esfuerzo adicional al adoptar la replicación y la fragmentación con el objetivo de permitir el escalado horizontal y vertical en lugar de los DBM relacionales cuyo mismo concepto solo mejora el escalado vertical.

 La fragmentación garantiza la distribución de la carga entre los miembros del clúster de la base de datos para que las operaciones de lectura se realicen con poca latencia. Sin la fragmentación, la capacidad de un solo servidor de base de datos con un gran conjunto de datos y operaciones de alto rendimiento puede verse desafiada técnicamente y puede provocar la falla de ese servidor si no se toman en cuenta las medidas necesarias. Por ejemplo, si la tasa de consultas es muy alta, la capacidad de la CPU del servidor se verá abrumada.

La replicación, por otro lado, es un concepto mediante el cual diferentes servidores de bases de datos alojan los mismos datos. Garantiza una alta disponibilidad de los datos además de mejorar la integridad de los datos. Tome un ejemplo de una aplicación de redes sociales de alto rendimiento, si el sistema de base de datos de servicio principal falla como en el caso de un apagón, deberíamos tener otro sistema para servir los mismos datos. Un buen conjunto de réplicas debe tener más de 3 miembros, un árbitro y una elección óptima de TimeoutMillis. En la replicación, tendremos un nodo maestro/primario donde se realizan todas las operaciones de escritura y luego se aplican a un Oplog. Desde el Oplog, todos los cambios realizados se aplican luego a los demás miembros, que en este caso se denominan nodos secundarios o esclavos. En caso de que los nodos primarios no se comuniquen después de un tiempo:choiceTimeoutMillis, se indica a los otros nodos que realicen una elección. El choiceTimeoutMillis debe configurarse ni demasiado alto ni demasiado bajo por la razón de que los sistemas estarán inactivos durante mucho tiempo y, por lo tanto, perderán una gran cantidad de datos o elecciones frecuentes que pueden resultar incluso con latencia de red temporal, por lo tanto, inconsistencia de datos, respectivamente. Se utiliza un árbitro para agregar un voto a un miembro ganador para convertirse en maestro en caso de que haya un empate, pero no lleva ningún dato como los otros miembros.

Por qué usar Puppet para implementar un conjunto de réplicas de MongoDB

Más a menudo, la fragmentación se usa junto con la replicación. El proceso de configuración y mantenimiento de un conjunto de réplicas no es fácil debido a:

  1. Altas posibilidades de error humano
  2. Incapacidad para realizar tareas repetitivas automáticamente
  3. Consume mucho tiempo, especialmente cuando hay un gran número de miembros involucrados
  4. Posibilidad de insatisfacción laboral
  5. Complejidad abrumadora que puede surgir.

Para superar los contratiempos descritos, nos conformamos con un sistema automatizado como Puppet que tiene muchos recursos para ayudarnos a trabajar con facilidad.

En nuestro blog anterior, aprendimos el proceso de instalación y configuración de MongoDB con Puppet. Sin embargo, es importante comprender los recursos básicos de Puppet, ya que los usaremos para configurar nuestro conjunto de réplicas y fragmentos. En caso de que se lo haya perdido, este es el archivo de manifiesto para el proceso de instalación y ejecución de su MongoDB en la máquina que creó

​  package {'mongodb':

    ensure => 'installed',

  }

  service {'mongodb':

    ensure => 'running',

    enable => true

  }

Entonces podemos poner el contenido anterior en un archivo llamado runMongoDB.pp y ejecutarlo con el comando 

$ sudo apply runMongoDB.pp

Sing the 'mongodb' module and functions, podemos configurar nuestro conjunto de réplicas con los parámetros correspondientes para cada recurso de mongodb.

Conexión MongoDB

Necesitamos establecer una conexión mongodb entre un nodo y el servidor mongodb. El objetivo principal de esto es evitar que se apliquen cambios de configuración si no se puede acceder al servidor mongodb, pero se puede usar potencialmente para otros fines, como el monitoreo de la base de datos. Usamos mongodb_conn_validator

mongodb_conn_validator{‘mongodb_validator’:

ensure => present,

     server: ‘127.0.0.1:27017’,

     timeout: 40,

     tcp_port:27017

    }

nombre:  en este caso, el nombre mongodb_validator define la identidad del recurso. También podría considerarse como una cadena de conexión

servidor:podría ser una cadena o una matriz de cadenas que contengan nombres DNS/direcciones IP del servidor donde debería ejecutarse mongodb.

tiempo de espera:este es el número máximo de segundos que el validador debe esperar antes de decidir que la base de datos de marionetas no se está ejecutando.

tcp_port:  este es un proveedor para el recurso que valida la conexión mongodb al intentar la conexión https al servidor mongodb. La configuración del certificado SSL de la marioneta del entorno local de la marioneta se utiliza en la autenticación.

Creación de la base de datos

mongodb_database{‘databaseName’:

ensure => present,

     tries => 10

}

Esta función toma 3 parámetros que son:

nombre:  en este caso el nombre nombreBaseDeDatos define el nombre de la base de datos que estamos creando, que también se habría declarado como nombre => ‘NombreBaseDeDatos’.

intentos:esto define la cantidad máxima de intentos de dos segundos para esperar el inicio de MongoDB

Creación de usuario MongoDB

El módulo mongodb_user permite crear y administrar usuarios para una base de datos determinada en el módulo de marionetas.

mongodb_user {userprod:

  username => ‘prodUser’,

  ensure => present,

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

  database => prodUser,

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

  tries  => 10

}

Propiedades

username:define el nombre del usuario.

password_hash:este es el hash de la contraseña del usuario. La función mongodb_password() disponible en MongoDB 3.0 y versiones posteriores se usa para crear el hash.

roles:esto define los roles que el usuario puede ejecutar en la base de datos de destino.

contraseña:este es el texto simple de la contraseña de usuario.

base de datos:define la base de datos de destino del usuario.

Creación de un conjunto de réplicas

Usamos el módulo mongodb_replset para crear un 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

}

nombre:define el nombre del conjunto de réplicas.

miembros:una matriz de miembros que contendrá el conjunto de réplicas.

initialize_host:host que se usará en la inicialización del conjunto de réplicas

árbitro:define el miembro del conjunto de réplicas que se utilizará como árbitro.

Creación de un fragmento de MongoDB

mongodb_shard{'shard1':

   ensure  => present,

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

   keys: 'price'

}

nombre:define el nombre del fragmento.

miembros:esta es la matriz de miembros que contendrá el fragmento.

claves:defina la clave que se usará en la fragmentación o una matriz de claves que se pueden usar para crear una clave de fragmento compuesta.