Post-Image

Disaster recovery en CEPH

En la actualidad en las arquitecturas cloud se está utilizando el SDS que significa Software Definied Storage, la idea principal de estos sistemas es tratar el almacenamiento como si fuese software independientemente del hardware físico que tengamos. Este tipo de sistemas facilita mucho a las empresas el cambio de hardware, por uno de mejores prestaciones, reduciendo el tiempo de migraciones a cero. Algunos ejemplos de SDS son; CEPH, Swift, pNFS, SDDC by VMWare,…

Uno de los principales sistemas de almacenamiento definido por software es CEPH. Se caracteriza por ser un proyecto Opensource con gran relevancia en la actualidad debido a que es uno de los principales componentes utilizado para la instalación de Openstack bajo el módulo de Cinder. CEPH permite implementar diferentes tipos de almacenamiento (bloque, objecto, fichero) y además lo hace de forma distribuida evitando tener un único punto de fallo.

Ceph Scheme

CEPH esta formado por diferentes componentes que son los que en su conjunto le dan toda su versatibilidad. En primer lugar nos encontramos los OSD (Object Storage Daemon) y que se encarga de almacenar todos los datos, gestiona la replicación y realiza el balanceo, en segundo lugar nos encontramos los nodos de monitorización (MON) que tienen como objectivo vigilar el cluster y que es un elemento esencias para la coordinación de todos los servicios, en tercer lugar tenemos los servidores de metadatos (MDS) que almacenta los metadatos del Ceph Filesystem y elimina carga al cluster y por último tenemos los managers (MGR) que se encargan de parte de la monitorización y gestion del espacio asi como los frontales web y APIs de la plataforma. Por su forma de trabajar se necesitan al menos 3 nodos de cada uno de los elementos esenciales (OSD, MON) para poder disponer de un entorno productivo con HA.

Este sistemas por su arquitectura no necesita backups, ya que al disponer de minimo 3 nodos en réplica que podemos distribuir en diferentes zonas geográficas siempre vamos tener minimo una copia balanceada en tiempo real disponible desde nuestro cliente, ya sea desde una máquina virtual o desde un almacenamiento a nivel de objecto.

Sin embargo si aun así queremos disponer de copias de seguridad para poder disponer de un disaster recovery total, a continuación os dejo un script que nos permite descargarnos nuestros ficheros en RAW del Pool “volumes” de nuestro CEPH y almacenarlo en un disco o sistema de ficheros compartido.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash

#Commands variables    
IP="10.0.0.2"
COMMAND_HOST="ssh $IP docker exec ceph_osd_1 "

#Directory Paths
BACKUP_ROOT=/mnt/backups
HOST_SDB1_PATH=$(ssh $IP mount | grep sdb1 | awk '{print $3}')
DOCKER_SDB1_PATH=$($COMMAND_HOST mount | grep sdb1 | awk '{print $3}')

#Variables to folder architecture
TIME_START=$(date --rfc-3339=seconds)
TODAY=$(date --rfc-3339=date)
BACKUP_DIR=${BACKUP_ROOT}/${TODAY}

echo "Ceph Backup Started ${TIME_START}"

#POOLS=( $($COMMAND_HOST rados lspools) )
POOLS=( volumes )

for POOL in "${POOLS[@]}"
do
  POOL_BACKUP_DIR=${BACKUP_DIR}/${POOL}
  mkdir -p ${POOL_BACKUP_DIR}
  IMAGES=( $($COMMAND_HOST rbd ls -p ${POOL}) )
  for IMAGE in "${IMAGES[@]}"
  do
    echo "$(date --rfc-3339=seconds) backup image:${POOL}/${IMAGE}"
    ssh $IP mkdir ${HOST_SDB1_PATH}/tmp_backups_${TODAY}/
    $COMMAND_HOST rbd export -p ${POOL} ${IMAGE} ${DOCKER_SDB1_PATH}/tmp_backups_${TODAY}/${IMAGE}
    ssh $IP "tar --totals -czvf ${HOST_SDB1_PATH}/tmp_backups_${TODAY}/${IMAGE}.tar.gz ${HOST_SDB1_PATH}/tmp_backups_${TODAY}/${IMAGE}"
    rsync -avz --progress -partial $IP:${HOST_SDB1_PATH}/tmp_backups_${TODAY}/${IMAGE}.tar.gz ${POOL_BACKUP_DIR}/${IMAGE}.tar.gz
    ssh $IP rm -rf ${HOST_SDB1_PATH}/tmp_backups_${TODAY}/
  done
done

TIME_END=$(date --rfc-3339=seconds)
echo "Ceph Backup Completed ${TIME_END}"

Cabe mencionar que este script está directamente orientado a una arquitectura de Openstack + Ceph que ha sido desplegada con Kolla.