1 SES y Ceph #
SUSE Enterprise Storage es un sistema de almacenamiento distribuido basado en la tecnología Ceph diseñado para que tenga capacidad de ampliación, sea fiable y aporte alto rendimiento. Los clústeres de Ceph se pueden ejecutar en servidores básicos en una red común como Ethernet. Es posible ampliar fácilmente el clúster hasta miles de servidores (a partir de ahora denominados nodos) y almacenar petabytes de información. A diferencia de los sistemas convencionales que cuentan con tablas de asignación para almacenar y recuperar datos, Ceph utiliza un algoritmo determinista para asignar el almacenamiento de datos y no tiene ninguna estructura de información centralizada. Ceph entiende que en los clústeres de almacenamiento la adición o eliminación de hardware es la norma, no la excepción. El clúster de Ceph automatiza las tareas de gestión, como la distribución, redistribución y réplica de datos; la detección de fallos y la recuperación. Ceph se autorrepara y se autoadministra, con lo que se consigue una reducción de las tareas administrativas y del presupuesto necesario.
Este capítulo proporciona una visión general de SUSE Enterprise Storage 7.1 y describe brevemente los componentes más importantes.
1.1 Características de Ceph #
El entorno Ceph incluye las siguientes características:
- Capacidad de ampliación
Ceph puede ampliarse a miles de nodos y gestionar petabytes de almacenamiento.
- Hardware básico
Para ejecutar un clúster de Ceph no se requiere ningún hardware especial. Para obtener información, consulte el Capítulo 2, Requisitos y recomendaciones de hardware
- Autoadministración
El clúster de Ceph se gestiona automáticamente. Cuando se añaden o se eliminan nodos, o cuando estos fallan, el clúster redistribuye los datos automáticamente. También es consciente de los discos sobrecargados.
- Sin un punto único de error
Ningún nodo de un clúster almacena información importante por sí solo. El número de redundancias se puede configurar.
- Software de código abierto
Ceph es una solución de software de código abierto e independiente de hardware o proveedores específicos.
1.2 Componentes principales de Ceph #
Para aprovechar al máximo las ventajas de Ceph, es necesario comprender algunos de sus componentes y conceptos básicos. Esta sección presenta algunas partes de Ceph a las que se hace referencia con frecuencia en otros capítulos.
1.2.1 RADOS #
El componente básico de Ceph se denomina RADOS (Reliable Autonomic Distributed Object Store, almacén de objetos distribuido autónomo fiable). Es el encargado de gestionar los datos almacenados en el clúster. Los datos de Ceph se almacenan normalmente como objetos. Cada objeto se compone de un identificador y datos.
RADOS proporciona los siguientes métodos de acceso para los objetos almacenados que abarcan muchos casos de uso:
- Object Gateway
Object Gateway es una pasarela REST HTTP para el almacén de objetos RADOS. Permite el acceso directo a los objetos almacenados en el clúster de Ceph.
- Dispositivo de bloques RADOS
Es posible acceder al dispositivo de bloques RADOS (RBD) igual que a cualquier otro dispositivo de bloques. Por ejemplo, se pueden usar en combinación con
libvirt
con fines de virtualización.- CephFS
El sistema de archivos de Ceph tiene conformidad con POSIX.
librados
librados
es una biblioteca que se puede utilizar con varios lenguajes de programación a fin de crear una aplicación capaz de interactuar directamente con el clúster de almacenamiento.
librados
se utiliza en Object Gateway y RBD, mientras que CephFS interactúa directamente con RADOS (Figura 1.1, “Interfaces con el almacén de objetos de Ceph”).
1.2.2 CRUSH #
En el núcleo de un clúster de Ceph se encuentra el algoritmo CRUSH. CRUSH es el acrónimo de Controlled Replication Under Scalable Hashing (réplica controlada bajo hash escalable). Es una función que gestiona la asignación del almacenamiento y, en comparación con otros algoritmos, necesita pocos parámetros. Es decir, que solo necesita una pequeña cantidad de información para calcular la posición de almacenamiento de un objeto. Los parámetros son un mapa actual del clúster, incluido el estado de actividad, algunas reglas de colocación definidas por el administrador y el nombre del objeto que se va a almacenar o recuperar. Con esta información, todos los nodos del clúster de Ceph pueden calcular dónde está almacenado un objeto y sus réplicas. De esta forma, la escritura o lectura de los datos se realiza de forma muy eficaz. CRUSH intenta distribuir homogéneamente los datos por todos los nodos del clúster.
El mapa de CRUSH contiene todos los nodos de almacenamiento y las reglas de colocación definidas por el administrador para almacenar los objetos en el clúster. Define una estructura jerárquica que se suele corresponder con la estructura física del clúster. Por ejemplo, los discos que contienen los datos están en hosts, los hosts están en bastidores, los bastidores en filas y las filas en centros de datos. Esta estructura se puede utilizar para definir dominios de fallo. Ceph se asegura de que las réplicas se almacenan en diferentes ramas de un dominio de fallo concreto.
Si el dominio de fallo se define en el bastidor, las réplicas de los objetos se distribuyen en distintos bastidores. Esto puede mitigar las interrupciones causadas por un conmutador que falle en un bastidor. Si una unidad de distribución de alimentación da energía a una fila de bastidores, el dominio de fallo se puede definir en la fila. Cuando se produce un fallo en la unidad de distribución de alimentación, los datos replicados siguen disponibles en las demás filas.
1.2.3 Nodos y daemons de Ceph #
En Ceph, los nodos son servidores que trabajan para el clúster. Pueden ejecutar distintos tipos de daemons. Se recomienda ejecutar solo un tipo de daemon en cada nodo, excepto los daemons de Ceph Manager, que se pueden colocar junto con monitores Ceph Monitor. Cada clúster requiere al menos los daemons de Ceph Monitor, Ceph Manager y Ceph OSD:
- Nodo de administración
El nodo de administración es un nodo de clúster de Ceph desde el que se ejecutan comandos para gestionar el clúster. El nodo de administración es un punto central del clúster de Ceph porque gestiona el resto de los nodos del clúster consultando y dando instrucciones a los servicios minion de Salt.
- Ceph Monitor
Los nodos de Ceph Monitor (a menudo abreviado como MON) guardan información sobre el estado de la actividad del clúster: un mapa de todos los nodos y las reglas de distribución de los datos (consulte la Sección 1.2.2, “CRUSH”).
Si se producen fallos o conflictos, los nodos de Ceph Monitor del clúster deciden por mayoría qué información es la correcta. Para formar una mayoría cualificada, se recomienda tener un número impar de nodos de Ceph Monitor, y tres como mínimo.
Si se utiliza más de un sitio, los nodos de Ceph Monitor deben distribuirse en un número impar de sitios. El número de nodos de Ceph Monitor por sitio debe ser superior al 50 % de los nodos de Ceph Monitor que permanecen operativos si se produce un fallo en un sitio.
- Ceph Manager
Ceph Manager recopila la información de estado de todo el clúster. El daemon de Ceph Manager se ejecuta junto con los daemons de Ceph Monitor. Proporciona supervisión adicional y sirve de interfaz entre los sistemas de supervisión y gestión externos. También incluye otros servicios. Por ejemplo, la interfaz de usuario Web de Ceph Dashboard se ejecuta en el mismo nodo que Ceph Manager.
Ceph Manager no requiere configuración adicional, aparte de asegurarse de que está en ejecución.
- Ceph OSD
Un Ceph OSD es un daemon que gestiona dispositivos de almacenamiento de objetos, que son unidades de almacenamiento físicas o lógicas (discos duros o particiones). Los dispositivos de almacenamiento de objetos pueden ser discos físicos/particiones o volúmenes lógicos. El daemon se encarga también de la réplica de datos y del reequilibrio de la carga en caso de que se añadan o se eliminen nodos.
Los daemons Ceph OSD se comunican con los daemons de monitor y les proporcionan el estado de los demás daemons de OSD.
Para utilizar CephFS, Object Gateway, NFS Ganesha o iSCSI Gateway se necesitan nodos adicionales:
- Servidor de metadatos (MDS)
Los metadatos de CephFS se almacenan en su propio repositorio RADOS (consulte la Sección 1.3.1, “Repositorios”). Los servidores de metadatos actúan como una capa de almacenamiento en caché inteligente para los metadatos y serializan el acceso cuando es necesario. Esto permite el acceso simultáneo desde muchos clientes sin sincronización explícita.
- Object Gateway
Object Gateway es una pasarela REST HTTP para el almacén de objetos RADOS. Es compatible con OpenStack Swift y Amazon S3 y tiene su propia de gestión de usuarios.
- NFS Ganesha
NFS Ganesha proporciona acceso NFS para Object Gateway o CephFS. Se ejecuta en el espacio del usuario, en lugar de en el espacio del kernel, e interactúa directamente con Object Gateway o CephFS.
- iSCSI Gateway
iSCSI es un protocolo de red de almacenamiento que permite a los clientes enviar comandos SCSI a dispositivos de almacenamiento SCSI (destinos) en servidores remotos.
- Samba Gateway
Samba Gateway proporciona un acceso Samba a los datos almacenados en CephFS.
1.3 Estructura de almacenamiento de Ceph #
1.3.1 Repositorios #
Los objetos que se almacenan en un clúster de Ceph se colocan en repositorios. Los repositorios representan particiones lógicas del clúster hacia el mundo exterior. Por cada repositorio, es posible definir un conjunto de reglas; por ejemplo, cuántas réplicas de cada objeto deben existir. La configuración estándar de los repositorios se denomina repositorio replicado.
Los repositorios suelen contener objetos, pero también pueden configurarse para actuar como si fueran un sistema RAID 5. En esta configuración, los objetos se almacenan en porciones junto con porciones de código adicionales. Las porciones de código contienen información redundante. El administrador puede definir el número de datos y de porciones de código. En esta configuración, los repositorios se denominan repositorios codificados de borrado o repositorios EC.
1.3.2 Grupos de colocación #
Los grupos de colocación (PG) se utilizan para la distribución de datos dentro de un repositorio. Cuando se crea un repositorio, se define un número determinado de grupos de colocación. Los grupos de colocación se utilizan de modo interno para agrupar objetos y son un factor importante para el rendimiento de un clúster de Ceph. El grupo de colocación para un objeto se determina según el nombre del objeto.
1.3.3 Ejemplo #
Esta sección proporciona un ejemplo de cómo gestiona Ceph los datos (consulte la Figura 1.2, “Ejemplo de Ceph a pequeña escala”). El ejemplo no representa una configuración recomendada de un clúster de Ceph. El hardware está formado por tres nodos de almacenamiento o tres Ceph OSD (Host 1
, Host 2
y Host 3
). Cada nodo tiene tres discos duros que se utilizan como OSD (osd.1
a osd.9
). Los nodos de Ceph Monitor no se tratan en este ejemplo.
Ceph OSD o daemon Ceph OSD hace referencia a un daemon que se ejecuta en un nodo, mientras que el término OSD hace referencia al disco lógico con el que interactúa el daemon.
El clúster tiene dos repositorios, Repositorio A
y Repositorio B
. Mientras Repositorio A replica objetos solo dos veces, la capacidad de recuperación de Repositorio B es más importante y tiene tres réplicas para cada objeto.
Cuando una aplicación coloca un objeto en un repositorio, por ejemplo, mediante la API REST, se selecciona un grupo de colocación (PG1
a PG4
) según el repositorio y el nombre del objeto. El algoritmo CRUSH calcula en qué OSD se almacena el objeto, según el grupo de colocación que contiene el objeto.
En este ejemplo, el dominio de fallo está definido en el host. Esto garantiza que las réplicas de los objetos se almacenan en distintos hosts. Según el nivel de réplica que se defina para un repositorio, el objeto se almacenará en dos o en tres de los OSD que usa el grupo de colocación.
Una aplicación que escribe un objeto solo interactúa con un Ceph OSD: el Ceph OSD primario. El Ceph OSD primario se encarga de la réplica y confirma que el proceso de escritura ha terminado después de que todos los demás OSD hayan almacenado el objeto.
Si falla osd.5
, todos los objetos de PG1
siguen estando disponibles en osd.1
. En cuanto el clúster reconoce que un OSD ha fallado, otro OSD toma su lugar. En este ejemplo, osd.4
se utiliza como sustituto de osd.5
. Los objetos almacenados en osd.1
se replican a osd.4
para restaurar el nivel de réplica.
Si se añade un nuevo nodo con nuevos OSD al clúster, el mapa del clúster cambia. La función CRUSH devuelve ubicaciones diferentes para los objetos. los objetos que reciben las nuevas ubicaciones se reubican. Este proceso da como resultado un uso equilibrado de todos los OSD.
1.4 BlueStore #
BlueStore es el procesador final de almacenamiento por defecto para Ceph desde SES 5. Su rendimiento es mejor que el de FireStore y cuenta con suma de comprobación de los datos completos y compresión integrada.
BlueStore puede gestionar uno, dos o tres dispositivos de almacenamiento. En el caso más sencillo, BlueStore consume un único dispositivo de almacenamiento primario. Normalmente, el dispositivo de almacenamiento se divide en dos partes:
Una pequeña partición denominada BlueFS que implementa las funciones de sistema de archivos requeridas por RocksDB.
El resto del dispositivo suele estar ocupado por una partición de gran tamaño. Se gestiona directamente mediante BlueStore y contiene todos los datos reales. Este dispositivo primario normalmente se identifica mediante un enlace simbólico de bloque en el directorio de datos.
También es posible distribuir BlueStore en dos dispositivos adicionales:
Un dispositivo WAL que se puede usar para el diario interno o el registro de escritura anticipada de BlueStore. Se identifica mediante el enlace simbólico block.wal
en el directorio de datos. Solo resulta útil emplear un dispositivo WAL independiente si el dispositivo es más rápido que el dispositivo primario o que el dispositivo DB, por ejemplo en estos casos:
Si el dispositivo WAL es un NVMe, el dispositivo DB es una unidad SSD y el dispositivo de datos es una unidad SSD o un disco duro.
Los dispositivos WAL y DB están en unidades SSD independientes, y el dispositivo de datos está en un SSD o un disco duro.
Es posible utilizar un dispositivo DB para almacenar los metadatos internos de BlueStore. BlueStore (o en su lugar, la instancia incrustada de RocksDB) colocará todos los metadatos que pueda en el dispositivo DB para mejorar el rendimiento. De nuevo, provisionar un dispositivo DB compartido solo resulta útil si es más rápido que el dispositivo primario.
Debe realizar una planificación exhaustiva para garantizar un tamaño suficiente al dispositivo DB. Si el dispositivo DB se llena, los metadatos se diseminarán por todo el dispositivo primario, lo que afectará muy negativamente al rendimiento del OSD.
Puede comprobar si una partición WAL/BD se está llenando y desbordándose con el comando ceph daemon osd.ID perf dump
. El valor slow_used_bytes
muestra la cantidad de datos que se han desbordado:
cephuser@adm >
ceph daemon osd.ID perf dump | jq '.bluefs'
"db_total_bytes": 1073741824,
"db_used_bytes": 33554432,
"wal_total_bytes": 0,
"wal_used_bytes": 0,
"slow_total_bytes": 554432,
"slow_used_bytes": 554432,
1.5 Información adicional #
Ceph es un proyecto comunitario que cuenta con su propia documentación en línea completa. Para obtener información sobre temas que no encuentre en este manual, consulte https://docs.ceph.com/en/pacific/.
La publicación original CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data (CRUSH: colocación controlada, ampliable y descentralizada de datos replicados) de S.A. Weil, S.A. Brandt, E.L. Miller y C. Maltzahn proporciona información útil sobre el funcionamiento interno de Ceph. Se recomienda su lectura sobre todo al distribuir clústeres a gran escala. Encontrará la publicación en http://www.ssrc.ucsc.edu/papers/weil-sc06.pdf.
SUSE Enterprise Storage se puede utilizar con distribuciones OpenStack que no sean de SUSE. Los clientes de Ceph deben estar en un nivel que sea compatible con SUSE Enterprise Storage.
NotaSUSE admite el componente de servidor de la distribución de Ceph y el proveedor de distribución de OpenStack debe admitir el cliente.