Proxmox: Ceph crear pools diferentes con HDD y SSD
Hoy os vamos a explicar como configurar un storage Ceph diferenciando por tipos de discos.
En mi lab tengo discos HDD y SSD, unos me dan capacidad y los otros velocidad. Con lo que necesito que la carga de trabajo se reparta según necesite una cosa u otra.
Yo parto de un clúster Ceph ya montado con 3 nodos, como os expliqué:
- https://www.maquinasvirtuales.eu/instalacion-cluster-proxmox-con-3-nodos-y-cephfs/
- Disponemos para CEPHFS de 3 discos SSD de 480GB, 3 discos SSD de 240GB y 3 discos HDD de 3TB repartidos por todos los nodos
- 3 nodos físicos Proxmox VE 6.2
- Red para CEPH 10.20.0.0/24
Usaremos lsblk para revisar los discos instalados en cada nodo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
root@pve2:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 16G 0 loop loop1 7:1 0 20G 0 loop loop2 7:2 0 30G 0 loop sda 8:0 0 223.6G 0 disk ├─sda1 8:1 0 1007K 0 part ├─sda2 8:2 0 512M 0 part └─sda3 8:3 0 223.1G 0 part ├─pve-swap 253:2 0 8G 0 lvm [SWAP] ├─pve-root 253:3 0 55.8G 0 lvm / ├─pve-data_tmeta 253:4 0 1.4G 0 lvm │ └─pve-data 253:6 0 140.5G 0 lvm └─pve-data_tdata 253:5 0 140.5G 0 lvm └─pve-data 253:6 0 140.5G 0 lvm sdb 8:16 0 447.1G 0 disk └─ceph--a5d1f4c7--d20c--4225--a396--eb6fe21fb023-osd--block--1bbd7bb8--f797--49f3--98bd--2136611277fb 253:1 0 447.1G 0 lvm sdc 8:32 0 2.7T 0 disk sdd 8:48 0 223.6G 0 disk └─ceph--2a32612f--a401--434d--a07a--37afbac6b795-osd--wal--a4d05326--ab6b--4f47--8157--d7e4d48cb365 253:0 0 4.5G 0 lvm nvme0n1 259:0 0 13.4G 0 disk |
Revisamos los OSD creados y la clase de cada uno HDD o SSD:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
root@pve1:~# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 10.15164 root default -3 3.38388 host pve1 1 hdd 2.72899 osd.1 up 1.00000 1.00000 0 ssd 0.43660 osd.0 up 1.00000 1.00000 2 ssd 0.21829 osd.2 up 1.00000 1.00000 -10 3.38388 host pve2 7 hdd 2.72899 osd.7 up 1.00000 1.00000 6 ssd 0.43660 osd.6 up 1.00000 1.00000 8 ssd 0.21829 osd.8 up 1.00000 1.00000 -7 3.38388 host pve3 4 hdd 2.72899 osd.4 up 1.00000 1.00000 3 ssd 0.43660 osd.3 up 1.00000 1.00000 5 ssd 0.21829 osd.5 up 1.00000 1.00000 |
Lo podéis hacer visualmente también:
Ahora crearemos las rulesets:
ceph osd crush rule create-replicated ssdpool default host ssd
ceph osd crush rule create-replicated hddpool default host hdd
Revisamos las reglas generadas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
root@pve1:~# ceph osd crush rule dump [ { "rule_id": 0, "rule_name": "replicated_rule", "ruleset": 0, "type": 1, "min_size": 1, "max_size": 10, "steps": [ { "op": "take", "item": -1, "item_name": "default" }, { "op": "chooseleaf_firstn", "num": 0, "type": "host" }, { "op": "emit" } ] }, { "rule_id": 1, "rule_name": "ssdpool", "ruleset": 1, "type": 1, "min_size": 1, "max_size": 10, "steps": [ { "op": "take", "item": -2, "item_name": "default~ssd" }, { "op": "chooseleaf_firstn", "num": 0, "type": "host" }, { "op": "emit" } ] }, { "rule_id": 2, "rule_name": "hddpool", "ruleset": 2, "type": 1, "min_size": 1, "max_size": 10, "steps": [ { "op": "take", "item": -6, "item_name": "default~hdd" }, { "op": "chooseleaf_firstn", "num": 0, "type": "host" }, { "op": "emit" } ] } ] |
Vemos las clases de discos en el sistema:
1 2 3 4 5 |
root@pve1:~# ceph osd crush class ls [ "ssd", "hdd" ] |
Creamos los pools para cada tipo de disco:
1 2 3 4 |
root@pve1:~# ceph osd pool create ssdpool 128 128 ssdpool pool 'ssdpool' created root@pve1:~# ceph osd pool create hddpool 256 256 hddpool pool 'hddpool' created |
Habilitamos cephfs para cada pool:
1 2 3 4 |
root@pve2:~# ceph osd pool application enable ssdpool cephfs enabled application 'cephfs' on pool 'ssdpool' root@pve2:~# ceph osd pool application enable hddpool cephfs enabled application 'cephfs' on pool 'hddpool' |
Revisamos los pools:
1 2 3 |
root@pve1:~# ceph osd pool ls detail pool 1 'ssdpool' replicated size 3 min_size 2 crush_rule 1 object_hash rjenkins pg_num 128 pgp_num 128 autoscale_mode warn last_change 42 flags hashpspool stripe_width 0 pool 2 'hddpool' replicated size 3 min_size 2 crush_rule 2 object_hash rjenkins pg_num 256 pgp_num 256 autoscale_mode warn last_change 45 flags hashpspool stripe_width 0 |
Consultamos el volcado en los pools, que depende del número de OSDs:
1 |
ceph pg dump | grep "^[1-2]" |
Instalamos iostat en Proxmox para las pruebas de ver cómo se comportan los discos una vez generadas las reglas para SSD y HDD:
1 |
apt-get install sysstat -y |
Ahora realizaremos pruebas de escritura para comprobar que funcionan bien, abrimos dos consolas una con IOSTAT y otra con el comando para cada pool:
1 2 3 |
rados bench -p ssdpool 10 write rados bench -p hddpool 10 write |
Y una vez validado con
1 |
<b>iostat -xtc</b> |
Ahora simplemente generamos los storage RBD para cada pool:
¿Te ha gustado la entrada SÍGUENOS EN TWITTER?
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?
Es posible separar un pool que ya esta creado y en uso?, es decir, podria eliminar unidades de la OSD para posteriormente crear un pool diferente y agregar las unidades a este?
Hola Roberto, explícame la foto completa e intento ayudarte. ¿No es posible aumentar el mismo Pool con nuevos discos? ¿Lo queréis hacer para ampliar tamaño? Un saludo