IT-Admin.tech

Copias de seguridad para sistemas NoSQL (MongoDB, Cassandra): puntos de consistencia, incrementales y restauración

Administrator zeigt auf ein textfreies Diagramm zu Snapshot, Log-Stream und Restore-Zeitachse für NoSQL-Backups.
Ein belastbarer Backup-Plan verbindet konsistente Snapshots mit nachvollziehbaren Log-Positionen und einem geübten Restore-Pfad.

Las bases de datos NoSQL suelen percibirse en producción como „fáciles de escalar“; al hacer backups llega la desilusión. „Un volcado basta“ funciona rara vez en sistemas distribuidos, y aun una ejecución de copia de seguridad exitosa dice poco sobre si de ella puede RESTaurarse un estado consistente. Aquí es donde entra este artículo: Copias de seguridad para sistemas NoSQL (usando como ejemplo MongoDB y Cassandra) requieren puntos de consistencia planificados de forma deliberada (estados de datos definidos y coherentes), una estrategia incremental robusta y, sobre todo, un proceso de RESTauración que siga siendo reproducible bajo presión de tiempo.

El enfoque está en lo que los administradores y operadores necesitan realmente en el día a día: requisitos previos, errores típicos, pasos de verificación, implementación, resolución de problemas y una estrategia de retroceso. Donde los comandos son útiles, hay bloques copiables – sin perderse en el marketing de herramientas o en detalles internos de frameworks.

Copias de seguridad para sistemas NoSQL en la práctica

Muchos sistemas NoSQL son distribuidos (varios nodos/Nodes), usan replicación (los datos se almacenan de forma redundante) y permiten consistencia eventual (alineación con retraso temporal). Eso es bueno para la disponibilidad – malo para métodos de backup ingenuos.

Patrones de fallo típicos en operación:

  • „La copia de seguridad se completó, la RESTauración falla“: Los datos no estaban consistentes al hacer la copia (p. ej. snapshot sin checkpoint limpio o sin la posición de transacción/log adecuada).
  • Falta el estado a nivel de clúster: Solo se guardaron archivos de datos, pero no metadatos/configuración del clúster (configuración de ReplicaSet, keyfiles, TLS-Keys, esquema/índices, información de tokens/topología).
  • Cadena incremental es inutilizable: Falta un segmento, la rotación de logs fue demasiado agresiva, o las ventanas de tiempo no se solapan (p. ej. en MongoDB el rango del Oplog demasiado pequeño).
  • La RESTauración tarda demasiado: Se ignora el RTO (tiempo máximo de recuperación tolerable) hasta que ocurre el caso real – entonces bloquean reconstrucciones, reparaciones, replays o el ancho de banda de red.

La consecuencia: el backup de NoSQL es menos „copiar archivos“ y más un estado de datos definido más un camino reproducible para regresar – incluido el test.

Términos básicos: punto de consistencia, RPO/RTO e „incremental“ en el contexto NoSQL

Punto de consistencia significa: existe un instante/estado en el que los datos están presentes de modo que el proceso de la base de datos los acepta como válidos al arrancar y que encajan lógicamente entre sí. En bases de datos clásicas eso se consigue mediante Write-Ahead-Logs (WAL) y checkpoints. En sistemas NoSQL hay equivalentes – pero difieren.

RPO (Recovery Point Objective) es la pérdida de datos máxima tolerable medida en tiempo (p. ej. 15 minutos). RTO (Recovery Time Objective) es el tiempo máximo de recuperación tolerable (p. ej. 2 horas). Ambos valores determinan si debe apostar por snapshots, Log-Shipping, estrategias incrementales, replicación o combinaciones.

Copia incremental significa en la práctica: no respalda todo el conjunto de datos cada vez, sino solo los cambios desde el último punto de respaldo. En NoSQL eso suele ser basado en logs (p. ej. Oplog de MongoDB) o basado en archivos/segmentos (p. ej. SSTables de Cassandra más Commitlog). Importante: „incremental“ es tan bueno como la cadena de reconstrucción y su validación.

Puntos de consistencia en MongoDB: snapshots, checkpoints y Oplog

Textfreie Grafik zu MongoDB Replica Set, Oplog-Ringpuffer und Snapshot-Zeitpunkt.
Lógica de copia de seguridad de MongoDB: instantánea más el punto temporal del Oplog como base para la recuperación incremental.

MongoDB suele usar WiredTiger según la versión/engine de almacenamiento. WiredTiger crea Checkpoints (estados coherentes en disco) y además emplea Journaling (lógica de recuperación). Para las copias de seguridad es crucial qué objetivo persigue:

  • Consistente ante fallos (crash-consistente): los archivos de datos se copian en caliente (p. ej. Storage-Snapshot). MongoDB puede al arrancar restaurar un estado consistente a partir del journal/recuperación, pero eso no equivale automáticamente a un punto de consistencia de aplicación “limpio” entre varios nodos.
  • Consistente con replicación / punto temporal: se protege un estado que corresponde a un definido punto temporal del Oplog (Oplog = Operation Log, un registro circular de cambios replicados en el Replica Set). Con ello pueden restaurar hasta un tiempo concreto (similar a PITR, Point-in-Time Recovery).

Patrón consolidado: copia de seguridad desde un nodo Secondary (o Hidden)

En los Replica Sets es habitual realizar la copia desde un Secondary o un Hidden node (Hidden = participa en la replicación pero no atiende lecturas). Ventaja: menor carga en el Primary. Riesgo: si el Secondary va con mucho retraso (Replication Lag), está protegiendo un estado que respecto al Primary es sustancialmente más antiguo — relevante para su RPO.

Compruebe antes del backup al menos: estado de replicación, lag, ventana del Oplog. Comandos de ejemplo:

Shell
mongosh --quiet --eval 'rs.printReplicationInfo()'
mongosh --quiet --eval 'rs.status().members.map(m => ({name:m.name, state:m.stateStr, optimeDate:m.optimeDate, health:m.health}))'

Por qué ayuda: rs.printReplicationInfo() muestra, entre otras cosas, la duración del Oplog («log length»). Si su enfoque incremental se basa en el Oplog, el rango del Oplog debe ser mayor que su intervalo de backup más un margen (ventana de mantenimiento, fallos, demoras).

Backup por snapshot: obtener consistencia sin detener MongoDB

Si usa snapshots de almacenamiento (LVM, ZFS, SAN/Array, Cloud-Volume-Snapshot), el objetivo es un estado puntual del sistema de ficheros. Eso inicialmente solo es «crash-consistente». Para MongoDB suele ser suficiente si incluye el journal en la copia y el snapshot es atómico y limpio (sin escrituras a medio completar a través de varios volúmenes).

Reglas prácticas de operación:

  • Un volumen por ruta de datos de MongoDB (o un snapshot sincronizado de todos los volúmenes implicados). Si datos y journal están separados, ambos deben corresponder al mismo punto temporal del snapshot.
  • No copiar archivos con rsync en caliente como «backup barato». A menudo funciona, hasta que falla la primera vez.
  • Retención de metadatos: mongod.conf, Keyfile (Replica Set Auth), certificados TLS/claves, scripts de automatización, parámetros (p. ej. featureCompatibilityVersion, si es relevante para las rutas de Downgrade/Upgrade).
  • Si su objetivo es la recuperación a un punto en el tiempo exacto, necesita además una cadena basada en el Oplog o un mecanismo que registre la posición del log. Un snapshot sin punto de referencia se puede iniciar, pero no es posible reproducirlo de forma determinista „hasta las 10:37:15“.

    Inkrementell in MongoDB: Oplog als Änderungsstrom – mit zwei Haken

    Para los „Incrementals“ el Oplog es lo obvio: contiene las operaciones replicadas. Dos inconvenientes típicos:

    • El Oplog es un buffer circular: si el Oplog está dimensionado demasiado pequeño, sobrescribirá entradas antiguas. Entonces su cadena incremental se rompe, incluso si todos los trabajos de backup aparecen como exitosos.
    • Cambios de topología y de roles: Failover, escenarios de Rollback o Re-Syncs pueden provocar que un nodo tenga un historial distinto. En esos casos es arriesgado «avanzar el Oplog» sin una fuente clara.

    En términos operativos, esto significa: dimensione la ventana del Oplog de modo que cubra varios ciclos de backup, y supervise el lag y el alcance del Oplog. Además, las pruebas de RESTauración deberían incluir siempre una parte de «Log-Replay», de lo contrario PITR seguirá siendo teórico.

    Puntos de consistencia en Cassandra: SSTables, Commitlog y lógica de snapshots

    Foto eines Storage-Servers mit abstrahierten Dateisegmenten als Metapher für Cassandra SSTables und Commitlog.
    Las copias de seguridad de Cassandra giran en torno a los SSTables, las dependencias del Commitlog y una asignación limpia de snapshots por nodo.

    Apache Cassandra es un sistema distribuido de tipo wide-column. Los datos primero llegan al Memtable (estructura en RAM) y luego se escriben en disco como SSTables (Sorted String Tables, segmentos de datos inmutables). Además existe el Commitlog (Write-Ahead-Log), que asegura las escrituras hasta que se vuelcan en SSTables.

    Para las copias de seguridad esto significa:

    • Un estado consistente suele constar de SSTables más los segmentos de Commitlog correspondientes (si desea acercarse a «hasta la última escritura»).
    • «Snapshot» en Cassandra suele significar: hardlinks/copias de los SSTables actuales por keyspace/table – no necesariamente un storage-snapshot.
    • Debido a que Cassandra es distribuido, la consistencia a nivel de clúster es más difícil: un snapshot en el nodo A no es automáticamente el mismo estado que en el nodo B.

    Cassandra-Snapshots: schnell, aber nur so gut wie Ihr RESTore-Pfad

    Cassandra puede generar snapshots por nodo, típicamente vía nodetool. Esto es rápido porque los SSTables son inmutables y con frecuencia solo se crean hardlinks. Ejemplo:

    Shell
    # Snapshot für einen Keyspace auf einem Node
    nodetool snapshot --tag nightly_2026-08-19 my_keyspace
    
    # Auflistung vorhandener Snapshots
    nodetool listsnapshots

    Por qué funciona: Las SSTables no se modifican después de escribirse. Un Snapshot referencia exactamente esos archivos. Cuándo falla: Si durante la RESTauración no sabe con precisión qué SSTables pertenecen a qué momento y a qué topología, o si solo dispone de Snapshots de una parte de los Nodes (según el factor de replicación y la distribución de tokens).

    Backups incrementales en Cassandra: „incremental backups“ vs. verdaderamente incrementales

    Cassandra ofrece „incremental backups“ como característica, en la que los nuevos SSTables se hardverlinken/copian adicionalmente a un directorio de backup. Esto es útil, pero no constituye un concepto de backup completo: sigue necesitando Snapshots como línea base y debe controlar la cadena (retención, limpieza, RESTauración).

    Aspectos operativos importantes:

    • Compaction (proceso en segundo plano para fusionar SSTables) genera nuevas SSTables y deja obsoletas las antiguas. Esto afecta qué archivos debe respaldar y la rapidez con que crecen los directorios de backup.
    • Commitlog: Dependiendo de los objetivos de RPO/RTO, puede ser necesario preservar segmentos del Commitlog o, como mínimo, asegurarse de que los Snapshots se tomen tras un flush para minimizar las dependencias del Commitlog.
    • Repair: Cassandra necesita Repairs regulares (sincronización entre réplicas). Una RESTauración sin una estrategia de Repair posterior puede conducir a inconsistencias “silenciosas”.

    Implementar incrementales correctamente: tres estrategias que funcionan en la práctica

    En MongoDB y Cassandra los mecanismos son distintos, pero la planificación suele seguir patrones similares. Tres estrategias que se repiten en operación:

    1) Full + Log-Shipping (PITR-nah)

    Se crea regularmente un backup completo (Snapshot/Dump) y se respaldan de forma continua los logs/flujo de cambios. En MongoDB eso suele basarse en el Oplog; en Cassandra, más en el Commitlog (o mediante enfoques externos de streaming/CDC, si están disponibles). Ventaja: buen RPO. Desventaja: la RESTauración es más compleja, porque las reproducciones y el orden deben coincidir.

    2) Full + „Block-/Datei-Incremental“ (Storage-/Backup-System macht Deltas)

    Aquí un sistema de backup se encarga de la deduplicación y de incrementales por bloque (p. ej. a nivel de sistema de archivos). Ventaja: menos lógica específica de la BD. Riesgo: obtiene „deltas“, pero no hay garantía de consistencia a nivel de la aplicación si no se genera con precisión el punto de consistencia (Quiesce/Checkpoint/snapshots coordinados).

    3) Replikation ist nicht Backup – aber sinnvoller Baustein

    La replicación (Replica Set, Multi-DC en Cassandra) protege principalmente contra fallos de nodo y aumenta la disponibilidad. No sustituye a un backup, porque errores lógicos (borrados, jobs defectuosos, ransomware con credenciales válidas) se replican. En la práctica se combina replicación con backups para reducir el RTO y usar los backups como «última instancia».

    Realidad de la RESTauración: lo que siempre debe respaldar además de los datos

    Muchos problemas de RESTauración no se deben a archivos de datos faltantes, sino a la ausencia del “entorno operativo”. Defina qué pertenece a un estado recuperable:

    • Configuración: mongod.conf / cassandra.yaml, opciones de JVM, parámetros para almacenamiento, red, autenticación.
    • Material de seguridad: certificados/Keys TLS, keyfiles, keystores/truststores, referencias a KMS/Vault, contraseñas/secrets (con un concepto de backup propio).
    • Metadatos del clúster: Replica Set Name, Seed-Nodes, topología de Token/Rack/DC (Cassandra), definiciones de Auth/RBAC.
  • Índices y estructuras secundarias: En MongoDB los índices forman parte de los datos, pero una RESTauración puede necesitar reconstruirlos (¡tiempo!). En Cassandra, el rendimiento de las consultas y la estabilidad dependen en gran medida de la ubicación esperada de SSTable/índices.
  • Runbooks: secuencia de pasos, personas de contacto, conmutación de DNS/balanceador de carga, comprobaciones de monitorización, medidas de „Stop-The-Bleed“.
  • Un buen enfoque es almacenar estos artefactos versionados (p. ej. en un Git-Repo seguro) y además incluirlos en la copia de seguridad, para que la RESTauración siga siendo posible incluso ante fallos de herramienta o del repositorio.

    Práctica: Preflight-Checks antes de cada copia de seguridad NoSQL

    Preflight significa: comprobar condiciones que luego no podrán repararse. Las comprobaciones son breves, pero ahorran horas en la RESTauración.

    MongoDB Preflight: replicación, Oplog, almacenamiento, bloqueos

    • Replica Set estable, sin re-sincronización, sin lag permanente
    • Ventana de Oplog mayor que el intervalo de backup + margen
    • Suficiente espacio libre para snapshot/export y para pruebas de RESTauración
    • No haber tareas de mantenimiento (p. ej. reconstrucción de índices) que entren en conflicto con la ventana de snapshot
    Shell
    # Basisstatus und Oplog-Fenster prüfen
    mongosh --quiet --eval 'rs.status().ok'
    mongosh --quiet --eval 'rs.printReplicationInfo()'
    
    # Optional: wichtige Server-Infos (Version, Storage Engine)
    mongosh --quiet --eval 'db.serverStatus().version'
    mongosh --quiet --eval 'db.serverStatus().storageEngine'

    Cassandra Preflight: estado del cluster, compactaciones pendientes, repair/streaming

    • Todos los nodos „UN“ (Up/Normal), sin nodos inestables
    • No grandes operaciones de streaming ni compactaciones pendientes desmesuradas
    • Convención de etiquetas/nombre de backup consistente (para la asignación posterior)
    Shell
    nodetool status
    nodetool tpstats
    nodetool compactionstats

    Interpretación: Un snapshot durante una compaction masiva no es necesariamente „incorrecto“, pero debe esperarse crecimiento y tiempos de ejecución más largos. Para los operadores es crucial: los snapshots deben ser planificables, no „que se ejecutan en cualquier momento“.

    Planificación de la RESTauración: secuencia de pasos, comprobaciones y estrategia de retroceso

    La RESTauración no es un único comando, sino una secuencia controlada. Es recomendable disponer de un runbook de RESTauración con puertas (Go/No-Go) claras y un plan de retroceso.

    RESTore-Gates: tres puntos de verificación que no debe omitir

    1. ¿Artefactos completos? Datos + configuración + material de seguridad + información de versiones. La falta de claves o una configuración incorrecta le costarán tiempo más tarde.
    2. ¿Entorno objetivo correcto? Versiones compatibles (MongoDB/Cassandra), kernel/filesystem apropiados, rendimiento de almacenamiento suficiente. RESTaurar en „cualquier VM“ suele ser el inicio de largas noches de trabajo.
    3. Validación tras la RESTauración: servicio arranca, cluster estable, comprobaciones de consistencia/integridad, smoke tests de la aplicación, monitorización de nuevo en verde.

    Estrategia de retroceso: si la RESTauración no se completa correctamente

    Planifique un retroceso definido en lugar de improvisar ad hoc:

    • RESTauración paralela: RESTauración en un entorno aislado (VLAN/namespace separado), seguida de una conmutación controlada (DNS/balanceador de carga). Así evita que una RESTauración incompleta sobrescriba datos de producción.
    • Fase de solo lectura: cuando sea posible, ponga las aplicaciones en solo lectura (o en modo degradado) para detener cambios en los datos antes de „retroceder“.
    • Última copia de seguridad conocida buena: Defina qué generación se considera „Known Good“ (se ha realizado la prueba de RESTauración) y documente la ruta hasta ella.

    Resolución de problemas: Escollos frecuentes en backups de MongoDB y Cassandra

    MongoDB: Oplog demasiado pequeño, conmutación por error en el momento equivocado, snapshot sin journal

    Síntoma: No es posible reproducir incrementos porque aparecen lagunas en el oplog.

    Causa: La ventana del oplog no cubre el intervalo, o se realiza la copia desde un nodo con historial inestable (rollback).

    Medidas:

    • Aumentar y monitorizar el dimensionamiento del oplog (tendencia a lo largo de días/semanas).
    • Fijar la fuente de backup (p. ej. un Secondary oculto) y considerar escenarios de failover en la lógica de backup.
    • Diseñar la estrategia de snapshots de modo que journal/rutas de datos se aseguren de forma consistente conjuntamente.

    Cassandra: Snapshot solo en algunos nodos, orden incorrecto, brecha de Repair

    Síntoma: El RESTore arranca, pero los datos están incompletos o las consultas devuelven resultados distintos según el nodo.

    Causa: El snapshot no se coordinó en todo el clúster (para todos los réplicas relevantes) o el RESTore se puso en marcha sin una estrategia de Repair posterior.

    Medidas:

    • Automatizar el runbook de snapshots por nodo y recopilar los éxitos de forma centralizada (no confiar en „hacer SSH y esperar“).
    • Vincular siempre el RESTore a un plan post-RESTore definido (p. ej. Repair/validación), ajustado al factor de replicación y al nivel de consistencia.
    • Mantener retención y limpieza limpias: disciplina estricta con tags/períodos, de lo contrario la cadena deja de ser rastreable.

    Validación de copias de seguridad: Cómo probar la RESTaurabilidad sin poner en riesgo la producción

    Gráfico sin texto sobre la validación de RESTauración en un entorno aislado con puntos de comprobación y medición de RTO.
    Las pruebas de RESTauración en un entorno aislado hacen medible la RESTaurabilidad y el RTO sin poner en riesgo la producción.

    “Backup exitoso” es solo una señal de que los datos se han escrito. Si son recuperables solo lo demuestra una prueba. Para NoSQL conviene un enfoque por niveles:

    • Prueba de RESTauración técnica: Revertir datos en un entorno aislado, la BD arranca, el clúster se forma, las funciones básicas operan.
    • Pruebas de lógica/smoke: Consultas de ejemplo, recuentos, muestreos (p. ej. collections/keyspaces importantes), opcionalmente métodos de checksum/comparación.
    • Medición del RTO: Cronometrar (descarga/desencriptado/RESTauración/reconstrucción/reparación). Si el RTO no encaja, debe optimizarse la ruta de RESTore, no solo aumentar la frecuencia de backups.

    Importante en el día a día: las pruebas de RESTore no tienen que verificar „todo“ cada vez. Pero debe realizarse periódicamente un simulacro completo en el que el equipo recorra el proceso, documente logs y tiempos y mejore el runbook.

    Lista de verificación: Estándar mínimo para copias de seguridad de MongoDB y Cassandra

    • Valores objetivo definidos: RPO/RTO por escrito, incl. excepciones (ventanas de mantenimiento, despliegues grandes).
    • Nodo origen definido: MongoDB prefiere Secondary/Hidden, Cassandra plan de snapshot por nodo.
    • Punto de consistencia documentado: momento/día, posición en Oplog/registro, Snapshot-ID, información de versiones.
    • Cadena incremental supervisada: ventana de Oplog, retención de logs, crecimiento del almacenamiento, efectos de compactación.
    • Configuración & seguridad aseguradas: configuraciones, claves, certificados, referencias a secretos.
    • Runbook de RESTauración disponible: secuencia de pasos, puntos de control, retroceso, responsabilidades.
    • Pruebas de RESTauración periódicas: aisladas, documentadas, con medición del RTO.

    Conclusión: la copia de seguridad NoSQL es un proyecto de RESTauración — no solo una ejecución de copia de seguridad

    En MongoDB y Cassandra no es el «si», sino el «cómo»: puntos de consistencia deben generarse de forma deliberada y hacerse trazables, Incrementals necesitan una cadena robusta (Oplog/Logs/SSTables) y la RESTauración debe existir como un proceso ensayado. Si establece controles previos (Preflight-Checks), metadatos limpios y ejercicios de RESTauración periódicos, las copias de seguridad dejarán de ser una obligación para convertirse en un recurso operativo fiable — incluso cuando a las 03:00 de la madrugada nadie tenga tiempo para experimentos.

    Para este tema también son importantes Mongodb Backup y Cassandra Backup. El artículo sitúa estos aspectos de manera comprensible y muestra en qué hay que fijarse en el día a día.