Ceph — Optimización y Planificación de Capacidad¶
Resumen¶
Tuning mínimo para clústeres Ceph con cargas de bases de datos y bloques de alto rendimiento.
Checklist rápido (bases de datos sobre RBD)¶
- Pools: réplicas
size=3(mínimomin_size=2),pg_numcalculado por OSDs y tamaño; evitar EC para OLTP. - WAL/DB en NVMe: separar
bluestore_block_db/bluestore_block_walen NVMe/SSD de baja latencia. - Red: 25/40G recomendado, MTU 9000 opcional si la red completa lo soporta;
ms_bind_ipv4=trueyms_bind_ipv6=falsesi no usas IPv6. - RBD features: habilitar
exclusive-lock, object-map, fast-diff, deep-flattenpara snapshots y replays rápidos. - Cliente (qemu/libvirt):
cache=none,io=native,discard=on, align 4K; preferirvirtio-scsicon multiqueue. - FS invitado:
ext4oxfsconnoatime; evitarbarrier=0.
Pool y RBD tuning para PostgreSQL/MySQL¶
- Crear un pool dedicado para DB OLTP (ej.
db-rbd) con réplicas,target_size_ratiopara balanceo, ypg_autoscaleractivado. - Establecer
rbd_cache=true,rbd_cache_writethrough_until_flush=false,rbd_cache_max_dirty=33554432para latencias bajas; validar con la versión de librbd. - Usar
rbd exclusive-lockyrbd feature enable ...en cada imagen; habilitardiscarden el guest para devolver bloques.
Ejemplo de ceph config set (adaptar a tu versión):
ceph config set osd osd_memory_target 4096M
ceph config set osd bluestore_cache_autotune true
ceph config set osd bluestore_compression_mode aggressive
ceph config set mon mon_osd_down_out_interval 600
Prueba rápida con fio desde un host (imagen mapeada como bloque):
fio --name=db-randrw --filename=/dev/rbd0 --ioengine=libaio --direct=1 \
--bs=8k --rw=randrw --rwmixread=70 --iodepth=32 --numjobs=4 --time_based \
--runtime=120 --group_reporting
Monitorización y mantenimiento¶
- Grafana: paneles de latencia
osd.op_r_lat, op_w_lat,client_io_ratey saturación de NIC. - Alertas:
pg_degraded,pg_backfill,nearfullyslow opscon umbrales conservadores. - Revisar rebalanceos: si son frecuentes, ajusta
mon_osd_min_down_reportersy verifica CRUSH/weights.