Lab práctico · Semana 9: Fiabilidad y operaciones — Well-Architected, alta disponibilidad, DR, SRE y observabilidad
Backup y recuperación ante desastres de una VM
Qué vas a construir
Protegerás una VM con tres mecanismos y ejecutarás un simulacro de DR midiendo el RTO real:
- Una programación de snapshots (snapshot schedule) asociada al disco, como harías en producción.
- Un snapshot manual con el que restaurarás el disco en otra región (Bélgica) y levantarás allí una VM nueva.
- Una machine image, con la que clonarás la VM completa en otra zona.
flowchart LR
VM["vm-origen (europe-southwest1-a)"] -->|"snapshot schedule diario"| SS["Snapshots automáticos"]
VM -->|"snapshot manual"| SN["Snapshot (almacenamiento multirregional)"]
SN -->|"disco + VM nuevos"| DR["vm-dr (europe-west1-b)"]
VM -->|"machine image"| MI["Machine image"]
MI -->|"VM nueva"| CL["vm-clon (europe-southwest1-b)"]
Antes de empezar
- Proyecto dedicado (por ejemplo
pca-lab-19) con facturación. - En Cloud Shell:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=europe-southwest1
export ZONE=europe-southwest1-a
export ZONE_B=europe-southwest1-b
export DR_REGION=europe-west1
export DR_ZONE=europe-west1-b
gcloud services enable compute.googleapis.com
Coste orientativo: dos o tres VMs e2-micro durante una hora y unos pocos GB de snapshots y machine image durante el lab (céntimos). El coste real está en olvidar borrar los snapshots y la machine image: la limpieza es obligatoria.
Paso 1: crea la VM de origen con datos
Creamos una VM pequeña con un script de arranque que escribe un fichero con la fecha. Ese fichero es nuestro «dato de negocio»: al restaurar comprobaremos hasta qué momento se conservó (el RPO).
gcloud compute instances create vm-origen \
--zone=$ZONE --machine-type=e2-micro \
--image-family=debian-12 --image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
mkdir -p /datos
date -u +"%Y-%m-%dT%H:%M:%SZ arranque" >> /datos/pedidos.log'
Añade un par de «pedidos» por SSH (la primera vez te pedirá crear una clave SSH; acepta los valores por defecto):
gcloud compute ssh vm-origen --zone=$ZONE --command='for i in 1 2 3; do date -u +"%H:%M:%S pedido $i" | sudo tee -a /datos/pedidos.log; sleep 2; done; sync'
El sync fuerza a escribir a disco lo que está en caché. Recuerda la idea: un snapshot de un disco en uso es crash-consistent (como si hubieras quitado la corriente); para bases de datos se paran las escrituras o se usan snapshots coherentes con la aplicación.
Paso 2: programación de snapshots
Una snapshot schedule es una resource policy regional que crea snapshots automáticamente y borra los antiguos según la retención. Es la base de un patrón de DR «backup y restauración».
gcloud compute resource-policies create snapshot-schedule diario-7d \
--region=$REGION \
--daily-schedule --start-time=03:00 \
--max-retention-days=7 \
--on-source-disk-delete=keep-auto-snapshots \
--storage-location=eu
gcloud compute disks add-resource-policies vm-origen \
--resource-policies=diario-7d --zone=$ZONE
--start-timeestá en UTC; el primer snapshot automático se hará esa noche, no ahora.--storage-location=euguarda los snapshots en la multirregión de la UE: sobreviven a la pérdida de una región y cumplen residencia de datos en Europa.keep-auto-snapshotsconserva los snapshots aunque se borre el disco (útil ante un borrado accidental).
Por consola: Compute Engine > Snapshots > Snapshot schedules > Create snapshot schedule, y después edita el disco para asociarla.
Paso 3: snapshot manual
Para el simulacro no esperamos a la noche: hacemos un snapshot ya. Apunta la hora: es tu punto de recuperación.
date -u
gcloud compute snapshots create snap-origen-1 \
--source-disk=vm-origen --source-disk-zone=$ZONE \
--storage-location=eu
Escribe un pedido después del snapshot. No debería aparecer en la restauración: es el dato que «pierdes» en un desastre (la ventana del RPO).
gcloud compute ssh vm-origen --zone=$ZONE --command='date -u +"%H:%M:%S pedido POSTERIOR al snapshot" | sudo tee -a /datos/pedidos.log; sync'
Paso 4: simulacro de DR en otra región (mide el RTO)
Supón que la región de Madrid no está disponible. Restauras en europe-west1 (Bélgica) a partir del snapshot. Mide el tiempo desde que «declaras el desastre» hasta que el dato es accesible.
INICIO=$(date +%s)
gcloud compute disks create disco-dr \
--zone=$DR_ZONE --source-snapshot=snap-origen-1 --type=pd-balanced
gcloud compute instances create vm-dr \
--zone=$DR_ZONE --machine-type=e2-micro \
--disk=name=disco-dr,boot=yes,auto-delete=yes
gcloud compute ssh vm-dr --zone=$DR_ZONE --command='cat /datos/pedidos.log'
FIN=$(date +%s)
echo "RTO medido: $(( (FIN - INICIO) / 60 )) min $(( (FIN - INICIO) % 60 )) s"
Deberías ver los pedidos 1 a 3, pero no el «pedido POSTERIOR». Los snapshots son recursos globales: puedes usarlos en cualquier región sin copiarlos.
Paso 5: machine image y clon en otra zona
Una machine image guarda toda la VM: configuración (tipo de máquina, metadatos, etiquetas, cuenta de servicio) y todos sus discos. Sirve para clonar o para copias completas de una VM.
gcloud compute machine-images create mi-origen \
--source-instance=vm-origen --source-instance-zone=$ZONE \
--storage-location=eu
INICIO=$(date +%s)
gcloud compute instances create vm-clon \
--zone=$ZONE_B --source-machine-image=mi-origen
gcloud compute ssh vm-clon --zone=$ZONE_B --command='cat /datos/pedidos.log'
FIN=$(date +%s)
echo "Tiempo de clonado: $(( FIN - INICIO )) s"
Esta vez sí aparece el «pedido POSTERIOR», porque la machine image se tomó después.
Comprueba que funciona
gcloud compute resource-policies describe diario-7d --region=$REGIONmuestra la programación ygcloud compute disks describe vm-origen --zone=$ZONE --format="value(resourcePolicies)"la tiene asociada.vm-dreneurope-west1-bmuestra los datos hasta el snapshot (RPO = tiempo entre el snapshot y el desastre).vm-cloneneurope-southwest1-bes una copia completa de la VM.- Tienes anotado tu RTO medido.
Limpieza
Borra en este orden (las VMs primero; sus discos se borran con ellas):
gcloud compute instances delete vm-dr --zone=$DR_ZONE --quiet
gcloud compute instances delete vm-clon --zone=$ZONE_B --quiet
gcloud compute disks remove-resource-policies vm-origen --resource-policies=diario-7d --zone=$ZONE
gcloud compute instances delete vm-origen --zone=$ZONE --quiet
gcloud compute resource-policies delete diario-7d --region=$REGION --quiet
gcloud compute machine-images delete mi-origen --quiet
gcloud compute snapshots delete snap-origen-1 --quiet
# Por si la programación llegó a crear snapshots automáticos:
gcloud compute snapshots list --format="value(name)"
Si el último comando lista snapshots, bórralos con gcloud compute snapshots delete NOMBRE. O borra el proyecto completo.
Preguntas para pensar como arquitecto
Con esta solución, ¿qué RTO y RPO puedes prometer al negocio?
Con snapshots diarios, el RPO es de hasta 24 horas (pierdes lo escrito desde el último snapshot). El RTO es el tiempo de restaurar y arrancar (minutos, según tu medición) más detección, decisión y cambio de tráfico: de forma realista, del orden de una o varias horas si no está automatizado. Es un patrón cold (backup y restauración): barato y adecuado para cargas no críticas. Si piden un RPO de minutos, sube la frecuencia de snapshots (programación horaria) o usa la replicación asíncrona de discos (objetivo de RPO de 1 minuto).
¿Qué ventaja tiene un Regional Persistent Disk frente a los snapshots para sobrevivir a la caída de una zona?
El disco regional replica de forma síncrona en dos zonas de la misma región: si cae una zona, conectas el disco a una VM en la otra zona sin perder datos (RPO 0) y en poco tiempo. Los snapshots son copias puntuales: pierdes lo escrito desde el último. Pero el disco regional no protege ante la caída de la región ni ante un borrado o corrupción (se replica también el error); para eso siguen haciendo falta copias.
Un auditor exige que las copias no puedan borrarse durante 90 días, ni siquiera por un administrador del proyecto. ¿Sirven los snapshots?
No: quien tenga permisos sobre los snapshots puede borrarlos. La respuesta es Backup and DR Service con un backup vault con periodo mínimo de retención obligatorio (inmutable e indeleble hasta que vence), que además centraliza las políticas de copia de toda la flota.
¿Cuándo eliges machine image y cuándo imagen personalizada o snapshot?
Machine image para copiar o respaldar una VM completa (configuración y varios discos) o clonarla. Snapshot para copias de un disco frecuentes e incrementales (backup de datos). Imagen personalizada (custom image) para crear una plantilla de arranque reutilizable a partir de la que se construyen muchas VMs, por ejemplo la de un MIG.