2012-02-29 11 views
13

Leí sobre las diferentes configuraciones de MongoDB para hacer copias de seguridad sin tiempo de inactividad. ¿Qué estrategia es mejor o incluso pueden ser comparadas?MongoDb Copia de seguridad en caliente - copie data/réplica de VS VS con fsyncLock

  1. habilitar el diario y simplemente copiar el directorio /data/db - no está claro para mí si esto es suficiente - en la página principal de MongoDB se afirma que hay que "instantánea" y funciona en SAN y LVM como ejemplos .

    Preguntas:

    ¿Qué significa instantánea en este contexto será un recuento comando de copia como una instantánea? ¿Es seguro copiar un directorio de datos MongoDB (2.0+) en un servidor Windows con NTFS? ¿Cómo se asegura de que sea seguro hacerlo en su propio sistema de archivos y configuración?

  2. Establezca un conjunto de réplicas con 2 servidores y un árbitro. Luego use rs.status() y fsyncLock/unlock para asegurarse de que los datos se lean solo en el servidor secundario mientras se realiza la copia de seguridad.

    > db.fsyncLock 
    function() { 
        return db.adminCommand({fsync:1, lock:true}); 
    } 
    > db.fsyncUnlock 
    function() { 
        return db.getSiblingDB("admin").$cmd.sys.unlock.findOne(); 
    } 
    

    Preguntas:

    Si utiliza bloqueos en un conjunto de réplicas parece que escribe y lee puede ser bloqueado para todo el conjunto de la réplica y this bug no se ha fijado?

    ¿Qué pasa si el secundario se vota como primario mientras la copia de seguridad está en progreso? ¿Se detendrá el proceso de copia de seguridad o la réplica dejará de responder a las solicitudes de escritura hasta que se desbloquee?

    Consideraciones:

    Por ahora me gustaría que la solución simple y sencillamente copiar el directorio data/db con los archivos de revistas y esperar con el conjunto de réplicas. MongoDB se ejecuta en un servidor de Windows de 64 bits (RackSpace Cloud).

Respuesta

12

La mejor apuesta es hacer fsync + bloqueo en un secundario, entonces instantánea el volumen en el nivel de disco o volumen (por ejemplo, usando lvm2, Hyper-V, btrfs), desbloquear la base de datos, a continuación, copiar el snapshotted archivos de información. Esto minimiza el tiempo de inactividad del secundario y es fácil de restaurar.

"Snapshotting" en este contexto se refiere a las características de instantáneas que ofrecen algunos administradores de volúmenes, sistemas de archivos e hipervisores. Básicamente, se trata de una función de "copia sobre escritura" para dispositivos de bloque: en lugar de sobreescribir datos cuando el sistema operativo lo exige, escribirá los nuevos datos en otro lugar y mantendrá legible tanto la versión anterior como la nueva. La captura de imágenes generalmente no lleva mucho tiempo, pero en algunos sistemas, es una mala idea guardar muchas instantáneas de los mismos archivos, ya que puede ralentizar dramáticamente las escrituras futuras.

por las que creo que es la mejor estrategia para copias de seguridad completas :

  1. Uso mongodump no almacenará los datos del índice serán restaurados Los índices, pero la reconstrucción de los índices de recuperación puede tardar horas - Lo último que necesita cuando todo el mundo le grita es una operación que demora horas y no se puede acelerar.

  2. bloqueo Fsync + bloqueará escritores y lectores podrían bloquear por lo tanto, lo mejor es hacerlo en un (pasivo) secundaria, no en el primario.

  3. Detener un secundario llenará el oplog por lo que debe mantener el tiempo de bloqueo lo más corto posible. En lugar de copiar todos los archivos de datos (lo que podría llevar horas) durante el bloqueo, simplemente realizar una instantánea debería tomar solo un par de segundos. Por lo tanto, los límites de oplog no son una preocupación.

  4. Todo es 'volver a la normalidad' mientras la copia real se está ejecutando, lo que le da tranquilidad. La única diferencia será una mayor carga en un secundario durante la copia de seguridad, lo que no debería ser una preocupación importante.

Direccionamiento de sus preguntas:

  • con respecto a los bloqueos en conjuntos de réplicas: Mantener el tiempo de bloqueo corto, y el uso de una secundaria pasiva (maestro que no puede ser elegido) por lo que la cola de escritor puede' t puesto.

  • "¿Qué pasa si se vota la secundaria en tan primario, mientras que la copia de seguridad está en curso" no puede suceder si su sistema de copia de seguridad es pasivo

Por ahora me gustaría que la solución simple y simplemente copie el directorio de datos/db con archivos de diario y espere con el conjunto de réplicas. El MongoDB se ejecuta en un servidor de Windows de 64 bits (RackSpace Cloud).

Puedes hacer eso. La toma de instantáneas de volumen probablemente sea la mejor opción, ya que le ofrece solo segundos de tiempo de inactividad. Si sus datos son pequeños, un simple mongodump podría ser aún más fácil, pero asegúrese de que los tiempos de recuperación sean aceptables (depende de sus índices).

Cuestiones relacionadas