Neste post será apresentado como realizar algumas operações com pools e pgs.
O link abaixo explica melhor o funcionamento das Pools , Pgs e objetos dentro do Cluster Ceph.
https://cephbrasil.com/ceph-como-funciona/
Para uma breve explicação os dados que são gravados no Storage são dividos em objetos, onde são agrupados em diversas PGs e são distribuídos para as OSDs via algoritmo Crush.

1. Requisitos
Laboratório do Site
Deploy do Ceph
Cliente RBD
2. Pools e Pgs
Listando as pools no Cluster.
[ceph@mon1 ~]$ sudo ceph osd lspools
1 rbd
Criando a pool de teste com 128 pgs
# ceph osd pool create <POOL NAME> <PG NUMBER> <PGP NUMBER>
[ceph@mon1 ~]$ sudo ceph osd pool create poola 128 128
pool 'poola' created
Executamos o comando ceph osd pool ls detail para ver detalhes do pool.

Com o output acima podemos considerar :
- replicated size – Número de replicas configuradas para as pools , controlado pela opção “osd pool default size = 2” no arquivo ceph.conf. Para um ambiente de produção o valor default é 3 .
- min_size – Garante o números de réplicas que eu posso escrever antes de entrar em um estado degradado e também controlado pela opção “osd min default size = 1” no arquivo ceph.conf..
Para um ambiente de produção o valor é 2. - pg_num – Nossa pool foi criada com 128 pgs e replica de 2 , o que signica que temos um total de 256.
- pgp_num – É o número de pgs que serão consideradas para posicionamento pelo algoritmo crush , por padrão é utilizado o mesmo valor de pgs.
Podemos alterar o número de pgs ou replicas com os comandos :
ceph osd pool create {pool-name} pg_num
ceph osd pool set {poolname} size {num-replicas}
Lembrando que quando alteramos os valores de réplica ou pgs automaticamente será rebalanceado e isso pode causar perda de performance em um cenário em produção.
Para deletarmos a pool precisamos injetar uma opção temporária no serviço do mon , que por padrão vem false para garantir que não haja erros. Após o restart do serviço esta opção não ficará disponível tendo que aplicar novamente caso necessário.
sudo ceph tell mon.\* injectargs '--mon-allow-pool-delete=true'
Removendo a pool poola
[ceph@mon1 ~]$ sudo ceph osd pool delete poola poola --yes-i-really-really-mean-it
pool 'poola' removed
3. Manipulando objetos
Vamos criar alguns arquivos na pool rbd que está com réplica de 3 configurada e utilizaremos a imagem montada rbd1 na vm client para gerarmos alguns objetos.

[root@client labrbd]# cd /opt/labrbd
[root@client labrbd]# for i in seq $(1 50) ; do echo file$i ; done
Listando objetos a partir de um servidor mon o comando rados ls -p <POOL NAME>

Mapeando de onde está o objeto ceph osd map <POOL NAME> <OBJECT NAME>
sudo ceph osd map rbd rbd_data.10936b8b4567.0000000000000081

Analisando o output acima observamos que o objeto se encontra :
- pool – RBD
- pg 1.20
- OSDs 2, 3 e 4
Vamos executar o comando ceph pg <PG ID> query para confirmar as OSDs envolvidas.
[ceph@mon1 ceph]$ sudo ceph pg 1.20 query
...
{
"state": "active+clean",
"snap_trimq": "[]",
"snap_trimq_len": 0,
"epoch": 66,
"up": [
2,
4,
3
],
"acting": [
2,
4,
3
],
...
Com o comando ceph osd find <OSD ID> identificamos os hosts envolvidos.
[ceph@mon1 ceph]$ sudo ceph osd find 2
{
"osd": 2,
"ip": "10.10.10.105:6800/5319",
"crush_location": {
"host": "osd3",
"root": "default"
}
}
[ceph@mon1 ceph]$ sudo ceph osd find 4
{
"osd": 4,
"ip": "10.10.10.104:6804/5533",
"crush_location": {
"host": "osd2",
"root": "default"
}
}
[ceph@mon1 ceph]$ sudo ceph osd find 3
{
"osd": 3,
"ip": "10.10.10.103:6804/5305",
"crush_location": {
"host": "osd1",
"root": "default"
}
}
Logando em um storage OSD vamos observar o objeto alocado no diretório do servidor .
[ceph@osd1 ~]$ ls /var/lib/ceph/osd/ceph-3/current/1.20_head/
__head_00000020__1 rbd\udata.10936b8b4567.0000000000000081__head_A1122520__1
[ceph@osd2 ~]$ ls /var/lib/ceph/osd/ceph-4/current/1.20_head/
__head_00000020__1 rbd\udata.10936b8b4567.0000000000000081__head_A1122520__1
[ceph@osd3 ~]$ ls /var/lib/ceph/osd/ceph-2/current/1.20_head/
__head_00000020__1 rbd\udata.10936b8b4567.0000000000000081__head_A1122520__1
Em nosso próximo post será apresentado como realizamos o cálculo de pgs por pool.