Cómo configurar el clúster Ceph de nodo único
Ceph está diseñado para ser un sistema de almacenamiento escalable y tolerante a fallas. Esto significa que en un entorno de producción, se espera que, como mínimo, haya tres nodos Ceph en un clúster. Si solo puede pagar un solo nodo por ahora, o si solo necesita un solo nodo Ceph para fines de prueba, se encontrará con algunos problemas. Un clúster Ceph de un solo nodo se considerará a sí mismo en un estado degradado, ya que de forma predeterminada, buscará otro nodo para replicar los datos. No podrás usarlo. Este instructivo le mostrará cómo reconfigurar un único nodo Ceph para que sea utilizable. Esto funcionará si su Ceph Node tiene al menos dos OSD disponibles. Hemos agregado una introducción a ceph en nuestro artículo anterior para comenzar.
El mapa CRUSH
CRUSH es el algoritmo que utiliza Ceph para determinar cómo y dónde colocar los datos para satisfacer las reglas de replicación y resiliencia. El mapa CRUSH le da a CRUSH una vista de cómo se ve físicamente el clúster y las reglas de replicación para cada nodo. Obtendremos una copia del mapa CRUSH del nodo Ceph, lo editaremos para replicar datos solo dentro de los OSD del nodo, luego lo volveremos a insertar en el nodo Ceph, sobrescribiendo el mapa CRUSH existente. Esto permitirá que el clúster Ceph de un solo nodo funcione en un estado limpio, listo y dispuesto a atender las solicitudes.
Obtener el mapa CRUSH
Acceda a su nodo de administración de ceph. Este también puede ser su nodo de almacenamiento Ceph, si así fue como se instaló. Todos los siguientes comandos se ejecutan desde el nodo de administración de Ceph.
Extraiga el mapa CRUSH del clúster y guárdelo como un archivo llamado «crush_map_compressed»
ceph osd getcrushmap -o crush_map_compressed
Editar el MAPA DE CRUSH
Este es un archivo binario comprimido que Ceph interpreta directamente, necesitaremos descomprimirlo en un formato de texto que podamos editar. El siguiente comando descomprime el archivo CRUSH Map que extrajimos y guarda el contenido en un archivo llamado «crush_map_decompressed»
crushtool -d crush_map_compressed -o crush_map_decompressed
Ahora abra el archivo CRUSH descomprimido con su editor de texto favorito. Suponiendo que el nodo Ceph se llame «Storage-01» y que tenga 6 OSD, el mapa CRUSH debería tener un aspecto similar a esto:
# begin crush map tunable choose_local_tries 0 tunable choose_local_fallback_tries 0 tunable choose_total_tries 50 tunable chooseleaf_descend_once 1 tunable chooseleaf_vary_r 1 tunable straw_calc_version 1 # devices device 0 osd.0 device 1 osd.1 device 2 osd.2 device 3 osd.3 device 4 osd.4 device 5 osd.5 # types type 0 osd type 1 host type 2 chassis type 3 rack type 4 row type 5 pdu type 6 pod type 7 room type 8 datacenter type 9 region type 10 root # buckets host Storage-01 { id -2 # do not change unnecessarily # weight 21.792 alg straw hash 0 # rjenkins1 item osd.0 weight 3.632 item osd.1 weight 3.632 item osd.2 weight 3.632 item osd.3 weight 3.632 item osd.4 weight 3.632 item osd.5 weight 3.632 } root default { id -1 # do not change unnecessarily # weight 21.792 alg straw hash 0 # rjenkins1 item Storage-01 weight 21.792 } # rules rule replicated_ruleset { ruleset 0 type replicated min_size 1 max_size 10 step take default step chooseleaf firstn 0 type host step emit } # end crush map
Preste atención a la sección inferior que comienza con «# reglas», que es la sección que define cómo se realiza la replicación en todo el clúster.
Toma esta linea
step chooseleaf firstn 0 type host
y cambie el «host» a «osd». Debe tener un aspecto como este:
step chooseleaf firstn 0 type osd
Cambiar esto hará que el algoritmo CRUSH se satisfaga con solo replicar datos en un OSD que no está necesariamente en un host separado. Esto permitirá que el clúster entre en un estado limpio y activo cuando los datos se hayan replicado de un OSD a otro.
Guarde el cambio.
Insertar el mapa CRUSH
Ahora que tenemos un mapa CRUSH modificado, insertémoslo nuevamente en el clúster para anular la configuración del mapa CRUSH en ejecución.
Comprímalo de nuevo:
crushtool -c crush_map_decompressed -o new_crush_map_compressed
Luego insértelo usando la herramienta ceph CLI:
ceph osd setcrushmap -i new_crush_map_compressed
Si verifica el estado del clúster inmediatamente con «ceph -s», puede detectar el nodo replicando datos en su otro OSD, pero eventualmente se verá así:
ceph@ceph-admin:~/os-cluster$ ceph -s cluster 15ac0bfc-9c48-4992-a2f6-b710d8f03ff4 health HEALTH_OK monmap e1: 1 mons at {Storage-01=192.168.0.30:6789/0} election epoch 9, quorum 0 Storage-01 osdmap e105: 6 osds: 6 up, 6 in flags sortbitwise pgmap v426885: 624 pgs, 11 pools, 77116 MB data, 12211 objects 150 GB used, 22164 GB / 22315 GB avail 624 active+clean client io 0 B/s rd, 889 B/s wr, 0 op/s rd, 0 op/s wr
Ahora muestra un estado activo + limpio.
Conclusión
Aunque está diseñado para estar en una configuración de múltiples nodos de alta disponibilidad, es posible que Ceph se reconfigure para ejecutarse como un clúster de un solo nodo. Por supuesto, el usuario debe ser consciente de los riesgos de pérdida de datos al ejecutar ceph en esa configuración. Pero esto permite realizar configuraciones de prueba y cumplir SLA de bajo nivel. Redhat ha anunciado recientemente nuevas Ceph Storage 2 con capacidades mejoradas de almacenamiento de objetos con mayor facilidad de uso.