Saltar a contenidoSaltar a navegación de páginas: página anterior [tecla acceso p]/página siguiente [tecla acceso n]
Se aplica a SUSE Enterprise Storage 5

8 Dispositivo de bloques RADOS

Un bloque es una secuencia de bytes, por ejemplo, un bloque de 512 bytes de datos. Las interfaces de almacenamiento basadas en bloques son la forma más habitual de almacenar los datos en soportes de uso rotativo, como discos duros, CD o disquetes. La ubicuidad de las interfaces de dispositivos de bloques hacen que un dispositivo de bloques virtual sea el candidato idóneo para interactuar con un sistema de almacenamiento masivo de datos como Ceph.

Los dispositivos de bloques de Ceph permiten compartir recursos físicos y se puede modificar su tamaño. Los datos se almacenan repartidos en varios OSD en un clúster de Ceph. Los dispositivos de bloques de Ceph aprovechan las funciones de RADOS, como la realización de instantáneas, las réplicas y la comprobación de coherencia. Los dispositivos de bloques RADOS (RBD) de Ceph interactúan con los OSD mediante módulos del kernel o la biblioteca librbd.

Protocolo RADOS
Figura 8.1: Protocolo RADOS

Los dispositivos de bloques de Ceph ofrecen un alto rendimiento con infinitas posibilidades de escalabilidad para los módulos de kernel. Son compatibles con soluciones de virtualización como QEMU o sistemas informáticos basados en la nube que dependen de libvirt, como OpenStack. Puede utilizar el mismo clúster para gestionar Object Gateway, CephFS y los dispositivos de bloques RADOS al mismo tiempo.

8.1 Comandos del dispositivo de bloques

El comando rbd permite crear, enumerar, examinar y eliminar imágenes de los dispositivos de bloques. También se puede emplear, por ejemplo, para clonar imágenes, crear instantáneas, revertir una imagen al estado de una instantánea o ver una instantánea.

Sugerencia
Sugerencia: acceso a un clúster

Para utilizar los comandos del dispositivo de bloque RADOS, debe tener acceso a un clúster de Ceph en ejecución.

8.1.1 Creación de una imagen del dispositivo de bloques

Para poder añadir un dispositivo de bloques a un nodo, primero debe crear una imagen para él en el clúster. Para crear la imagen de un dispositivo de bloques, ejecute lo siguiente:

root # rbd create --size megabytes pool-name/image-name

Por ejemplo, para crear una imagen de 1 GB denominada "bar" que almacena información en un repositorio llamado "swimmingpool", ejecute lo siguiente:

root # rbd create --size 1024 swimmingpool/bar
Sugerencia
Sugerencia: repositorio por defecto

Si no especifica un repositorio al crear una imagen, se almacenará en el repositorio por defecto, "rbd".

Nota
Nota: primero debe crear el repositorio

Debe crear un repositorio antes de especificarlo como origen. Consulte el Capítulo 7, Gestión de repositorios de almacenamiento para obtener más información.

8.1.2 Creación de una imagen del dispositivo de bloques en un repositorio codificado de borrado

A partir de SUSE Enterprise Storage 5, es posible almacenar datos de una imagen de dispositivo de bloques en repositorios codificados de borrado. Solo la parte de "datos" de una imagen RBD se puede almacenar en un repositorio codificado de borrado. Además, el repositorio codificado de borrado debe tener el indicador "overwrite" (sobrescribir) definido como true. Este indicador solo se puede definir como true si todos los OSD utilizan BlueStore.

Los metadatos de la imagen no pueden residir en un repositorio codificado de borrado. Los metadatos pueden residir en el repositorio "rbd" por defecto o en el repositorio que el usuario especifique explícitamente con el parámetro --pool= en el comando rbd create.

Nota
Nota: BlueStore es necesario

Todos los nodos requieren BlueStore para utilizar los repositorios codificados de borrado para las imágenes de dispositivos de bloques.

Lleve a cabo los pasos siguientes para crear una imagen RBD en un repositorio codificado de borrado:

root # ceph osd pool create POOL_NAME 12 12 erasure
root # ceph osd pool set POOL_NAME allow_ec_overwrites true

# Metadata will reside in pool "rbd", and data in pool "POOL_NAME"
root # rbd create IMAGE_NAME --size=1G --data-pool POOL_NAME

#Metadata will reside in pool "OTHER_POOL", and data in pool "POOL_NAME"
root # rbd create IMAGE_NAME --size=1G --data-pool POOL_NAME --pool=OTHER_POOL

8.1.3 Enumeración de imágenes de dispositivos de bloques

Para enumerar los dispositivos de bloques en el repositorio "rbd", ejecute lo siguiente ("rbd" es el nombre del repositorio por defecto):

root # rbd ls

Para enumerar los dispositivos de bloques en un repositorio llamado "swimmingpool", ejecute lo siguiente:

root # rbd ls swimmingpool

8.1.4 Recuperación de información de la imagen

Para recuperar información de una imagen llamada "bar" dentro de un repositorio denominado "swimmingpool", ejecute lo siguiente:

root # rbd info swimmingpool/bar

8.1.5 Cambio de tamaño de la imagen de un dispositivo de bloques

Las imágenes de los dispositivos de bloques RADOS emplean un sistema de provisión ligera, lo que significa que no emplean espacio físico real hasta que empieza a guardar datos en ellos. No obstante, tienen una capacidad máxima que se define mediante la opción --size. Si desea aumentar (o reducir) el tamaño máximo de la imagen (o disminuir), ejecute lo siguiente:

root # rbd resize --size 2048 foo # to increase
rbd resize --size 2048 foo --allow-shrink # to decrease

8.1.6 Eliminación de una imagen de dispositivo de bloques

Para eliminar un dispositivo de bloques que se corresponde con una imagen llamada "bar" en un repositorio denominado "swimmingpool", ejecute lo siguiente:

root # rbd rm swimmingpool/bar

8.2 Montaje y desmontaje de imágenes RBD

Después de crear un dispositivo de bloques RADOS, puede formatearlo, montarlo para que permita el intercambio de archivos y desmontarlo cuando haya terminado.

  1. Asegúrese de que el clúster de Ceph incluye un repositorio con la imagen de disco que desea montar. Supongamos que el repositorio se denomina mypool y la imagen myimage.

    rbd list mypool
  2. Asigne la imagen a un nuevo dispositivo de bloques.

    root # rbd map --pool mypool myimage
    Sugerencia
    Sugerencia: nombre de usuario y autenticación

    Para especificar un nombre de usuario, utilice --id nombre de usuario. Además, si utiliza la autenticación cephx, también debe especificar un secreto. Puede proceder de un anillo de claves o de un archivo que contenga el secreto:

    root # rbd map --pool rbd myimage --id admin --keyring /path/to/keyring

    O bien

    root # rbd map --pool rbd myimage --id admin --keyfile /path/to/file
  3. Enumerar todos los dispositivos asignados:

    root # rbd showmapped
     id pool   image   snap device
     0  mypool myimage -    /dev/rbd0

    El dispositivo en el que queremos trabajar es /dev/rbd0.

  4. Cree un sistema de archivos XFS en el dispositivo /dev/rbd0.

    root # mkfs.xfs /dev/rbd0
     log stripe unit (4194304 bytes) is too large (maximum is 256KiB)
     log stripe unit adjusted to 32KiB
     meta-data=/dev/rbd0              isize=256    agcount=9, agsize=261120 blks
              =                       sectsz=512   attr=2, projid32bit=1
              =                       crc=0        finobt=0
     data     =                       bsize=4096   blocks=2097152, imaxpct=25
              =                       sunit=1024   swidth=1024 blks
     naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
     log      =internal log           bsize=4096   blocks=2560, version=2
              =                       sectsz=512   sunit=8 blks, lazy-count=1
     realtime =none                   extsz=4096   blocks=0, rtextents=0
  5. Monte el dispositivo y compruebe que está montado correctamente. Sustituya /mnt por el punto de montaje.

    root # mount /dev/rbd0 /mnt
    root # mount | grep rbd0
    /dev/rbd0 on /mnt type xfs (rw,relatime,attr2,inode64,sunit=8192,...

    Ya puede mover datos al dispositivo y desde él como si fuese un directorio local.

    Sugerencia
    Sugerencia: aumento del tamaño del dispositivo RBD

    Si descubre que el tamaño del dispositivo RBD es insuficiente, puede aumentarlo con facilidad.

    1. Aumente el tamaño de la imagen RBD, por ejemplo, hasta 10 GB.

      root # rbd resize --size 10000 mypool/myimage
       Resizing image: 100% complete...done.
    2. Aumente el sistema de archivos hasta llenar el nuevo tamaño del dispositivo.

      root # xfs_growfs /mnt
       [...]
       data blocks changed from 2097152 to 2560000
  6. Cuando termine de acceder al dispositivo, puede desmontarlo.

    root # unmount /mnt
Sugerencia
Sugerencia: montaje o desmontaje manual

Dado que asignar y montar las imágenes RBD manualmente después del arranque y desmontarlas y desasignarlas antes de apagar el equipo puede resultar tedioso, se proporciona un guion rbdmap y una unidad systemd. Consulte la Sección 8.4, “rbdmap: asignación de dispositivos RBD durante el arranque”.

8.3 Instantáneas de dispositivos de bloques

Una instantánea RBD es una instantánea de una imagen de dispositivo de bloques RADOS. Las instantáneas permiten conservar un historial de los estados de la imagen. Ceph también es compatible con capas de instantáneas, lo que permite clonar imágenes de máquinas virtuales de forma rápida y sencilla. Ceph admite las instantáneas de dispositivos de bloques mediante el comando rbd y muchas interfaces de alto nivel, incluidas QEMU, libvirt, OpenStack y CloudStack.

Nota
Nota

Detenga las operaciones de entrada y salida antes de realizar una instantánea de una imagen. Si la imagen contiene un sistema de archivos, el sistema de archivos debe tener un estado coherente antes de realizar la instantánea.

8.3.1 Notas de cephx

Si cephx está habilitado (consulte http://ceph.com/docs/master/rados/configuration/auth-config-ref/ para obtener más información), debe especificar un nombre de usuario o ID y una vía al anillo de claves que contiene la clave correspondiente para el usuario. Consulte User Management (Gestión de usuarios) para obtener más información. También puede añadir la variable de entorno CEPH_ARGS para evitar la reintroducción de los siguientes parámetros.

root # rbd --id user-ID --keyring=/path/to/secret commands
root # rbd --name username --keyring=/path/to/secret commands

Por ejemplo:

root # rbd --id admin --keyring=/etc/ceph/ceph.keyring commands
root # rbd --name client.admin --keyring=/etc/ceph/ceph.keyring commands
Sugerencia
Sugerencia

Añada el usuario y el secreto a la variable de entorno CEPH_ARGS para no tener que introducir estos datos en cada ocasión.

8.3.2 Conceptos básicos de la instantánea

Los procedimientos siguientes muestran cómo crear, enumerar y eliminar instantáneas mediante el comando rbd en la línea de comandos.

8.3.2.1 Creación de instantáneas

Para crear una instantánea con rbd, especifique la opción snap create, el nombre del repositorio y el nombre de la imagen.

root # rbd --pool pool-name snap create --snap snap-name image-name
root # rbd snap create pool-name/image-name@snap-name

Por ejemplo:

root # rbd --pool rbd snap create --snap snapshot1 image1
root # rbd snap create rbd/image1@snapshot1

8.3.2.2 Enumeración de instantáneas

Para enumerar las instantáneas de una imagen, especifique el nombre del repositorio y el de la imagen.

root # rbd --pool pool-name snap ls image-name
root # rbd snap ls pool-name/image-name

Por ejemplo:

root # rbd --pool rbd snap ls image1
root # rbd snap ls rbd/image1

8.3.2.3 Reversión de instantáneas

Para revertir una instantánea con rbd, especifique la opción snap rollback, el nombre del repositorio, el nombre de la imagen y el nombre de la instantánea.

root # rbd --pool pool-name snap rollback --snap snap-name image-name
root # rbd snap rollback pool-name/image-name@snap-name

Por ejemplo:

root # rbd --pool pool1 snap rollback --snap snapshot1 image1
root # rbd snap rollback pool1/image1@snapshot1
Nota
Nota

Revertir una imagen a una instantánea significa sobrescribir la versión actual de la imagen con los datos de la instantánea. El tiempo necesario para ejecutar una reversión aumenta según el tamaño de la imagen. Es más rápido clonar una instantánea que revertir una imagen a una instantánea, por lo que es el método preferible para volver a un estado preexistente.

8.3.2.4 Supresión de una instantánea

Para suprimir una instantánea con rbd, especifique la opción snap rm, el nombre del repositorio, el nombre de la imagen y el nombre de usuario.

root # rbd --pool pool-name snap rm --snap snap-name image-name
root # rbd snap rm pool-name/image-name@snap-name

Por ejemplo:

root # rbd --pool pool1 snap rm --snap snapshot1 image1
root # rbd snap rm pool1/image1@snapshot1
Nota
Nota

Los OSD de Ceph suprimen los datos de forma asíncrona, por lo que al suprimir una instantánea, no se libera el espacio de disco inmediatamente.

8.3.2.5 Limpieza de instantáneas

Para suprimir todas las instantáneas de una imagen con rbd, especifique la opción snap purge y el nombre de la imagen.

root # rbd --pool pool-name snap purge image-name
root # rbd snap purge pool-name/image-name

Por ejemplo:

root # rbd --pool pool1 snap purge image1
root # rbd snap purge pool1/image1

8.3.3 Capas

Ceph admite la posibilidad de crear muchos clones de copia de escritura (COW, por sus siglas en inglés) de una instantánea de dispositivo de bloques. Las capas de instantáneas permiten que los clientes de dispositivos de bloques de Ceph creen imágenes muy rápidamente. Por ejemplo, puede crear una imagen de dispositivo de bloques con una máquina virtual Linux escrita en él y, a continuación, realizar una instantánea de la imagen, protegerla y crear tantos clones de copia de escritura como desee. Las instantáneas son de solo lectura, por lo que clonar una instantánea simplifica la semántica y permite crear clones rápidamente.

Nota
Nota

Los términos "parent" (padre) y "child" (hijo) mencionados en los siguientes ejemplos de la línea de comandos hacen referencia a una instantánea de un dispositivo de bloques de Ceph (padre) y la imagen correspondiente clonada de la instantánea (hijo).

Cada imagen clonada (hijo) almacena una referencia a su imagen padre que permite que la imagen clonada abra la instantánea padre y la lea.

Un clon COW de una instantánea se comporta exactamente igual que cualquier otra imagen de dispositivo de bloques de Ceph. Puede leer las imágenes clonadas, escribir en ellas, clonarlas y redimensionarlas. No existen restricciones especiales que afecten a las imágenes clonadas. No obstante, la clonación de copia de escritura de una instantánea hace referencia a la instantánea, por lo que debe proteger la instantánea antes de clonarla.

Nota
Nota

Ceph solo es compatible con la clonación de imágenes de formato 2 (creadas con rbd create --image-format 2).

8.3.3.1 Procedimientos iniciales con las capas

La aplicación de capas a un dispositivo de bloques de Ceph es un proceso sencillo. Debe disponer de una imagen. Debe crear una instantánea de la imagen. Debe proteger la instantánea. Una vez realizados estos pasos, puede empezar a clonar la instantánea.

La imagen clonada tendrá una referencia a la instantánea padre e incluirá el ID del repositorio, el ID de la imagen y el ID de la instantánea. La inclusión del ID del repositorio significa que se pueden clonar instantáneas de un repositorio como imágenes en un repositorio distinto.

  • Plantilla de imagen: un ejemplo de uso habitual para crear capas de dispositivos de bloques es crear una imagen principal y una instantánea que sirva como plantilla para los clones. Por ejemplo, un usuario puede crear una imagen de una distribución de Linux (como SUSE Linux Enterprise Server) y crear una instantánea para ella. El usuario puede actualizar periódicamente la imagen y crear una instantánea nueva (por ejemplo, zypper ref && zypper patch, seguido de rbd snap create). A medida que la imagen crezca, el usuario puede clonar cualquiera de las instantáneas.

  • Plantilla extendida: un ejemplo de uso más avanzado implica la posibilidad de extender una imagen de plantilla para que proporcione más información que una imagen base. Por ejemplo, un usuario puede clonar una imagen (una plantilla de máquina virtual) e instalar otro software (por ejemplo, una base de datos, un sistema de gestión de contenido o un sistema de análisis) y, a continuación, realizar una instantánea de la imagen extendida, que a su vez se puede actualizar de la misma manera que la imagen base.

  • Repositorio de plantillas: una manera de utilizar capas de dispositivos de bloques es crear un repositorio que contenga imágenes principales que actúen como plantillas e instantáneas de dichas plantillas. A continuación, puede ampliar los privilegios de solo lectura a los usuarios, de modo que tengan la posibilidad de clonar las instantáneas sin la capacidad de escribir o ejecutar dentro del repositorio.

  • Migración y recuperación de imágenes: una manera de utilizar capas de dispositivos de bloques consiste en migrar o recuperar datos de un repositorio a otro.

8.3.3.2 Protección de una instantánea

Los clones acceden a las instantáneas padre. Todos los clones dejarán de funcionar si un usuario suprime por error la instantánea padre. Para evitar la pérdida de datos, debe proteger la instantánea antes de clonarla.

root # rbd --pool pool-name snap protect \
 --image image-name --snap snapshot-name
root # rbd snap protect pool-name/image-name@snapshot-name

Por ejemplo:

root # rbd --pool pool1 snap protect --image image1 --snap snapshot1
root # rbd snap protect pool1/image1@snapshot1
Nota
Nota

No es posible suprimir una instantánea protegida.

8.3.3.3 Clonación de una instantánea

Para clonar una instantánea, debe especificar el repositorio padre, la imagen, la instantánea, el repositorio hijo y el nombre de la imagen. Debe proteger la instantánea para poder clonarla.

root # rbd --pool pool-name --image parent-image \
 --snap snap-name --dest-pool pool-name \
 --dest child-image
root # rbd clone pool-name/parent-image@snap-name \
pool-name/child-image-name

Por ejemplo:

root # rbd clone pool1/image1@snapshot1 pool1/image2
Nota
Nota

Puede clonar una instantánea de un repositorio como una imagen de otro repositorio. Por ejemplo, puede mantener imágenes e instantáneas de solo lectura como plantillas en un repositorio y clones con acceso de escritura en otro.

8.3.3.4 Desprotección de una instantánea

Para suprimir una instantánea, primero debe desprotegerla. Además, no puede suprimir instantáneas que tengan referencias de clones. Debe aplanar todos los clones de una instantánea para poder eliminarla.

root # rbd --pool pool-name snap unprotect --image image-name \
 --snap snapshot-name
root # rbd snap unprotect pool-name/image-name@snapshot-name

Por ejemplo:

root # rbd --pool pool1 snap unprotect --image image1 --snap snapshot1
root # rbd snap unprotect pool1/image1@snapshot1

8.3.3.5 Enumeración de los hijos de una instantánea

Para enumerar los hijos de una instantánea, ejecute lo siguiente:

root # rbd --pool pool-name children --image image-name --snap snap-name
root # rbd children pool-name/image-name@snapshot-name

Por ejemplo:

root # rbd --pool pool1 children --image image1 --snap snapshot1
root # rbd children pool1/image1@snapshot1

8.3.3.6 Aplanamiento de una imagen clonada

Las imágenes clonadas retienen una referencia a la instantánea padre. Si elimina la referencia del clon a la instantánea padre, la imagen se "aplana" copiando la información de la instantánea en el clon. El tiempo que se tarda en aplanar un clon aumenta según el tamaño de la instantánea. Para suprimir una instantánea, primero debe aplanar las imágenes hijo.

root # rbd --pool pool-name flatten --image image-name
root # rbd flatten pool-name/image-name

Por ejemplo:

root # rbd --pool pool1 flatten --image image1
root # rbd flatten pool1/image1
Nota
Nota

Dado que una imagen plana contiene toda la información de la instantánea, ocupará más espacio de almacenamiento que un clon con capas.

8.4 rbdmap: asignación de dispositivos RBD durante el arranque

rbdmap es un guion de shell que automatiza las operaciones rbd map y rbd unmap en una o varias imágenes de dispositivos de bloques RADOS. Aunque es posible ejecutar el guion manualmente en cualquier momento, el uso principal consiste en asignar y montar automáticamente las imágenes RBD durante el arranque (y desmontarlas y desasignarlas al apagar el equipo), activándose mediante el sistema Init. Con este fin, el paquete ceph-common incluye el archivo de unidad systemd rbdmap.service.

El guion solo acepta un argumento, que puede ser map o unmap. En ambos casos, el guion analiza un archivo de configuración. Se utiliza /etc/ceph/rbdmap por defecto, pero se puede anular mediante una variable de entorno RBDMAPFILE. Cada línea del archivo de configuración se corresponde con una imagen RBD que se debe asignar o desasignar.

El archivo de configuración tiene el formato siguiente:

image_specification rbd_options
image_specification

Vía a una imagen dentro de un repositorio. Se debe especificar como nombre_repositorio/nombre_imagen. Si omite nombre_repositorio, se asume por defecto "rbd".

rbd_options

Una lista opcional de parámetros que se puedan pasar al comando rbd map subyacente. Estos parámetros y sus valores se deben especificar como una cadena separada por comas, por ejemplo:

PARAM1=VAL1,PARAM2=VAL2,...

El ejemplo hace que el guion rbdmap ejecute el siguiente comando:

rbd map pool_name/image_name --PARAM1 VAL1 --PARAM2 VAL2

Si se ejecuta como rbdmap map, el guion analiza el archivo de configuración y, para cada imagen RBD especificada, primero intenta asignar la imagen (mediante el comando rbd map) y luego montarla.

Si se ejecuta como rbdmap unmap, las imágenes enumeradas en el archivo de configuración se desmontarán y se desasignarán.

rbdmap unmap-all intenta desmontar y posteriormente desasignar todas las imágenes RBD asignadas actualmente, independientemente de que estén enumeradas o no en el archivo de configuración.

Si la operación se realiza correctamente, rbd map asigna la imagen a un dispositivo /dev/rbdX, momento en el que se activa una regla udev para crear un enlace simbólico de nombre de dispositivo de confianza /dev/rbd/nombre_repositorio/nombre_imagen que señala al dispositivo real asignado.

Para que las operaciones de montaje y desmontaje se lleven a cabo correctamente, el nombre del dispositivo de confianza debe tener una entrada correspondiente en /etc/fstab. Al escribir entradas /etc/fstab para imágenes RBD, especifique la opción de montaje "noauto" (o "nofail"). Esto impide que el sistema Init intente montar el dispositivo demasiado pronto, antes de que el dispositivo en cuestión aún exista, ya que rbdmap.service normalmente se activa bastante tarde en la secuencia de arranque.

Para una lista completa de opciones de rbd, consulte la página de manual de rbd (man 8 rbd).

Para consultar ejemplos de uso de rbdmap, consulte la página de manual de rbdmap (man 8 rbdmap).

8.5 Duplicación de dispositivos de bloques RADOS

Las imágenes RBD se pueden duplicar de forma asincrónica entre dos clústeres de Ceph. Esta función utiliza las imágenes RBD transaccionales para garantizar la replicación protegida contra bloqueos entre los clústeres. La duplicación se configura para cada repositorio con clústeres conectores y se puede configurar para que duplique automáticamente todas las imágenes de un repositorio o solo un subconjunto específico de imágenes. La duplicación se configura mediante el comando rbd. El daemon rbd-mirror es el responsable de la extracción de actualizaciones de imágenes en el clúster conector remoto y de aplicarlos a la imagen en el clúster local.

Importante
Importante: daemon rbd-mirror

Para utilizar la duplicación RBD, debe disponer de dos clústeres Ceph con el daemon rbd-mirror en ejecución en ambos.

8.5.1 Daemon rbd-mirror

Los dos daemons rbd-mirror son responsables de vigilar los diarios transaccionales de las imágenes en el clúster conector remoto y reproducir los eventos del diario en el clúster local. Las imágenes RBD transaccionales almacenan todas las modificaciones realizadas en la imagen en el orden en que se producen. Esto garantiza que exista localmente una duplicación de la imagen remota protegida contra errores.

El daemon rbd-mirror está disponible en el paquete rbd-mirror. Instálelo, habilítelo e inícielo en uno de los nodos del clúster:

root@minion > zypper install rbd-mirror
root@minion > systemctl enable ceph-rbd-mirror@server_name.service
root@minion > systemctl start ceph-rbd-mirror@server_name.service
Importante
Importante

Cada daemon rbd-mirror requiere la capacidad de conectarse a ambos clústeres de forma simultánea.

8.5.2 Configuración del repositorio

Los siguientes procedimientos demuestran cómo llevar a cabo las tareas administrativas básicas para configurar la duplicación mediante el comando rbd. La duplicación se configura de forma independiente para cada repositorio dentro de los clústeres de Ceph.

Debe llevar a cabo los pasos de configuración del repositorio en ambos clústeres conectores. Para simplificar los ejemplos, en estos procedimientos se presupone que hay dos clústeres, denominados "local" y "remote", accesibles desde un único host.

Consulte la página de manual de rbd (man 8 rbd) para obtener información adicional acerca de cómo conectarse a clústeres de Ceph diferentes.

Sugerencia
Sugerencia: varios clústeres

En los siguientes ejemplos, el nombre del clúster se corresponde con un archivo de configuración de Ceph con el mismo nombre /etc/ceph/remote.conf. Consulte la documentación de ceph-conf para obtener información sobre cómo configurar varios clústeres.

8.5.2.1 Cómo habilitar la duplicación

Para habilitar la duplicación en un repositorio, especifique el subcomando mirror pool enable, el nombre del repositorio y el modo de duplicación. El modo de duplicación puede ser de repositorio o de imagen:

pool

Se duplican todas las imágenes del repositorio con el registro transaccional habilitado.

image

La duplicación se debe habilitar explícitamente en cada imagen. Consulte la Sección 8.5.3.2, “Cómo habilitar la duplicación de imágenes” para obtener más información.

Por ejemplo:

root # rbd --cluster local mirror pool enable image-pool pool
root # rbd --cluster remote mirror pool enable image-pool pool

8.5.2.2 Cómo inhabilitar la duplicación

Para inhabilitar la duplicación en un repositorio, especifique el subcomando mirror pool disable y el nombre del repositorio. Cuando se inhabilita la duplicación en un repositorio de esta forma, la duplicación también se inhabilitará en cualquier imagen (dentro del repositorio) para la que se haya habilitado la duplicación explícitamente.

root # rbd --cluster local mirror pool disable image-pool
root # rbd --cluster remote mirror pool disable image-pool

8.5.2.3 Adición de un clúster conector

Para que el daemon rbd-mirror descubra su clúster conector, el conector debe estar registrado en el repositorio. Para añadir un clúster conector duplicado, especifique el subcomando mirror pool peer add, el nombre del repositorio y una especificación de clúster:

root # rbd --cluster local mirror pool peer add image-pool client.remote@remote
root # rbd --cluster remote mirror pool peer add image-pool client.local@local

8.5.2.4 Eliminación de un clúster conector

Para eliminar un clúster conector duplicado, especifique el subcomando mirror pool peer remove, el nombre del repositorio y el UUID del conector (disponible mediante el comando rbd mirror pool info):

root # rbd --cluster local mirror pool peer remove image-pool \
 55672766-c02b-4729-8567-f13a66893445
root # rbd --cluster remote mirror pool peer remove image-pool \
 60c0e299-b38f-4234-91f6-eed0a367be08

8.5.3 Configuración de la imagen

A diferencia de la configuración del repositorio, la configuración de la imagen solo se debe realizar en un único clúster conector duplicado de Ceph.

Las imágenes RBD duplicadas se designan como primary (principal) o non-primary (no principal). Se trata de una propiedad de la imagen, no del repositorio. Las imágenes designadas como no principales no se pueden modificar.

Las imágenes suben de nivel a principal automáticamente cuando la duplicación se habilita por primera vez en una imagen (ya sea implícita, si el modo de duplicación del repositorio es "pool" [repositorio] y la imagen cuenta con la función de imagen transaccional habilitada, o explícita [consulte la Sección 8.5.3.2, “Cómo habilitar la duplicación de imágenes”], mediante el comando rbd).

8.5.3.1 Habilitación de la compatibilidad con imágenes transaccionales

La duplicación RBD utiliza las imágenes RBD transaccionales para garantizar que la imagen replicada siempre esté protegida contra fallos. Para que una imagen se pueda duplicar en un clúster conector, es necesario habilitar la función de registro transaccional. La función se puede habilitar en el momento de creación de la imagen proporcionando la opción --image-feature exclusive-lock,journaling al comando rbd.

Como alternativa, la función de registro transaccional se puede habilitar de forma dinámica en las imágenes RBD preexistentes. Para habilitar el registro transaccional, especifique el subcomando feature enable, el nombre del repositorio y la imagen y el nombre de la función:

root # rbd --cluster local feature enable image-pool/image-1 journaling
Nota
Nota: dependencia de opciones

La función journaling (registro transaccional) depende de la función exclusive-lock (bloqueo exclusivo). Si la función exclusive-lock no está habilitada, deberá habilitarla antes que la función journaling.

Sugerencia
Sugerencia: registro transaccional en todas las imágenes nuevas

Para habilitar el registro transaccional por defecto para todas las imágenes nuevas, añada la siguiente línea al archivo de configuración de Ceph:

rbd default features = 125

8.5.3.2 Cómo habilitar la duplicación de imágenes

Si la duplicación está configurada en el modo de imagen para el repositorio de la imagen, es necesario habilitar explícitamente la duplicación para cada imagen del repositorio. Para habilitar la duplicación de una imagen concreta, especifique el subcomando mirror image enable junto con el nombre del repositorio y el de la imagen:

root # rbd --cluster local mirror image enable image-pool/image-1

8.5.3.3 Cómo inhabilitar la duplicación de imágenes

Para habilitar la duplicación de una imagen concreta, especifique el subcomando mirror image disable junto con el nombre del repositorio y el de la imagen:

root # rbd --cluster local mirror image disable image-pool/image-1

8.5.3.4 Cómo bajar o subir de nivel una imagen

En una situación de failover en la que sea necesario mover la designación primara a la imagen del clúster conector, debe detener el acceso a la imagen principal, bajarla de nivel, subir el nivel de la nueva imagen principal y reanudar el acceso a la imagen en el clúster alternativo.

Para bajar de nivel una imagen y convertirla en no principal, especifique el subcomando mirror image demote junto con el nombre del repositorio y el de la imagen:

root # rbd --cluster local mirror image demote image-pool/image-1

Para bajar de nivel todas las imágenes principales de un repositorio a no principales, especifique el subcomando mirror pool demote junto con el nombre del repositorio:

root # rbd --cluster local mirror pool demote image-pool

Para subir de nivel una imagen y convertirla en principal, especifique el subcomando mirror image promote junto con el nombre del repositorio y el de la imagen:

root # rbd --cluster remote mirror image promote image-pool/image-1

Para subir de nivel todas las imágenes de un repositorio a principales, especifique el subcomando mirror pool promote junto con el nombre del repositorio:

root # rbd --cluster local mirror pool promote image-pool
Sugerencia
Sugerencia: división de la carga de E/S

Puesto que el estado principal o no principal se establece para cada imagen, es posible que haya dos clústeres que dividan la carga de E/S y el failover o failback por etapas.

Nota
Nota: subida de nivel forzosa

Puede forzar la subida de nivel mediante la opción --force. Es necesario forzar la subida de nivel cuando la bajada de nivel no se puede propagar al clúster conector (por ejemplo, en caso de fallo del clúster o interrupción de la comunicación). Esto provocará una situación de división entre ambos conectores y la imagen dejará de sincronizarse hasta que se emita un subcomando resync.

8.5.3.5 Cómo forzar la resincronización de la imagen

Si el daemon rbd-mirror detecta un evento dividido, no intentará duplicar la imagen afectada hasta que se corrija. Para reanudar la duplicación de una imagen, primero baje de nivel la imagen considerada obsoleta y, a continuación, realice una petición de resincronización de la imagen principal. Para pedir una resincronización de la imagen, especifique el subcomando mirror image resync junto con el nombre del repositorio y el de la imagen:

root # rbd mirror image resync image-pool/image-1

8.5.4 Estado de la duplicación

El estado de replicación de clúster conector se almacena para cada imagen principal duplicada. Este estado se puede recuperar mediante los subcomandos mirror image status y mirror pool status:

Para pedir el estado de la imagen duplicada, especifique el subcomando mirror image status junto con el nombre del repositorio y el de la imagen:

root # rbd mirror image status image-pool/image-1

Para pedir el estado resumido del repositorio de duplicación, especifique el subcomando mirror pool status junto con el nombre del repositorio:

root # rbd mirror pool status image-pool
Sugerencia
Sugerencia:

Si se añade la opción --verbose al subcomando mirror pool status, también se mostrará la información de estado de todas las imágenes duplicadas del repositorio.

Imprimir esta página