Neste post será apresentado como  realizar algumas operações com pools e pgs de forma prática.

O link abaixo explica melhor o conceito 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