MongoDB - Replicación

La replicación es el proceso de sincronizar datos en varios servidores. La replicación proporciona redundancia y aumenta la disponibilidad de datos con múltiples copias de datos en diferentes servidores de bases de datos. La replicación protege una base de datos de la pérdida de un solo servidor. La replicación también le permite recuperarse de fallas de hardware e interrupciones del servicio. Con copias adicionales de los datos, puede dedicar una a la recuperación de desastres, generación de informes o respaldo.

¿Por qué la replicación?

  • Para mantener sus datos seguros
  • Alta disponibilidad de datos (24 * 7)
  • Recuperación de desastres
  • Sin tiempo de inactividad por mantenimiento (como copias de seguridad, reconstrucciones de índices, compactación)
  • Escala de lectura (copias adicionales para leer)
  • El conjunto de réplicas es transparente para la aplicación

Cómo funciona la replicación en MongoDB

MongoDB logra la replicación mediante el uso de un conjunto de réplicas. Un conjunto de réplicas es un grupo demongodinstancias que alojan el mismo conjunto de datos. En una réplica, un nodo es el nodo principal que recibe todas las operaciones de escritura. Todas las demás instancias, como las secundarias, aplican operaciones desde la primaria para que tengan el mismo conjunto de datos. El conjunto de réplicas solo puede tener un nodo principal.

  • El conjunto de réplicas es un grupo de dos o más nodos (generalmente se requiere un mínimo de 3 nodos).

  • En un conjunto de réplicas, un nodo es el nodo principal y los nodos restantes son secundarios.

  • Todos los datos se replican del nodo primario al secundario.

  • En el momento de la conmutación por error automática o el mantenimiento, se establece la elección para el nodo primario y se elige un nuevo nodo primario.

  • Después de la recuperación del nodo fallido, vuelve a unirse al conjunto de réplicas y funciona como nodo secundario.

Se muestra un diagrama típico de la replicación de MongoDB en el que la aplicación cliente siempre interactúa con el nodo principal y el nodo principal luego replica los datos en los nodos secundarios.

Funciones del conjunto de réplicas

  • Un grupo de N nodos
  • Cualquier nodo puede ser primario
  • Todas las operaciones de escritura van al primario
  • Conmutación por error automática
  • Recuperación automática
  • Elección de consenso de primarias

Configurar un conjunto de réplicas

En este tutorial, convertiremos una instancia de MongoDB independiente en un conjunto de réplicas. Para convertir a un conjunto de réplicas, los siguientes son los pasos:

  • Apague el servidor MongoDB que ya está ejecutando.

  • Inicie el servidor MongoDB especificando la opción - replSet. A continuación se muestra la sintaxis básica de --replSet -

mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"

Ejemplo

mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0
  • Comenzará una instancia de mongod con el nombre rs0, en el puerto 27017.

  • Ahora inicie el símbolo del sistema y conéctese a esta instancia de mongod.

  • En el cliente Mongo, emita el comando rs.initiate() para iniciar un nuevo conjunto de réplicas.

  • Para verificar la configuración del conjunto de réplicas, emita el comando rs.conf(). Para comprobar el estado del conjunto de réplicas, emita el comandors.status().

Agregar miembros al conjunto de réplicas

Para agregar miembros al conjunto de réplicas, inicie instancias de mongod en varias máquinas. Ahora inicie un cliente mongo y emita un comandors.add().

Sintaxis

La sintaxis básica de rs.add() El comando es el siguiente:

>rs.add(HOST_NAME:PORT)

Ejemplo

Suponga que el nombre de su instancia mongod es mongod1.net y se está ejecutando en el puerto 27017. Para agregar esta instancia al conjunto de réplicas, emita el comandors.add() en el cliente Mongo.

>rs.add("mongod1.net:27017")
>

Puede agregar una instancia de mongod al conjunto de réplicas solo cuando esté conectado al nodo principal. Para verificar si está conectado al primario o no, emita el comandodb.isMaster() en cliente mongo.