Ceph
Rendimiento del clúster de Ceph de referencia¶
Una de las preguntas más comunes que escuchamos es ” ¿Cómo compruebo si mi clúster se está ejecutando al máximo rendimiento?”. No te preguntes más: en esta guía, te guiaremos a través de algunas herramientas que puedes usar para comparar tu clúster de Ceph.
NOTA: Las ideas de este artículo se basan en la entrada de blog de Sebastian Han, la entrada de blog de TelekomCloud y las aportaciones de desarrolladores e ingenieros de Ceph.
Obtener estadísticas de rendimiento de referencia¶
Fundamentalmente, el benchmarking se basa en la comparación. No sabrá si el clúster de Ceph está funcionando por debajo de par, a menos que primero identifique cuál es su máximo rendimiento posible. Por lo tanto, antes de comenzar a comparar su clúster, debe obtener estadísticas de rendimiento de referencia para los dos componentes principales de su infraestructura de Ceph: sus discos y su red.
Comparar sus discos¶
La forma más sencilla de comparar su disco es con dd. Utilice el siguiente comando para leer y escribir un archivo, recordando agregar el parámetro oflag para omitir la caché de página del disco:shell> dd if=/dev/zero of=here bs=1G count=1 oflag=direct
Anote la última estadística proporcionada, que indica el rendimiento del disco en MB / seg. Realice esta prueba para cada disco del clúster, anotando los resultados.
Compare su red¶
Otro factor clave que afecta al rendimiento del clúster de Ceph es el rendimiento de la red. Una buena herramienta para esto es iperf, que utiliza una conexión cliente-servidor para medir el ancho de banda TCP y UDP.
Puede instalar iperf utilizando apt-get install iperf o yum install iperf.
iperf debe instalarse en al menos dos nodos del clúster. A continuación, en uno de los nodos, inicie el servidor iperf con el siguiente comando:
shell> iperf -s
En otro nodo, inicie el cliente con el siguiente comando, recordando usar la dirección IP del nodo que aloja el servidor iperf:
shell> iperf -c 192.168.1.1
Tenga en cuenta la estadística de ancho de banda en Mbits/seg, ya que indica el rendimiento máximo admitido por su red.
Ahora que tiene algunos números de referencia, puede comenzar a comparar su clúster de Ceph para ver si le está dando un rendimiento similar. La evaluación comparativa se puede realizar a diferentes niveles: puede realizar una evaluación comparativa de bajo nivel del clúster de almacenamiento en sí, o puede realizar una evaluación comparativa de alto nivel de las interfaces clave, como dispositivos de bloque y puertas de enlace de objetos. En las siguientes secciones se analiza cada uno de estos enfoques.
NOTA: Antes de ejecutar cualquiera de los puntos de referencia en secciones posteriores, elimine todas las cachés utilizando un comando como este:shell> sudo echo 3 | sudo tee /proc/sys/vm/drop_caches && sudo sync
Comparar un clúster de almacenamiento de Ceph¶
Ceph incluye el comando rados bench, diseñado específicamente para comparar un clúster de almacenamiento de RADOS. Para usarlo, cree un grupo de almacenamiento y luego use rados bench para realizar un punto de referencia de escritura, como se muestra a continuación.
El comando rados se incluye con Ceph.
shell> ceph osd pool create scbench 128 128
shell> rados bench -p scbench 10 write --no-cleanup
Esto crea un nuevo grupo llamado ‘scbench’ y luego realiza un benchmark de escritura durante 10 segundos. Observe la opción no no-cleanup, que deja algunos datos. La salida le proporciona un buen indicador de la rapidez con la que el clúster puede escribir datos.
Hay disponibles dos tipos de parámetros de lectura: seq para lecturas secuenciales y rand para lecturas aleatorias. Para realizar un punto de referencia de lectura, utilice los siguientes comandos:shell> rados bench -p scbench 10 seq
shell> rados bench -p scbench 10 rand
También puede agregar el parámetro-t para aumentar la concurrencia de lecturas y escrituras (por defecto, 16 subprocesos), o el parámetro-b para cambiar el tamaño del objeto que se está escribiendo (por defecto, 4 MB). También es una buena idea ejecutar varias copias de este punto de referencia en diferentes grupos, para ver cómo cambia el rendimiento con varios clientes.
Una vez que tenga los datos, puede comenzar a comparar las estadísticas de lectura y escritura del clúster con los parámetros de referencia de solo disco que se realizaron anteriormente, identificar cuánta brecha de rendimiento existe (si la hay) y comenzar a buscar razones.
Puede limpiar los datos de referencia dejados por el punto de referencia de escritura con este comando:
shell> rados -p scbench cleanup
Comparar un dispositivo de bloques Ceph¶
Si eres fan de los dispositivos de bloques Ceph, hay dos herramientas que puedes usar para comparar su rendimiento. Ceph ya incluye el comando rbd bench, pero también puede usar la popular herramienta de evaluación comparativa de E/S fio, que ahora viene con soporte integrado para dispositivos de bloque RADOS.
El comando rbd se incluye con Ceph. El soporte para RBD en fio es relativamente nuevo, por lo tanto, deberá descargarlo de su repositorio y luego compilarlo e instalarlo usando configure && make && make install_. Tenga en cuenta que debe instalar el paquete de desarrollo librbd-dev con apt-get install librbd-dev o yum install librbd-dev antes de compilar fio para activar su compatibilidad con RBD.
Sin embargo, antes de usar cualquiera de estas dos herramientas, cree un dispositivo de bloque utilizando los comandos a continuación:shell> ceph osd pool create rbdbench 128 128
shell> rbd create image01 --size 1024 --pool rbdbench
shell> sudo rbd map image01 --pool rbdbench --name client.admin
shell> sudo /sbin/mkfs.ext4 -m0 /dev/rbd/rbdbench/image01
shell> sudo mkdir /mnt/ceph-block-device
shell> sudo mount /dev/rbd/rbdbench/image01 /mnt/ceph-block-device
El comando rbd bench-write genera una serie de escrituras secuenciales en la imagen y mide el rendimiento de escritura y la latencia. Este es un ejemplo:
shell> rbd bench-write image01 --pool=rbdbench
O bien, puedes usar fio para comparar tu dispositivo de bloques. Un ejemplo de rbd.la plantilla fio se incluye con el código fuente fio, que realiza una prueba de escritura aleatoria 4K contra un dispositivo de bloque RADOS a través de librbd. Tenga en cuenta que deberá actualizar la plantilla con los nombres correctos para su grupo y dispositivo, como se muestra a continuación.
ioengine=rbd
clientname=admin
pool=rbdbench
rbdname=image01
rw=randwrite
bs=4k
iodepth=32
A continuación, ejecute fio de la siguiente manera:shell> fio examples/rbd.fio
Benchmark de un Ceph Object Gateway¶
Cuando se trata de benchmarking de Ceph object Gateway, no busque más que swift-bench, la herramienta de benchmarking incluida con OpenStack Swift. La herramienta swift-bench prueba el rendimiento de su clúster de Ceph simulando las solicitudes PUT y GET de los clientes y midiendo su rendimiento.
Puede instalar swift-bench utilizando pip install swift & & pip install swift-bench.
Para usar swift-bench, primero debe crear un usuario y subusuario de puerta de enlace, como se muestra a continuación:shell> sudo radosgw-admin user create --uid="benchmark" --display-name="benchmark"
shell> sudo radosgw-admin subuser create --uid=benchmark --subuser=benchmark:swift
--access=full
shell> sudo radosgw-admin key create --subuser=benchmark:swift --key-type=swift
--secret=guessme
shell> radosgw-admin user modify --uid=benchmark --max-buckets=0
A continuación, cree un archivo de configuración para swift-bench en un host cliente, como se muestra a continuación. Recuerde actualizar la URL de autenticación para reflejar la de Ceph object gateway y utilizar el nombre de usuario y las credenciales correctos.
auth = http://gateway-node/auth/v1.0
user = benchmark:swift
key = guessme
auth_version = 1.0
Ahora puede ejecutar un punto de referencia como se muestra a continuación. Utilice el parámetro-c para ajustar el número de conexiones simultáneas (este ejemplo utiliza 64) y el parámetro-s para ajustar el tamaño del objeto que se está escribiendo (este ejemplo utiliza objetos 4K). Los parámetros-n y-g controlan el número de objetos a COLOCAR y OBTENER respectivamente.shell> swift-bench -c 64 -s 4096 -n 1000 -g 100 /tmp/swift.conf
Aunque swift-bench mide el rendimiento en número de objetos / segundo, es bastante fácil convertirlo en MB / segundo, multiplicándolo por el tamaño de cada objeto. Sin embargo, debe tener cuidado de comparar esto directamente con las estadísticas de rendimiento de disco de referencia que obtuvo anteriormente, ya que otros factores también influyen en estas estadísticas, como:
- el nivel de replicación (y sobrecarga de latencia)
- escrituras completas de diario de datos (compensadas en algunas situaciones por la fusión de datos de diario)
- fsync en los OSD para garantizar la seguridad de los datos
- sobrecarga de metadatos para mantener 8897>
- la sobrecarga de latencia (red, ceph, etc.) hace que la lectura sea más importante
TIP: Cuando se trata del rendimiento de object Gateway, no hay una regla dura y rápida que pueda usar para mejorar el rendimiento fácilmente. En algunos casos, los ingenieros de Ceph han podido obtener un rendimiento superior al de la línea de base utilizando estrategias inteligentes de almacenamiento en caché y coalescencia, mientras que en otros casos, el rendimiento de object gateway ha sido inferior al rendimiento del disco debido a la latencia, la sincronización fsync y la sobrecarga de metadatos.
Conclusión¶
Hay varias herramientas disponibles para comparar un clúster de Ceph, en diferentes niveles: disco, red, clúster, dispositivo y puerta de enlace. Ahora debería tener alguna idea de cómo abordar el proceso de evaluación comparativa y comenzar a generar datos de rendimiento para su clúster. ¡Buena suerte!