O processo de armazenamento no Ceph envolve dividir um arquivo em objetos. Cada objeto é mapeado para um Placement Group (PG), que por sua vez é atribuído a um conjunto de OSDs (Object Storage Daemons) através do algorimto CRUSH.
Fluxo de Dados
Durante uma gravação, o cliente calcula o PG com base no ID do objeto. O algoritmo CRUSH determina os OSDs responsáveis, com um OSD pirncipal liderando a operação e replicando para os secundários. Leituras sempre ocorrem no OSD principal.
Criação e Configuração de Pools
Um pool agrupa múltiplos PGs, que mapeiam conjuntos de OSDs. Sua criação é feita com o comando:
ceph osd pool create <nome_do_pool> <pg_num> <pgp_num> <tipo> <perfil_erasure>
Exemplo:
ceph osd pool create armazenamento 64 64 replicated
Detalhes do pool podem ser verificados com:
ceph osd pool ls detail | grep armazenamento
Parâmetros importantes encluem size (fator de replicação) e min_size (mínimo de réplicas para operação).
Ajuste de PGs
O número de PGs (pg_num) afeta a distribuição dos objetos. Ao aumentá-lo, os PGs existentes são divididos (pgp_num), e o CRUSH redistribui os objetos. Isso otimiza a distribuição de carga entre os OSDs.
Gerenciamento de Objetos
Utilize a ferramenta rados para operações com objetos:
# Upload
rados -p armazenamento put arquivo_dados /caminho/local
# Listar objetos
rados -p armazenamento ls
# Download
rados -p armazenamento get arquivo_dados ./local_dados
# Remover
rados -p armazenamento rm arquivo_dados
Para verificar o mapeamento de um objeto:
ceph osd map armazenamento arquivo_dados
Limites de Quota
Defina limites de armazenamento com:
ceph osd pool set-quota armazenamento max_bytes 10G
Verifique com:
ceph osd pool get-quota armazenamento
Snapshots
Crie um snapshot de um pool:
rados -p armazenamento mksnap snap_01
Para recuperar um objeto de um snapshot:
rados -p armazenamento -s snap_01 get arquivo_dados ./recuperado
Modificação de Propriedades
Altere a contagem de réplicas:
ceph osd pool set armazenamento size 4
Proteja um pool contra exclusão acidental:
ceph osd pool set armazenamento nodelete true
Pools de Correção de Erros (Erasure Code)
Pools de erasure code oferecem redundância com eficiência de espaço. Crie um perfil personalizado:
ceph osd erasure-code-profile set meu_perfil k=3 m=2 crush-failure-domain=osd
Crie um pool usando este perfil:
ceph osd pool create pool_erasure erasure meu_perfil
Neste exemplo, dados são divididos em 3 blocos, com 2 blocos de paridade, permitindo a falha de até 2 blocos.