Copias de seguridad PIT de MongoDB: Parte 2

Esta publicación de blog es la segunda de una serie que cubre las copias de seguridad PIT de MongoDB. Puedes encontrar la primera parte aquí.

Sharding hace que todo sea divertido (ner)

tu primera entrada de blog en esta serie vio las copias de seguridad de MongoDB en un entorno simple de una sola réplica. En esta publicación, analizamos el caso de uso de escalamiento horizontal. Al fragmentar, tenemos exactamente el mismo problema que tenemos en un solo conjunto de réplicas. Sin embargo, ahora el problema se multiplica por la cantidad de réplicas en el clúster. Además, tenemos un problema adicional: cada conjunto de réplicas tiene datos únicos. Esto significa que, para obtener una instantánea realmente coherente del clúster, debemos organizar nuestras copias de seguridad para capturar un único punto coherente en el tiempo. El hecho de que estemos en la misma página significa que cada conjunto de replicación debe detener su copia de seguridad al mismo tiempo o casi al mismo tiempo que se detiene el conjunto de replicación más lento. ¿Estoy lo suficientemente confundido ahora? Permítanme llegar a un concepto básico que olvidé cubrir en primer lugar, y luego les daré una descripción simple del problema.

Es usted Escribe preocupado?

Hasta ahora, me he olvidado de hablar sobre el papel muy importante de «escribe preocupación«cuando realiza copias de seguridad coherentes. En MongoDB, la base de datos no es duradera de forma predeterminada. Por» duradera «, quiero decir» en el disco «cuando la base de datos reconoce la recepción de una operación de su aplicación. Es más probable que haya varias razones para esto .Es muy probable que originalmente el mayor sea el rendimiento debido a la falta de competencia.

Sin embargo, el efecto secundario es la posible pérdida de datos debido a la pérdida de operación aplicada solo en la memoria. Cambiar a diario escribir preocupación (
j : cierto
) cambiará este comportamiento para que los registros de MongoDB cambien antes de que se reconozca (también debe ejecutarse con el registro habilitado).

PROPINA: Para una verdadera durabilidad en un conjunto de réplicas, debe usar una preocupación de escritura de «mayoria”Para operaciones y writeConcernMajorityJournalDefault: true on todos los miembros del conjunto de réplicas (nuevo en v3.4). Esto tiene el beneficio adicional de disminuir en gran medida la probabilidad de Retroceder después de una elección.

Wow, sí inconsistente

A riesgo de ser repetitivo, el núcleo de este problema es que necesitamos realizar una copia de seguridad en cada fragmento (conjunto de réplicas). Esto es necesario porque cada fragmento tiene un conjunto de datos diferente. Se necesita cada parte de ese conjunto de datos para obtener una imagen completa del conjunto de datos para el clúster (y, por lo tanto, su aplicación). Ya que usaremos mongodump, solo obtendremos una instantánea consistente en el momento en que se complete la copia de seguridad. Esto significa que debemos finalizar la copia de seguridad de cada fragmento en un momento determinado. No podemos esperar que la copia de seguridad se complete exactamente al mismo tiempo en cada fragmento, que es lo que necesitamos para un punto en el tiempo consistente en el clúster. Esto significa que Shard1 podría tener una copia de seguridad coherente a las 12:05 p. m. y otra partición coherente a las 12:06 p. m. En un entorno de alto tráfico (el tipo que probablemente necesite una escala horizontal), esto podría significar la pérdida de miles de documentos. Aquí hay un diagrama:

Copias de seguridad PIT de MongoDB

Aquí están las matemáticas para ilustrar el problema:

  • La copia de seguridad de Shard1 contiene 30 000 documentos ((100 documentos * 60) * 5 minutos)
  • La copia de seguridad de Shard2 contiene 36 000 documentos ((100 documentos * 60 segundos) * 6 minutos)

En este ejemplo, para obtener un punto en el tiempo consistente, debe eliminar todas las operaciones de inserción, actualización y eliminación que ocurrieron en Shard 2 desde el momento en que finalizó la copia de seguridad de Shard 1 (6000 documentos). Esto significa examinar la marca de tiempo de cada operación en el registro de operaciones e invertir su operación. Es un proceso muy intensivo y será único para cada mongodump que se ejecute. Además, esto es algo bastante complicado de hacer. El método más repetible y más eficiente es tener copias de seguridad que terminen en un estado consistente, listas para restaurar cuando sea necesario.

¡Por suerte, Percona lo cubrió!

Cada vez eres más consistente.

Tener datos es importante, pero saber qué datos tienes es aún más importante. Aquí le mostramos cómo asegurarse de saber lo que tiene en sus copias de seguridad de MongoDB:

David Murphy lanzó su Herramienta de copia de seguridad consistente de MongoDB en la cuenta de github de Percona Labs, y escribió una publicación muy informativa entrada en el blog sobre él. Mi objetivo con estas publicaciones de blog es facilitar aún más la comprensión del problema y cómo resolverlo. Ya hemos discutido a fondo el problema a pequeña y gran escala. ¿Qué tal la solución?

En realidad es bastante simple. La solución, en un nivel básico, es usar un algoritmo simple para decidir cuándo se puede alcanzar un punto en el tiempo consistente en el clúster. En la herramienta de copia de seguridad coherente de MongoDB, esto lo hacen los hosts de copia de seguridad que lanzan copias de seguridad en un «miembro conocido» de cada fragmento (es una característica bastante buena en sí misma) y luego siguen el progreso de cada volcado. Al mismo tiempo que se activa la copia de seguridad, el host de copia de seguridad inicia un subproceso separado que pega el registro de operaciones sobre cada «miembro conocido» hasta que finaliza el mongodump en el fragmento más lento. Con este método, tenemos una forma muy sencilla de decidir cuándo podemos tener una instantánea coherente en el clúster. En otras palabras, cuando el miembro más lento completa su trabajo. Esta es la misma carga de trabajo de la Figura 4, pero con la metodología consistente de la utilidad de copia de seguridad de MongoDB:

Copias de seguridad PIT de MongoDB

Copias de seguridad PIT de MongoDB

PROPINA: La cantidad de tiempo que lleva hacer estas copias de seguridad a menudo se decide por dos factores:

  1. Cómo los datos se distribuyen uniformemente entre fragmentos (equilibrados)
  2. Cuántos datos contiene cada fragmento (si está equilibrado o no).

El problema aquí es que es posible que necesite fragmentos para que cada fragmento tenga una cantidad manejable de datos. Esto le permite hacer una copia de seguridad de su copia de seguridad/restauración de Windows más fácilmente.

… La proverbial «llave del mono»

Siempre hay un «te pillé» justo cuando crees que tienes en mente cualquier concepto difícil. Por supuesto, esto no es diferente.

Hay un concepto muy crítico en la fragmentación que no cubrimos: rastrear qué datos hay en qué fragmento. Esto es importante para dirigir la carga de trabajo al lugar correcto y equilibrar los datos entre fragmentos. En MongoDB, esto se completa con el los servidores de configuración. Si no puedes alcanzar (o recuperar) sus servidores de configuración, todo su clúster se pierde. Por razones obvias, también necesita hacer una copia de seguridad. Con la herramienta de copia de seguridad coherente MongoDB de Percona Labs, en realidad hay dos formas de hacer copias de seguridad de los servidores de configuración: v3.2 y superior, y legado. La razón es que en v3.2, los servidores de configuración cambian de espejos a un conjunto de réplicas estándar. En el modo v3.2, solo tratamos los servidores de configuración como otro conjunto de réplicas. Tienen su propio hilo de cola mongodump y oplog. Obtenga una copia de seguridad que sea coherente en el mismo momento que todos los demás fragmentos del clúster. Si tiene una versión de MongoDB anterior a v3.2 y está interesado en una explicación del modo relacionado, regrese a entrada de blog de David.

U terminar

Hemos analizado los problemas para obtener copias de seguridad consistentes en un entorno MongoDB que se ejecuta en esta y en publicaciones de blog anteriores. Ya sea que tenga un solo conjunto de réplicas o un clúster fragmentado, debe comprender mucho mejor cuáles son los problemas y cómo los ha abordado Percona. Si todavía está confundido, o simplemente desea hacer algunas preguntas adicionales, deje un comentario en la sección a continuación. O envíame un tweet de @jontobs y me aseguraré de responderte.

Author: Ing. Luis

A lo largo de conocer Windows y otros sistemas operativos me eh encontrado con diversos tipos de error, ahora brindo soluciones según mi experiencia-

Deja un comentario