Archivo de objetos
El archivo de objetos posibilita guardar archivos en un contenedor (pool) y recuperarlos por su nombre y no requiere estructura jerárquica (como carpetas). Permite además independizarnos del espacio disponible, la replicación y disponibilidad de datos.
Los archivos como objetos se guardan en "espacios" llamados pool, que es un concepto normal en sistemas de almacenamiento empresariales. El pool en Ceph es una partición lógica para archivar objetos que está distribuída a lo largo del los nodos (OSDs) para proveer resilencia. Los permisos de acceso se otorgan para cada pool y los pools pueden ser creados siguiendo diferentes criterios de acuerdo a las necesidades de las aplicaciones o de archivo.
En esta guía creamos un pool llamado datastore
en el cual guardamos el archivo /etc/passwd
con el nombre myobject
. Seguidamente recuperamos el archivo myobjet
del storage.
Ceph ya viene on varios pools creados por defecto, que podemos consultar:
# ceph osd lspools
6 leseb,7 .rgw,8 .rgw.gc,9 .rgw.control,10 .users.uid,11 .users,14 rbd,15 data,16 metadata,
el comando rados
se utiliza en el cliente para el manejo de los objetos en el pool. También se puede utilizar los comandos S3 (s3cmd) de Amazon, pues el contenedor de objetos Ceph es compatible.
Podemos observar el estado de todos los pools con:
# rados df
pool name KB objects
.rgw 0 0
.rgw.control 0 8
.rgw.gc 0 32
.users 1 1
.users.uid 1 1
data 0 0
leseb 0 0
metadata 9 21
rbd 0 0
total used 2134360 564
total avail 18323112
total space 20457472
Para generar nuestro propio pool:
# ceph osd pool create datastore 150
pool 'datastore' created
Y con rados put
subimos nuestro archivo:
# rados -p datastore put myobject /etc/passwd
Podemos listar el contenido de nuestro pool
# rados -p datastore ls
myobject
Y ver su estado, que indica que contiene 1 objeto:
# rados df -p datastore
pool name KB objects
datastore 2 1
total used 2476748 260
total avail 17980724
total space 20457472
Para descargar el archivo utilizamos rados get
y le asignamos un nombre a la copia que se generará localmente:
# rados -p datastore get myobject mypass
$ cat pass
Estos pasos los podemos repetir, por ejemplo, creando 500 archivos con este comando:
# for i in $(seq 1 500) ; do rados -p datastore put myobject$i /etc/passwd; done
y ver con rados df -p datastore
como aumenta la cantidad de archivos en el pool.