Experiencia operativa CEPH

Cuando hay más datos que caben en un disco, es hora de pensar en RAID. Cuando era niño, a menudo escuchaba de mis mayores: "Un día, RAID será cosa del pasado, el almacenamiento de objetos llenará el mundo y ni siquiera sabes qué es CEPH", así que lo primero en una vida independiente fue crear tu propio grupo. El propósito del experimento era familiarizarse con la estructura interna de ceph y comprender el alcance de su aplicación. ¿Qué tan justificada está la introducción de ceph en las empresas medianas, pero en las pequeñas? Después de varios años de operación y un par de pérdidas de datos irreversibles, surgió la comprensión de las sutilezas de que no todo es tan simple. Las características de CEPH crean obstáculos para su adopción generalizada, y debido a ellos, los experimentos se han estancado. A continuación se muestra una descripción de todos los pasos dados, el resultado obtenido y las conclusiones extraídas.Si personas con conocimientos comparten su experiencia y aclaran algunos puntos, se lo agradeceré.



Nota: los comentaristas señalaron errores graves en algunos supuestos que requieren una revisión de todo el artículo.



Estrategia CEPH



El clúster CEPH combina un número arbitrario de K discos de tamaño arbitrario y almacena datos en ellos, duplicando cada pieza (4 MB por defecto) un número específico de N veces.



Considere el caso más simple con dos discos idénticos. De ellos puede recopilar RAID 1 o un clúster con N = 2; el resultado será el mismo. Si hay tres discos, y son de diferentes tamaños, entonces es fácil ensamblar un clúster con N = 2: algunos de los datos estarán en los discos 1 y 2, algunos en los discos 1 y 3, y algunos en 2 y 3, mientras que RAID no lo hará (puede recopilar tal RAID, pero será una perversión). Si hay incluso más discos, entonces es posible crear RAID 5, CEPH tiene un código de borrado analógico, que contradice los primeros conceptos de los desarrolladores y, por lo tanto, no se considera. RAID 5 supone que hay una pequeña cantidad de discos y que todos están en buenas condiciones. Si uno falla, el resto debe aguantar hasta que se reemplace el disco y se restauren los datos. CEPH, para N> = 3, fomenta el uso de unidades antiguas, en particular,Si conserva varios discos buenos para almacenar una copia de los datos, y las dos o tres copias restantes se almacenan en una gran cantidad de discos antiguos, la información estará segura, siempre y cuando los nuevos discos estén vivos: no hay problemas, y si uno de ellos se rompe, se produce una falla simultánea tres discos con una vida útil de más de cinco años, preferiblemente de diferentes servidores, un evento extremadamente improbable.



Hay una sutileza en la distribución de copias. Por defecto, se supone que los datos se dividen en más (~ 100 por disco) grupos de distribución PG, cada uno de los cuales está duplicado en algunos discos. Suponga que K = 6, N = 2, luego, si fallan dos discos, se garantiza que los datos se perderán, ya que de acuerdo con la teoría de la probabilidad, habrá al menos un PG que se ubicará en estos dos discos. Y la pérdida de un grupo hace que todos los datos del grupo sean inaccesibles. Si los discos se dividen en tres pares y solo permiten que los datos se almacenen en discos dentro de un par, entonces dicha distribución también es resistente a la falla de cualquier disco, pero si dos fallan, la probabilidad de pérdida de datos no es del 100%, sino solo 3/15, e incluso en caso de falla tres discos, solo 20/12. Por lo tanto, la entropía en la distribución de datos no contribuye a la tolerancia a fallas. También tenga en cuentaque para el servidor de archivos, la RAM libre aumenta significativamente la velocidad de respuesta. Cuanta más memoria haya en cada nodo y más memoria en todos los nodos, más rápido. Sin duda, esta es la ventaja de un clúster sobre un único servidor y, además, un hardware NAS, donde se incrusta una cantidad muy pequeña de memoria.



De ello se deduce que CEPH es una buena manera con una inversión mínima de equipos obsoletos para crear un sistema de almacenamiento confiable para decenas de TB con escalabilidad (esto, por supuesto, requerirá costos, pero pequeño en comparación con los sistemas de almacenamiento comerciales).



Implementación de clúster



Para el experimento, tome una computadora Intel DQ57TM + Intel core i3 540 + 16 GB RAM fuera de servicio. Organizamos cuatro discos de 2 TB a semejanza de RAID10, después de una prueba exitosa agregamos el segundo nodo y la misma cantidad de discos.



Instala Linux. La distribución requiere personalización y estabilidad. Debian y Suse se ajustan a los requisitos. Suse tiene un instalador más flexible que le permite deshabilitar cualquier paquete; desafortunadamente, no pude averiguar cuáles pueden ser arrojados sin dañar el sistema. Instalamos Debian a través de debootstrap buster. La opción min-base instala un sistema que no funciona y que carece de controladores. La diferencia de tamaño en comparación con la versión completa no es tan grande como para molestar. Como el trabajo se lleva a cabo en una máquina física, quiero hacer instantáneas como en máquinas virtuales. O LVM o btrfs (o xfs o zfs, la diferencia no es grande) brinda esa oportunidad. Las instantáneas no son un punto fuerte para LVM. Ponemos btrfs. Y el gestor de arranque está en el MBR. No tiene sentido obstruir un disco de 50 MB con una partición FAT,cuando puede empujarlo al área de 1 MB de la tabla de particiones y asignar todo el espacio para el sistema. Utilizado en disco 700 MB. Al parecer, cuántas instalaciones básicas de SUSE no recuerdan, aproximadamente, 1.1 o 1.4 GB.



Instalando CEPH. Ignore la versión 12 en el repositorio de Debian y enlace directamente desde el sitio 15.2.3. Seguimos las instrucciones de la sección "Instalar CEPH manualmente" con las siguientes advertencias:



  • Antes de conectar el repositorio, debe instalar los certificados gnupg wget ca
  • Después de conectar el repositorio, pero antes de instalar el clúster, se omite la instalación de paquetes: apt -y --no-install-recomienda instalar ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr
  • En el momento de la instalación, ceph-osd por razones (ya comprensibles) intentará instalar lvm2. No hay una necesidad urgente de esto. Si tiene problemas para instalar un paquete, puede abandonarlo eliminando la dependencia en / var / lib / dpkg / status para ceph-osd.



    Al escribir el artículo, se utilizó un parche menos humano:
    cat << EOF >> /var/lib/dpkg/status
    Package: lvm2
    Status: install ok installed
    Priority: important
    Section: admin
    Installed-Size: 0
    Maintainer: Debian Adduser Developers <adduser@packages.debian.org>
    Architecture: all
    Multi-Arch: foreign
    Version: 113.118
    Description: No-install
    EOF
    




Resumen del clúster



ceph-osd: es responsable de almacenar datos en el disco. Se inicia un servicio de red para cada disco, que acepta y ejecuta solicitudes para leer o escribir en objetos. Este artículo analiza el repositorio bluestore como el nivel más bajo. Los archivos de servicio se crean en el directorio de servicio que describe la ID del clúster, el almacenamiento, su tipo, etc., así como el archivo de bloque requerido; estos archivos no se modifican. Si el archivo es físico, osd creará un sistema de archivos y almacenará datos. Si el archivo es un enlace, los datos estarán en el dispositivo al que apunta el enlace. Además del dispositivo principal, se pueden especificar adicionalmente block.db - metadata (RocksDB) y block.wal - log (registro de escritura anticipada de RocksDB). Si no se especifican dispositivos adicionales, los metadatos y el registro se almacenarán en el dispositivo primario.Es muy importante hacer un seguimiento de la disponibilidad de espacio libre para RocksDB, de lo contrario, el OSD no se iniciará.

Con la creación estándar de osd en versiones anteriores, el disco se divide en dos particiones: la primera es de 100 MB xfs, montada en / var / lib / ... y contiene información de servicio, la segunda se proporciona para el almacenamiento principal. La nueva versión usa lvm.

Teóricamente, no puede montar una partición en miniatura, pero coloca los archivos en / var / lib / ..., duplicándolos en todos los nodos, y selecciona todo el disco para los datos sin crear un encabezado GPT o LVM. Al agregar OSD manualmente, debe asegurarse de que el usuario ceph tenga permisos de escritura para bloquear dispositivos con datos, y el directorio de datos de servicio se monta automáticamente en / var / lib ... si decide colocarlos allí. También es aconsejable especificar el parámetro de destino de la memoria osd para que haya suficiente memoria física.



ceph-mds. En un nivel bajo, CEPH es el almacenamiento de objetos. El almacenamiento en bloque se reduce a almacenar cada bloque de 4 MB como un objeto. El almacenamiento de archivos funciona según el mismo principio. Se crean dos grupos: uno para metadatos y el otro para datos. Se combinan en un sistema de archivos. En este momento, se crea algún tipo de registro, por lo que si elimina el sistema de archivos, pero conserva ambos grupos, no podrá restaurarlo. Hay un procedimiento para extraer archivos por bloques, no probado. El servicio ceph-mds es responsable de acceder al sistema de archivos. Se requiere una instancia separada del servicio para cada sistema de archivos. Existe una opción de "clasificación", que le permite crear una apariencia de varios sistemas de archivos en uno, que tampoco se ha probado.



ceph-mon: este servicio almacena un mapa de clúster. Incluye información sobre todos los OSD, el algoritmo de distribución PG en el OSD y, lo más importante, información sobre todos los objetos (los detalles de este mecanismo no están claros para mí: hay un directorio /var/lib/ceph/mon/.../store.db, en él hay un archivo grande, 26 MB, y en un grupo de 105K objetos, resulta un poco más de 256 bytes por objeto, creo que el monitor mantiene una lista de todos los objetos y el PG en el que se encuentran). El daño a este directorio conduce a la pérdida de todos los datos en el clúster. A partir de esto, se concluyó que CRUSH muestra cómo se ubican los PG en el OSD y cómo se ubican los objetos en el PG en la base de datos (la conclusión resultó ser incorrecta, lo que contiene exactamente requiere aclaración). Como resultado, en primer lugar, no podemos instalar el sistema en una unidad flash USB en modo RO, ya que la base de datos se escribe constantemente,Se necesita un disco adicional para estos datos (apenas más de 1 GB) y, en segundo lugar, debe tener una copia en tiempo real de esta base de datos. Si hay varios monitores, se proporciona tolerancia a fallos a expensas de ellos, pero si solo hay un monitor, máximo dos, entonces es necesario garantizar la protección de datos. Existe un procedimiento teórico para recuperar un monitor basado en datos OSD, en el momento en que resultó ser restaurado a nivel de objeto, el sistema de archivos no se ha restaurado en este momento. Hasta ahora, no puede confiar en este mecanismo.en el momento en que se ha restaurado a nivel de objeto, el sistema de archivos no se ha restaurado en el momento actual. Hasta ahora, no puede confiar en este mecanismo.en el momento en que se ha restaurado a nivel de objeto, el sistema de archivos no se ha restaurado en el momento actual. Hasta ahora, uno no puede confiar en este mecanismo.



rados-gw: exporta el almacenamiento de objetos a través de S3 y similares. Crea muchas piscinas, no está claro por qué. Especialmente no experimentado.



ceph-mgr: al instalar este servicio, se inician varios módulos. Uno de ellos es el escalado automático que no está deshabilitado. Se esfuerza por mantener la cantidad correcta de PG / OSD. Si desea controlar la proporción manualmente, puede prohibir la escala para cada grupo, pero en este caso, el módulo cae dividiendo entre 0 y el estado del clúster se convierte en ERROR. El módulo está escrito en python, y si comenta la línea necesaria en él, esto lleva a su desactivación. Los detalles son demasiado vagos para recordar.



Referencias:



Instalación de CEPH

Recuperación de una falla completa del monitor

Artículo sobre BlueStore en Ceph

Descripción de la arquitectura ceph. Sabio A. Weil



Listado de guiones:



debootstrap
blkdev=sdb1
mkfs.btrfs -f /dev/$blkdev
mount /dev/$blkdev /mnt
cd /mnt
for i in {@,@var,@home}; do btrfs subvolume create $i; done
mkdir snapshot @/{var,home}
for i in {var,home}; do mount -o bind @${i} @/$i; done
debootstrap buster @ http://deb.debian.org/debian; echo $?
for i in {dev,proc,sys}; do mount -o bind /$i @/$i; done
cp /etc/bash.bashrc @/etc/

chroot /mnt/@ /bin/bash
echo rbd1 > /etc/hostname
passwd
uuid=`blkid | grep $blkdev | cut -d "\"" -f 2`
cat << EOF > /etc/fstab
UUID=$uuid / btrfs noatime,nodiratime,subvol=@ 0 1
UUID=$uuid /var btrfs noatime,nodiratime,subvol=@var 0 2
UUID=$uuid /home btrfs noatime,nodiratime,subvol=@home 0 2
EOF
cat << EOF >> /var/lib/dpkg/status
Package: lvm2
Status: install ok installed
Priority: important
Section: admin
Installed-Size: 0
Maintainer: Debian Adduser Developers <adduser@packages.debian.org>
Architecture: all
Multi-Arch: foreign
Version: 113.118
Description: No-install

Package: sudo
Status: install ok installed
Priority: important
Section: admin
Installed-Size: 0
Maintainer: Debian Adduser Developers <adduser@packages.debian.org>
Architecture: all
Multi-Arch: foreign
Version: 113.118
Description: No-install
EOF

exit
grub-install --boot-directory=@/boot/ /dev/$blkdev
init 6

apt -yq install --no-install-recommends linux-image-amd64 bash-completion ed btrfs-progs grub-pc iproute2 ssh  smartmontools ntfs-3g net-tools man
exit
grub-install --boot-directory=@/boot/ /dev/$blkdev
init 6




apt -yq install --no-install-recommends gnupg wget ca-certificates
echo 'deb https://download.ceph.com/debian-octopus/ buster main' >> /etc/apt/sources.list
wget -q -O- 'https://download.ceph.com/keys/release.asc' | apt-key add -
apt update
apt -yq install --no-install-recommends ceph-common ceph-mon

echo 192.168.11.11 rbd1 >> /etc/hosts
uuid=`cat /proc/sys/kernel/random/uuid`
cat << EOF > /etc/ceph/ceph.conf
[global]
fsid = $uuid
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
mon allow pool delete = true
mon host = 192.168.11.11
mon initial members = rbd1
mon max pg per osd = 385
osd crush update on start = false
#osd memory target = 2147483648
osd memory target = 1610612736
osd scrub chunk min = 1
osd scrub chunk max = 2
osd scrub sleep = .2
osd pool default pg autoscale mode = off
osd pool default size = 1
osd pool default min size = 1
osd pool default pg num = 1
osd pool default pgp num = 1
[mon]
mgr initial modules = dashboard
EOF

ceph-authtool --create-keyring ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
ceph-authtool --create-keyring ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
cp ceph.client.admin.keyring /etc/ceph/
ceph-authtool --create-keyring bootstrap-osd.ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
cp bootstrap-osd.ceph.keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
ceph-authtool ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
ceph-authtool ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
monmaptool --create --add rbd1 192.168.11.11 --fsid $uuid monmap
rm -R /var/lib/ceph/mon/ceph-rbd1/*
ceph-mon --mkfs -i rbd1 --monmap monmap --keyring ceph.mon.keyring
chown ceph:ceph -R /var/lib/ceph
systemctl enable ceph-mon@rbd1
systemctl start ceph-mon@rbd1
ceph mon enable-msgr2
ceph status

# dashboard

apt -yq install --no-install-recommends ceph-mgr ceph-mgr-dashboard python3-distutils python3-yaml
mkdir /var/lib/ceph/mgr/ceph-rbd1
ceph auth get-or-create mgr.rbd1 mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-rbd1/keyring
systemctl enable ceph-mgr@rbd1
systemctl start ceph-mgr@rbd1
ceph config set mgr mgr/dashboard/ssl false
ceph config set mgr mgr/dashboard/server_port 7000
ceph dashboard ac-user-create root 1111115 administrator
systemctl stop ceph-mgr@rbd1
systemctl start ceph-mgr@rbd1




OSD ()
apt install ceph-osd

osdnum=`ceph osd create`
mkdir -p /var/lib/ceph/osd/ceph-$osdnum
mkfs -t xfs /dev/sda1
mount -t xfs /dev/sda1 /var/lib/ceph/osd/ceph-$osdnum
cd /var/lib/ceph/osd/ceph-$osdnum
ceph auth get-or-create osd.0 mon 'profile osd' mgr 'profile osd' osd 'allow *' > /var/lib/ceph/osd/ceph-$osdnum/keyring
ln -s /dev/disk/by-partuuid/d8cc3da6-02  block
ceph-osd -i $osdnum --mkfs
#chown ceph:ceph /dev/sd?2
chown ceph:ceph -R /var/lib/ceph
systemctl enable ceph-osd@$osdnum
systemctl start ceph-osd@$osdnum






La principal ventaja de marketing de CEPH es CRUSH, un algoritmo para calcular la ubicación de los datos. Los monitores distribuyen este algoritmo a los clientes, después de lo cual los clientes solicitan directamente el nodo necesario y la OSD necesaria. CRUSH proporciona una falta de centralización. Es un archivo pequeño que al menos puede imprimir y colgar en la pared. La práctica ha demostrado que CRUSH no es un mapa exhaustivo. Destruir y volver a crear monitores manteniendo todos los OSD y CRUSH no es suficiente para restaurar el clúster. A partir de esto, se concluyó que cada monitor almacena algunos metadatos sobre todo el clúster. La cantidad insignificante de estos metadatos no impone restricciones en el tamaño del clúster, pero requiere garantizar su seguridad, lo que elimina el ahorro de disco al instalar el sistema en una unidad flash USB y excluye los clústeres con menos de tres nodos.Política agresiva para desarrolladores con respecto a características opcionales. Lejos del minimalismo. Documentación a nivel: "por lo que tenemos, gracias ya, pero muy, muy escaso". Se ofrece la posibilidad de interactuar con los servicios a un nivel bajo, pero la documentación está demasiado superficialmente relacionada con este tema, por lo tanto, más bien no que sí. Prácticamente no hay posibilidad de recuperación de datos en caso de emergencia (gracias a las explicaciones de la comunidad, la posibilidad aún permanece).Prácticamente no hay posibilidad de recuperar datos en una situación de emergencia (gracias a las explicaciones de la comunidad, la posibilidad aún permanece).Casi no hay posibilidad de recuperación de datos en una situación de emergencia (gracias a las explicaciones de la comunidad, todavía hay una posibilidad).



Opciones para acciones adicionales: abandone CEPH y use los btrfs banales de discos múltiples (o xfs, zfs), aprenda nueva información sobre CEPH, que le permitirá operarlo bajo las condiciones especificadas, intente escribir su propio almacenamiento como una actualización.



All Articles