Implementação Prática do Ceph: Guia de Configuração e Uso

Introdução ao Ceph

O Ceph é um sistema de armazenamento distribuído que oferece alta escalabilidade e tolerância a falhas. Este guia aborda a configuração prática dos principais componentes: RBD (RADOS Block Device), CephFS (sistema de arquivos) e RGW (RADOS Gateway para armazenamento de objetos).

Conceitos Básicos

Componentes essenciais incluem monitores (MON), servidores de metadados (MDS) e gerenciadores (MGR). O Ceph utiliza pools de armazenamento para organizar dados, com suporte a pools de replicação e erasure coding. A autenticação é gerenciada por meio de chaves e perfis de acesso.

Criação de Dispositivos RBD

Dispositivos RBD permitem criar blocos virtuais em um pool, que são mapeados como discos em clientes. O processo envolve:

  1. Criar e inicializar um pool RBD.
  2. Configurar permissões de acesso.
  3. Criar um bloco RBD com tamanho especificado.
  4. Mapear o dispositivo no cliente.
  5. Formatar e montar o sistema de arquivos.

# Criar pool para RBD
ceph osd pool create pool_dados_rbd
ceph osd pool application enable pool_dados_rbd rbd
rbd pool init pool_dados_rbd

# Configurar permissões para um usuário
ceph auth caps client.usuario1 mon "profile rbd" osd "profile rbd"
ceph auth get client.usuario1 -o ceph.client.usuario1.keyring

# Criar bloco RBD com 2GB
rbd create -p pool_dados_rbd bloco_teste --id usuario1 --size 2G --image-format 2 --image-feature layering

# Verificar o bloco criado
rbd ls -p pool_dados_rbd
rbd info pool_dados_rbd/bloco_teste

# Mapear no cliente
rbd map --id usuario1 pool_dados_rbd/bloco_teste

# Formatar e montar
mkfs -t ext4 /dev/rbd0
mkdir /mnt/rbd_storage
mount /dev/rbd0 /mnt/rbd_storage

# Desmontar e remover
umount /mnt/rbd_storage
rbd unmap /dev/rbd0
rbd rm pool_dados_rbd/bloco_teste

Configuração do CephFS

CephFS fornece armazenamento baseado em arquivos, requerendo dois pools: um para metadados e outro para dados.


# Criar pools para CephFS
ceph osd pool create fs_metadata_pool
ceph osd pool create fs_data_pool
ceph osd pool application enable fs_metadata_pool cephfs
ceph osd pool application enable fs_data_pool cephfs

# Criar sistema de arquivos
ceph fs new meu_cephfs fs_metadata_pool fs_data_pool

# Implementar servidor MDS
ceph orch apply mds meu_cephfs --placement="1"

# Criar usuário para acesso ao CephFS
ceph auth get-or-create client.usuario_fs mon "allow r" mds "allow *" osd "allow rw pool=fs_metadata_pool,allow rw pool=fs_data_pool"
ceph auth get client.usuario_fs -o ceph.client.usuario_fs.keyring

# Gerar arquivo de chave secreta
echo "AQBSOClpbHlvMxABcJt9drXBYidXeFWIabO84w==" > secret_key_fs.key

# Montar o sistema de arquivos
mkdir /mnt/cephfs_mount
mount -t ceph -o name=usuario_fs,secretfile=/root/secret_key_fs.key 192.168.10.10:/ /mnt/cephfs_mount

# Configurar montagem permanente no fstab
echo "192.168.10.10:/  /mnt/cephfs_mount  ceph defaults,_netdev,name=usuario_fs,secretfile=/root/secret_key_fs.key 0 0" >> /etc/fstab

Configuração do RGW para Armazenamento de Objetos

RGW oferece acesso via protocolos S3 e Swift, ideal para armazenar objetos como imagens e vídeos. Configuração envolve realm, zonegroup e zone.


# Criar realm, zonegroup e zone
radosgw-admin realm create --rgw-realm=realm_objetos
radosgw-admin zonegroup create --rgw-realm realm_objetos --rgw-zonegroup grupo_zona_objetos
radosgw-admin zonegroup modify --rgw-realm realm_objetos --rgw-zonegroup grupo_zona_objetos --default --master
radosgw-admin zone create --rgw-realm realm_objetos --rgw-zonegroup grupo_zona_objetos --rgw-zone zona_objetos --master --default

# Atualizar período de configuração
radosgw-admin period update --commit --rgw-realm realm_objetos

# Implementar serviço RGW
ceph orch apply rgw servico_rgw --placement="1"

# Criar usuário S3 e subusuário Swift
radosgw-admin user create --uid=usuario_s3 --display-name=usuario_s3
radosgw-admin subuser create --uid=usuario_s3 --subuser usuario_s3:swift
radosgw-admin subuser modify --uid=usuario_s3 --subuser usuario_s3:swift --access full

# Testar acesso com Swift
pip install python-swiftclient
swift -A http://192.168.10.10/auth/1.0 -U 'usuario_s3:swift' -K CHAVE_SECRETA stat -v --insecure

# Criar bucket e fazer upload
swift -A http://192.168.10.10/auth/1.0 -U 'usuario_s3:swift' -K CHAVE_SECRETA post bucket_exemplo
swift -A http://192.168.10.10/auth/1.0 -U 'usuario_s3:swift' -K CHAVE_SECRETA upload bucket_exemplo /caminho/para/arquivo.txt

Considerações de Segurança e Acesso

Para CephFS, é possível restringir acesso a subdiretórios usando comandos como ceph fs authorize. Certifique-se de que os clientes possuam os arquivos de configuração (ceph.conf e keyring) necessários para autenticação.

Tags: Ceph RBD CephFS RGW Armazenamento de Objetos

Publicado em 6-9 19:00 por Thomas