Gestión y Administración de Dispositivos de Bloque RADOS (RBD) en Ceph

Arquitectura del Entorno de Pruebas

Para demostrar las operaciones avanzadas con dispositivos de bloque en Ceph, utilizaremos un clúster distribuido compuesto por tres nodos de almacenamiento y un nodo cliente dedicado. Asegúrese de que todos los sistemas operativos estén actualizados con los últimos parches del kernel para garantizar la compatibilidad con los módulos rbd.

Dirección IP Rol / Hostname
10.0.50.11 ceph-mon-01
10.0.50.12 ceph-mon-02
10.0.50.13 ceph-osd-01
10.0.50.20 client-app-01

Configuración en el Servidor

Creación del Pool de Almacenamiento

El primer paso consiste en generar un pool lógico que albergará nuestros volúmenes de bloque:

[root@ceph-mon-01 ~]# ceph osd pool create block_data_pool 128
pool 'block_data_pool' created

Generación de Credenciales de Acceso

Por seguridad, es fundamental restringir el acceso. Crearemos un usuario específico con permisos limitados exclusivamente al pool recién creado:

[root@ceph-mon-01 ~]# ceph auth get-or-create client.block_admin mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=block_data_pool'

[root@ceph-mon-01 ~]# ceph auth get client.block_admin
exported keyring for client.block_admin
[client.block_admin]
    key = AQD9ZkFfOa3hHBAAqZ8R5nX6mK4LqV1vY2bNwA==
    caps mon = "allow r"
    caps osd = "allow class-read object_prefix rbd_children, allow rwx pool=block_data_pool"

[root@ceph-mon-01 ~]# ceph auth get client.block_admin -o /etc/ceph/ceph.client.block_admin.keyring
exported keyring for client.block_admin

Habilitación de la Aplicación RBD

Para que el clúster gestione correctamente los metadatos de los bloques, debe habilitarse el módulo de la aplicación:

[root@ceph-mon-01 ~]# ceph osd pool application enable block_data_pool rbd 
enabled application 'rbd' on pool 'block_data_pool'

Preparación del Nodo Cliente

En la máquina que consumirá el almacenamiento, instalaremos las utilidades base y sincronizaremos la configuración del clúster.

[root@client-app-01 ~]# yum install ceph-common -y

# Desde el nodo monitor, transferimos los archivos de configuración y autenticación
[root@ceph-mon-01 ~]# scp /etc/ceph/ceph.conf /etc/ceph/ceph.client.block_admin.keyring root@10.0.50.20:/etc/ceph/

Validamos la conectividad utilizando las nuevas credenciales:

[root@client-app-01 ~]# ceph -s --user block_admin
  cluster:
    id:     88372a1e-9b4f-4a1c-8e9d-123456789abc
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-mon-01,ceph-mon-02,ceph-osd-01
    mgr: active
    osd: 3 osds: 3 up, 3 in
 
  data:
    pools:   1 pools, 128 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 297 GiB / 300 GiB avail
    pgs:     128 active+clean

Operaciones con Imágenes RBD

Creación y Modificación de Volúmenes

Procedemos a generar los dispositivos de bloque virtuales:

[root@client-app-01 ~]# rbd create block_data_pool/vol_db_primary --size 10G --user block_admin
[root@client-app-01 ~]# rbd create block_data_pool/vol_app_logs --size 20G --user block_admin

[root@client-app-01 ~]# rbd ls -l -p block_data_pool --user block_admin
NAME           SIZE    PARENT  FMT  PROT  LOCK
vol_app_logs   20 GiB          2           
vol_db_primary 10 GiB          2           

Por defecto, las imágenes incluyen características avanzadas que pueden causar conflictos con kernels más antiguos. Retendremos únicamente la capacidad de layering:

[root@client-app-01 ~]# rbd feature disable block_data_pool/vol_db_primary exclusive-lock object-map fast-diff deep-flatten --user block_admin
[root@client-app-01 ~]# rbd feature disable block_data_pool/vol_app_logs exclusive-lock object-map fast-diff deep-flatten --user block_admin

Mapeo y Formateo del Sistema de Archivos

Para utilizar el volumen, debe mapearse como un dispositivo local de bloque:

[root@client-app-01 ~]# rbd map block_data_pool/vol_db_primary --user block_admin
/dev/rbd0

[root@client-app-01 ~]# mkfs.xfs /dev/rbd0
meta-data=/dev/rbd0              isize=512    agcount=8, agsize=327680 blks
...

[root@client-app-01 ~]# mkdir -p /mnt/database_data
[root@client-app-01 ~]# mount /dev/rbd0 /mnt/database_data/

Desmontaje y Redimensionamiento

Cuando el volumen necesita mantenimiento o expansión, se debe liberar primero del sistema de archivos local:

[root@client-app-01 ~]# umount /mnt/database_data/
[root@client-app-01 ~]# rbd unmap block_data_pool/vol_db_primary --user block_admin

# Expandir la capacidad del volumen a 50 GB
[root@client-app-01 ~]# rbd resize block_data_pool/vol_db_primary --size 50G --user block_admin
Resizing image: 100% complete...done.

Gestión de la Papelera de Reciclaje

Ceph permite enviar imágenes a una papelera temporla en lugar de eliminarlas permanentemente de forma inmediata:

[root@client-app-01 ~]# rbd trash move block_data_pool/vol_db_primary --user block_admin
[root@client-app-01 ~]# rbd trash list -p block_data_pool --user block_admin
12613ea38941 vol_db_primary

# Restauración desde la papelera
[root@client-app-01 ~]# rbd trash restore -p block_data_pool --image vol_db_primary --image-id 12613ea38941 --user block_admin

Administración de Snapshots

Los snapshots proporcionan copias de seguridad instantáneas de solo lectura del estado actual del volumen. Primero, generaremos datos de prueba:

[root@client-app-01 ~]# rbd map block_data_pool/vol_db_primary --user block_admin
/dev/rbd0
[root@client-app-01 ~]# mount /dev/rbd0 /mnt/database_data/
[root@client-app-01 ~]# echo "Transacción crítica 001" > /mnt/database_data/transactions.log

Creación y Reversión de Snapshots

# Generar el punto de restauración
[root@client-app-01 ~]# rbd snap create block_data_pool/vol_db_primary@daily_backup --user block_admin

# Simulación de pérdida de datos
[root@client-app-01 ~]# rm -f /mnt/database_data/transactions.log
[root@client-app-01 ~]# umount /mnt/database_data/
[root@client-app-01 ~]# rbd unmap block_data_pool/vol_db_primary --user block_admin

# Ejecutar el rollback al estado anterior
[root@client-app-01 ~]# rbd snap rollback block_data_pool/vol_db_primary@daily_backup --user block_admin
Rolling back to snapshot: 100% complete...done.

Control de Límites

Para evitar la proliferación excesiva de snapshots que degraden el rendimiento, se pueden establecer límites estrictos:

[root@client-app-01 ~]# rbd snap limit set block_data_pool/vol_db_primary --limit 7 --user block_admin
[root@client-app-01 ~]# rbd snap limit clear block_data_pool/vol_db_primary --user block_admin

Clonación de Volúmenes (Copy-on-Write)

La clonación en Ceph utiliza la tecnología Copy-on-Write (CoW). Un clon es inicialmente un enlace lógico a un snapshot protegido. No consume espacio físico adicional hasta que se realizan operaciones de escritura sobre él. Cualquier lectura en el clon que no haya sido sborescrita se redirige al snapshot original.

Protección y Generación del Clon

Un snapshot debe estar blindado contra eliminaciones accidentales antes de servir como origen para un clon:

[root@client-app-01 ~]# rbd snap protect block_data_pool/vol_db_primary@daily_backup --user block_admin

[root@client-app-01 ~]# rbd clone block_data_pool/vol_db_primary@daily_backup block_data_pool/vol_db_staging --user block_admin

[root@client-app-01 ~]# rbd info block_data_pool/vol_db_staging --user block_admin
rbd image 'vol_db_staging':
    size 50 GiB in 12800 objects
    order 22 (4 MiB objects)
    id: 99a82f3b4c1d
    block_name_prefix: rbd_data.99a82f3b4c1d
    format: 2
    features: layering
    parent: block_data_pool/vol_db_primary@daily_backup
    overlap: 50 GiB

Independencia del Clon (Flatten)

Si se requiere que el volumen clonado sea completamente autónomo y no dependa del snapshot original, debe ejecutarse un aplanamiento. Esto copia todos los datos del origen al destino:

[root@client-app-01 ~]# rbd flatten block_data_pool/vol_db_staging --user block_admin
Image flatten: 100% complete...done.

[root@client-app-01 ~]# rbd info block_data_pool/vol_db_staging --user block_admin | grep parent
# La salida estará vacía, confirmando la independencia

Limpieza del Snapshot Original

Una vez que el clon es independiente, el snapshot padre puede ser desprotegido y eliminado para liberar metadatos:

[root@client-app-01 ~]# rbd snap unprotect block_data_pool/vol_db_primary@daily_backup --user block_admin
[root@client-app-01 ~]# rbd snap rm block_data_pool/vol_db_primary@daily_backup --user block_admin
Removing snap: 100% complete...done.

Etiquetas: ceph rbd almacenamiento-distribuido block-device snapshots

Publicado el 6-9 18:48