Ceph a través de iSCSI - o esquiar mientras está parado en una hamaca

¿Hay entre nosotros (cefovodov) aquellos a quienes no les gusta el "extremo profesional"?

Es poco probable, de lo contrario no daríamos un salto mortal con este producto extremadamente interesante y divertido.

Muchos de los que estuvieron involucrados en la explotación de Ceph se encontraron con un caso no muy frecuente (pero incluso muy poco frecuente) pero a veces exigido: para conectar Ceph a través de iSCSI o FC. Por qué Bueno, por ejemplo, envíe una imagen de Ceph a un servidor Windows o Solaris aún no virtualizado. O virtualizado, pero a través de un hipervisor que Ceph no sabe cómo hacer, y como sabemos, hay suficientes. Por ejemplo? Bueno, por ejemplo, HyperV o ESXi, que se usan activamente. Y si surge la tarea de enviar la imagen de Ceph a la máquina invitada, esto se convierte en una tarea muy emocionante.

Entonces, dado:

  1. ya ejecuta el clúster Ceph
  2. una imagen existente que debe enviarse a través de iSCSI
  3. Nombre de grupo mypool , nombre de imagen myimage

Estamos empezando

En primer lugar, cuando hablamos de FC o iSCSI, obtenemos entidades como un iniciador y un objetivo. Target es en realidad un servidor, el iniciador es un cliente. Nuestra tarea es enviar la imagen Ceph al iniciador con un trabajo mínimo. Entonces tenemos que desplegar target. ¿Pero dónde, en qué computadora?

Afortunadamente, en el clúster Ceph tenemos al menos un componente cuya dirección IP es fija y en el que está configurado uno de los componentes Ceph más importantes, y este componente es un monitor. En consecuencia, en el monitor establecemos el objetivo iSCSI (y el iniciador al mismo tiempo, al menos para las pruebas). Lo hice en CentOS, pero para cualquier otra distribución, la solución también es adecuada: simplemente coloque los paquetes de la manera que sea aceptable en su distribución.

# yum -y install iscsi-initiator-utils targetcli

¿Cuál es el propósito de los paquetes instalados?

  • targetcli : utilidad de administración de objetivos SCSI de Linux para el kernel de Linux
  • iscsi-inittor-utils : un paquete con utilidades utilizadas para controlar el iniciador iSCSI integrado en el kernel de Linux nuevamente

Para enviar una imagen a través de iSCSI al iniciador, hay dos opciones para el desarrollo de eventos: utilizar el backend del espacio de usuario del objetivo o conectar la imagen como un dispositivo de bloque visible para el sistema operativo y exportarla a través de iSCSI. Iremos de la segunda manera: el backend del espacio de usuario todavía está en un estado "experimental" y no está listo para un uso productivo. Además, hay dificultades con las que puedes hablar mucho y (¡oh horror!) Discutir.

Si usamos al menos alguna distribución estable con un ciclo de soporte largo, entonces tenemos el núcleo de alguna versión antigua-antigua. Por ejemplo, en CentOS7 es 3.10. *, En CentOS8 es 4.19. Y estamos interesados ​​en un núcleo de al menos 5.3 (pero más bien 5.4) y uno más nuevo. Por qué Porque de manera predeterminada, las imágenes en Ceph tienen un conjunto de opciones adjunto que no es compatible con los núcleos más antiguos. Entonces, conectamos el repositorio con un nuevo núcleo para nuestra distribución (por ejemplo, para CentOS es elrepo), instalamos un nuevo núcleo y reiniciamos el sistema para que funcione con el nuevo núcleo:

  • Conéctese al monitor seleccionado para el experimento.
  • Conectamos repositorios de elrepo de acuerdo con las instrucciones: elrepo.org/tiki/tiki-index.php
  • Instale el kernel: yum -y --enablerepo = elrepo-kernel install kernel-ml
  • Reiniciamos el servidor con el monitor (después de todo, tenemos tres monitores, ¿verdad?)

Conecte la imagen como un dispositivo de bloque

# rbd map mypool/myimage
/dev/rbd0


Solo queda configurar el objetivo. En este ejemplo, configuraré el objetivo en el llamado modo de demostración: sin autenticación, visible y accesible para todos. En un entorno productivo, lo más probable es que desee configurar la autenticación, pero esto está un poco fuera del alcance del ejercicio de hoy solo por diversión.

Cree un backend con el nombre disk1 asignado al archivo / dev / rbd / mypool / myimage. El archivo especificado es un enlace simbólico a / dev / rbd0 creado automáticamente por el demonio udev. Usamos un enlace simbólico porque el nombre del dispositivo rbd puede cambiar debido al orden en que las imágenes Ceph están conectadas al host.

Crea un backend:

# targetcli /backstores/block create disk1 /dev/rbd/mypool/myimage

Cree un objetivo iSCSI:

# targetcli /iscsi create iqn.2020-01.demo.ceph:mypool

Conecte el backend como LUN al objetivo:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/luns create /backstores/block/disk1

Ajustamos el objetivo para el modo de demostración:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set \
> attribute demo_mode_write_protect=0
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set \
> attribute generate_node_acls=1
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set \
> attribute cache_dynamic_acls=1


Guarde la configuración:

# targetcli saveconfig

Verifique la disponibilidad del objetivo:

# iscsiadm -m discovery -t st -p 127.0.0.1:3260
127.0.0.1:3260,1 iqn.2020-01.demo.ceph:mypool


Conectamos el objetivo:

# iscsiadm -m node --login
Logging in to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] (multiple)
Login to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] successful.


Si hizo todo correctamente, aparecerá un nuevo disco en el servidor, que se parece a un dispositivo SCSI, pero de hecho es una imagen de Ceph, cuyo acceso se realiza a través del objetivo iSCSI. Para evitar problemas de arranque, es mejor eliminar la unidad asignada y el objetivo detectado del iniciador local:

# iscsiadm -m node --logout
# iscsiadm -m discoverydb -o delete -t st -p 127.0.0.1:3260


Todo lo que queda es mantener la configuración para que la imagen se conecte automáticamente y después de conectarse, el objetivo se estratifica. El lanzamiento de un objetivo consta de dos pasos: conectar RBD y realmente lanzar el objetivo.

Primero, configure la conexión automática de imágenes RBD al host. Esto se hace agregando líneas al archivo / etc / ceph / rbdmap:

# cat /etc/ceph/rbdmap
# RbdDevice Parameters
mypool/myimage id=admin
# systemctl enable rbdmap


Restaurar la configuración de un objetivo es un poco más complicado: necesitamos escribir la unidad para systemd, que restaurará la configuración:

# cat /usr/lib/systemd/system/scsi-target.service
[Unit]
Description=Start iSCSI target

After=network-online.target rbdmap.service
Before=remote-fs-pre.target
Wants=network-online.target remote-fs-pre.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/targetcli restoreconfig

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl enable scsi-target


Prueba final: una vez más reiniciamos nuestro monitor (ahora es un objetivo iSCSI). Cabe señalar que si no hubiéramos borrado la base del iniciador con el comando iscsiadm -n discoverydb -o delete ... podríamos tener un servidor que no se estaba cargando o se estaba cargando durante mucho tiempo.

Lo que queda

Configure el iniciador en el servidor donde queremos enviar el objetivo.

¿Cómo garantizar la resistencia de nuestro objetivo?

De manera similar, puede configurar destinos en otros monitores y organizar rutas múltiples (vmware lo comprenderá e incluso funcionará, Hyper-V no lo comprenderá; allí se requieren bloqueos SCSI). Dado que el cliente Ceph del núcleo no usa el almacenamiento en caché, esto es bastante funcional. Otra opción es crear un recurso de clúster de tres componentes: una dirección IP de destino dedicada y los servicios rbdmap y scsi-target, y administrar este recurso a través de herramientas de agrupación (¿quién dijo marcapasos?)

En lugar de un epílogo


Como saben, este artículo es una pequeña broma, pero en él intenté "rápidamente y con ejemplos" considerar varios temas bastante populares al mismo tiempo, el objetivo iSCSI, que no necesariamente exporta imágenes Ceph, pero por ejemplo exporta volúmenes LVM, lo básico para trabajar con el iniciador iSCSI ( cómo escanear un objetivo, cómo conectarse a un objetivo, desconectar, eliminar un registro de objetivo de la base de datos), escribir su propia unidad para systemd y algunos otros

Espero que incluso si no repite todo este experimento en su totalidad, al menos algo de este artículo le será útil.

Source: https://habr.com/ru/post/483974/


All Articles