18 Gestión de repositorios de almacenamiento #
Ceph almacena los datos en repositorios. Los repositorios son grupos lógicos en los que se almacenan objetos. Al distribuir un clúster por primera vez sin crear un repositorio, Ceph utiliza los repositorios por defecto para almacenar los datos. Los siguientes aspectos importantes están relacionados con los repositorios de Ceph:
Resiliencia: los repositorios de Ceph proporcionan resiliencia al replicar o codificar los datos que contienen. Cada repositorio se puede definir como
replicated
(replicado) o comoerasure coding
(codificación de borrado). En el caso de los repositorios replicados, debe definir el número de réplicas o copias que tendrá cada objeto de datos en el repositorio. El número de copias (OSD, depósitos/hojas de CRUSH) que se pueden perder es uno menos que el número de réplicas. Con la codificación de borrado, se definen los valores dek
ym
, dondek
es el número de fragmentos de datos ym
es el número de fragmentos de codificación. Para los repositorios codificados de borrado, es el número de fragmentos de codificación lo que determina cuántos OSD (depósitos/hojas de CRUSH) se pueden perder sin perder datos.Grupos de colocación: puede establecer el número de grupos de colocación del repositorio. En una configuración típica, se utilizan aproximadamente 100 grupos de colocación por OSD para proporcionar el equilibrio óptimo sin necesidad de utilizar demasiados recursos informáticos. Al configurar varios repositorios, asegúrese de que ha definido un número razonable de grupos de colocación para el conjunto de repositorio y clúster.
Reglas de CRUSH: cuando se almacenan datos en un repositorio, los objetos y sus réplicas (o los fragmentos en caso de los repositorios codificados de borrado) se colocan según el conjunto de reglas de CRUSH asignado al repositorio. Puede crear una regla de CRUSH personalizada para el repositorio.
Instantáneas: al crear instantáneas con
ceph osd pool mksnap
, se realiza una instantánea de un repositorio concreto.
Para organizar los datos en repositorios, puede enumerar, crear y eliminar repositorios. También puede ver las estadísticas de uso para cada repositorio.
18.1 Creación de un repositorio #
Los repositorios se pueden crear de tipo replicated
(replicado) para recuperar los OSD perdidos manteniendo varias copias de los objetos o de tipo erasure
(de borrado) para obtener capacidad de tipo RAID5/6 generalizada. Los repositorios replicados requieren más almacenamiento en bruto, mientras que los repositorios codificados de borrado requieren menos. El tipo por defecto es replicated
. Para obtener más información sobre los repositorios codificados de borrado, consulte el Capítulo 19, Repositorios codificados de borrado.
Para crear un repositorio replicado, ejecute:
cephuser@adm >
ceph osd pool create POOL_NAME
El escalador automático se encargará del resto de los argumentos opcionales. Para obtener más información, consulte la Sección 17.4.12, “Habilitación del escalador automático de grupos de colocación”.
Para crear un repositorio codificado de borrado, ejecute:
cephuser@adm >
ceph osd pool create POOL_NAME erasure CRUSH_RULESET_NAME \
EXPECTED_NUM_OBJECTS
El comando ceph osd pool create
puede fallar si supera el límite de grupos de colocación por OSD. El límite se establece con la opción mon_max_pg_per_osd
.
- POOL_NAME
Nombre del repositorio. Debe ser único. Esta opción es obligatoria.
- POOL_TYPE
El tipo de repositorio, que puede ser
replicated
(replicado) para recuperar los OSD perdidos manteniendo varias copias de los objetos oerasure
(de borrado) para obtener un tipo de capacidad RAID5 generalizada. Los repositorios replicados requieren más espacio de almacenamiento en bruto, pero implementan todas las operaciones de Ceph. Los repositorios de borrado requieren menos espacio de almacenamiento en bruto, pero solo implementan un subconjunto de las operaciones disponibles. El tipoPOOL_TYPE
por defecto esreplicated
.- CRUSH_RULESET_NAME
El nombre de conjunto de reglas de CRUSH para el repositorio. Si el conjunto de reglas especificado no existe, se producirá un error -ENOENT al crear los repositorios replicados. Para los repositorios replicados es el conjunto de reglas especificado por la variable de configuración
osd pool default CRUSH replicated ruleset
. Este conjunto de reglas debe existir. Para los repositorios de borrado, es "erasure-code" si se utiliza el perfil de código de borrado por defecto o POOL_NAME de lo contrario. Este conjunto de reglas de creará de forma implícita si aún no existe.- erasure_code_profile=perfil
Solo para los repositorios codificados de borrado. Utiliza el perfil de código de borrado. Debe ser un perfil existente, según se haya definido mediante
osd erasure-code-profile set
.NotaSi por algún motivo el escalador automático se ha inhabilitado (
pg_autoscale_mode
desactivado) en un repositorio, puede calcular y definir el número de grupos de colocación manualmente. Consulte la Sección 17.4, “Grupos de colocación” (Grupos de colocación) para obtener información sobre cómo calcular el número adecuado de grupos de colocación para su repositorio.- EXPECTED_NUM_OBJECTS
El número previsto de objetos para este repositorio. Al definir este valor (junto con un valor negativo en
filestore merge threshold
), la división de carpetas del grupo de colocación se produce en el momento de la creación del repositorio. Esto evita el impacto de latencia cuando se divide una carpeta en tiempo de ejecución.
18.2 Listado de repositorios #
Para enumerar los repositorios de su clúster, ejecute:
cephuser@adm >
ceph osd pool ls
18.3 Cambio de nombre de un repositorio #
Para renombrar un repositorio, ejecute:
cephuser@adm >
ceph osd pool rename CURRENT_POOL_NAME NEW_POOL_NAME
Si ha renombrado de un repositorio y existen permisos por repositorio para los usuarios autenticados, debe actualizar los permisos con el nuevo nombre de repositorio.
18.4 Supresión de un repositorio #
Los repositorios pueden contener datos importantes. Si suprime un repositorio, desaparecerán todos sus datos y no habrá forma de recuperarlo.
Dado que la supresión accidental de un repositorio es un peligro real, Ceph implementa dos mecanismos que impiden suprimir los repositorios. Para suprimir un repositorio, primero es necesario inhabilitar ambos mecanismos.
El primero es el indicador NODELETE
. Todos los repositorios lo tienen y el valor por defecto es "false". Para averiguar el valor de este indicador en un repositorio, ejecute el siguiente comando:
cephuser@adm >
ceph osd pool get pool_name nodelete
Si la salida es nodelete: true
, no podrá suprimir el repositorio hasta que cambie el indicador mediante el siguiente comando:
cephuser@adm >
ceph osd pool set pool_name nodelete false
El segundo mecanismo es el parámetro de configuración para todo el clúster mon allow pool delete
, que es "false" por defecto. Esto significa que, por defecto, no es posible suprimir un repositorio. El mensaje de error que se muestra es:
Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
Para suprimir el repositorio a pesar de la configuración de seguridad, puede definir temporalmente mon allow pool delete
como "true", suprimir el repositorio y, a continuación, volver a definir el parámetro como "false":
cephuser@adm >
ceph tell mon.* injectargs --mon-allow-pool-delete=truecephuser@adm >
ceph osd pool delete pool_name pool_name --yes-i-really-really-mean-itcephuser@adm >
ceph tell mon.* injectargs --mon-allow-pool-delete=false
El comando injectargs
muestra el siguiente mensaje:
injectargs:mon_allow_pool_delete = 'true' (not observed, change may require restart)
Es una simple confirmación de que el comando se ha ejecutado correctamente. No es un error.
Si ha creado sus propios conjuntos de reglas y reglas para un repositorio que ha creado, plantéese la posibilidad de eliminar estos elementos cuando ya no necesite el repositorio.
18.5 Otras operaciones #
18.5.1 Asociación de repositorios a una aplicación #
Para utilizar los grupos, debe asociarlos a una aplicación. Los repositorios que se utilizarán con CephFS y los creados automáticamente por Object Gateway se asocian de forma automática.
En otros casos, se puede asociar manualmente un nombre de aplicación de formato libre al repositorio:
cephuser@adm >
ceph osd pool application enable POOL_NAME APPLICATION_NAME
CephFS utiliza el nombre de aplicación cephfs
, el dispositivo de bloques RADOS utiliza rbd
y Object Gateway utiliza rgw
.
Un repositorio se puede asociar a varias aplicaciones y cada aplicación puede tener sus propios metadatos. Para mostrar la aplicación (o las aplicaciones) asociadas a un repositorio, emita el comando siguiente:
cephuser@adm >
ceph osd pool application get pool_name
18.5.2 Definición de cuotas de repositorio #
Puede definir cuotas de repositorio para el número máximo de bytes o el número máximo de objetos por repositorio.
cephuser@adm >
ceph osd pool set-quota POOL_NAME MAX_OBJECTS OBJ_COUNT MAX_BYTES BYTES
Por ejemplo:
cephuser@adm >
ceph osd pool set-quota data max_objects 10000
Para eliminar una cuota, establezca su valor en 0.
18.5.3 Visualización de estadísticas de repositorios #
Para mostrar las estadísticas de uso de un repositorio, ejecute:
cephuser@adm >
rados df
POOL_NAME USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRADED RD_OPS RD WR_OPS WR USED COMPR UNDER COMPR
.rgw.root 768 KiB 4 0 12 0 0 0 44 44 KiB 4 4 KiB 0 B 0 B
cephfs_data 960 KiB 5 0 15 0 0 0 5502 2.1 MiB 14 11 KiB 0 B 0 B
cephfs_metadata 1.5 MiB 22 0 66 0 0 0 26 78 KiB 176 147 KiB 0 B 0 B
default.rgw.buckets.index 0 B 1 0 3 0 0 0 4 4 KiB 1 0 B 0 B 0 B
default.rgw.control 0 B 8 0 24 0 0 0 0 0 B 0 0 B 0 B 0 B
default.rgw.log 0 B 207 0 621 0 0 0 5372132 5.1 GiB 3579618 0 B 0 B 0 B
default.rgw.meta 961 KiB 6 0 18 0 0 0 155 140 KiB 14 7 KiB 0 B 0 B
example_rbd_pool 2.1 MiB 18 0 54 0 0 0 3350841 2.7 GiB 118 98 KiB 0 B 0 B
iscsi-images 769 KiB 8 0 24 0 0 0 1559261 1.3 GiB 61 42 KiB 0 B 0 B
mirrored-pool 1.1 MiB 10 0 30 0 0 0 475724 395 MiB 54 48 KiB 0 B 0 B
pool2 0 B 0 0 0 0 0 0 0 0 B 0 0 B 0 B 0 B
pool3 333 MiB 37 0 111 0 0 0 3169308 2.5 GiB 14847 118 MiB 0 B 0 B
pool4 1.1 MiB 13 0 39 0 0 0 1379568 1.1 GiB 16840 16 MiB 0 B 0 B
A continuación se ofrece una descripción de cada columna:
- USED
El número de bytes utilizados por el repositorio.
- OBJECTS
El número de objetos almacenados en el repositorio.
- CLONES
El número de clones almacenados en el repositorio. Cuando se crea una instantánea y se escribe en un objeto, en lugar de modificar el objeto original, se crea su clon para que no se modifique el contenido del objeto original del que se ha hecho la instantánea.
- COPIES
El número de réplicas del objeto. Por ejemplo, si un repositorio replicado con el factor de réplica 3 tiene x objetos, normalmente tendrá 3 * x copias.
- MISSING_ON_PRIMARY
El número de objetos en estado degradado (no existen todas las copias) mientras falta la copia en el OSD primario.
- UNFOUND
El número de objetos no encontrados.
- DEGRADED
El número de objetos degradados.
- RD_OPS
El número total de operaciones de lectura pedidas para este repositorio.
- RD
El número total de bytes leídos de este repositorio.
- WR_OPS
El número total de operaciones de escritura pedidas para este repositorio.
- WR
El número total de bytes escritos en el repositorio. Tenga en cuenta que no es lo mismo que el uso del repositorio, ya que es posible escribir en el mismo objeto muchas veces. El resultado es que el uso del repositorio seguirá siendo el mismo, pero el número de bytes escritos en el repositorio aumentará.
- USED COMPR
El número de bytes asignados para datos comprimidos.
- UNDER COMPR
El número de bytes que ocupan los datos comprimidos cuando no están comprimidos
18.5.4 Obtención de valores de repositorio #
Para obtener un valor de un repositorio, ejecute el comando get
siguiente:
cephuser@adm >
ceph osd pool get POOL_NAME KEY
Puede obtener los valores de las claves indicadas en la Sección 18.5.5, “Definición de valores de repositorio”, además de las siguientes:
- PG_NUM
El número de grupos de colocación del repositorio.
- PGP_NUM
El número efectivo de grupos de colocación que se deben utilizar para calcular la colocación de los datos. El intervalo válido es igual o menor que
PG_NUM
.
Para mostrar todos los valores relacionados con un repositorio específico, ejecute:
cephuser@adm >
ceph osd pool get POOL_NAME all
18.5.5 Definición de valores de repositorio #
Para definir un valor para un repositorio, ejecute:
cephuser@adm >
ceph osd pool set POOL_NAME KEY VALUE
A continuación se muestra una lista de valores de repositorio ordenados por tipo de repositorio:
- crash_replay_interval
El número de segundos que se debe permitir a los clientes que reproduzcan peticiones reconocidas, pero no confirmadas.
- pg_num
El número de grupos de colocación del repositorio. Si añade nuevos OSD al clúster, verifique el valor de los grupos de colocación en todos los repositorios de destino para los nuevos OSD.
- pgp_num
El número efectivo de grupos de colocación que se deben utilizar para calcular la colocación de los datos.
- crush_ruleset
El conjunto de reglas que se debe utilizar para asignar la colocación en el clúster.
- hashpspool
Establece (1) o anula (0) el indicador HASHPSPOOL en un repositorio. Cuando se habilita este indicador, el algoritmo cambia para mejorar la distribución de los grupos de colocación a los OSD. Después de habilitar el indicador en un repositorio cuyo indicador HASHPSPOOL se ha definido con el valor por defecto, 0, el clúster inicia la reposición para que todos los grupos vuelvan a la colocación correcta. Tenga en cuenta que esto puede crear una carga de E/S bastante sustancial en un clúster; por lo tanto, no habilite el indicador de 0 a 1 en clústeres de producción con mucha carga.
- nodelete
Impide la eliminación del repositorio.
- nopgchange
Impide que se modifiquen los valores
pg_num
ypgp_num
del repositorio.- noscrub,nodeep-scrub
Inhabilita la depuración (profunda) de los datos para el repositorio específico, a fin de resolver un pico temporal de carga de E/S.
- write_fadvise_dontneed
Defina o anule la definición del indicador
WRITE_FADVISE_DONTNEED
en las peticiones de lectura/escritura de un repositorio determinado para omitir la colocación de datos en el caché. El valor por defecto esfalse
(falso). Se aplica tanto a los repositorios replicados como a los codificados de borrado.- scrub_min_interval
El intervalo mínimo en segundos para el borrado seguro de datos del repositorio cuando la carga del clúster es reducida. El valor
0
por defecto significa que se utiliza el valorosd_scrub_min_interval
del archivo de configuración de Ceph.- scrub_max_interval
El intervalo máximo en segundos para el borrado seguro de datos del repositorio, independientemente de la carga del clúster. El valor
0
por defecto significa que se utiliza el valorosd_scrub_max_interval
del archivo de configuración de Ceph.- deep_scrub_interval
El intervalo en segundos para el borrado seguro profundo del repositorio. El valor
0
por defecto significa que se utiliza el valorosd_deep_scrub
del archivo de configuración de Ceph.
- size
Define el número de réplicas para los objetos del repositorio. Consulte la Sección 18.5.6, “Definición del número de réplicas de objetos” para obtener más información. Solo para repositorios replicados.
- min_size
Define el número mínimo de réplicas obligatorias para E/S. Consulte la Sección 18.5.6, “Definición del número de réplicas de objetos” para obtener más información. Solo para repositorios replicados.
- nosizechange
Impide que se modifique el tamaño del repositorio. Cuando se crea un repositorio, el valor por defecto se toma del valor del parámetro
osd_pool_default_flag_nosizechange
, que esfalse
por defecto. Se aplica a los repositorios replicados solo porque no se puede cambiar el tamaño de los repositorios codificados de borrado.- hit_set_type
Habilita el seguimiento de conjuntos de resultados para repositorios de caché. Consulte este artículo sobre los filtros de Bloom para obtener más información. Esta opción puede tener los valores siguientes:
bloom
,explicit_hash
oexplicit_object
. El valor por defecto esbloom
, los demás solo se emplean para realizar pruebas.- hit_set_count
El número de conjuntos de resultados que se deben almacenar en los repositorios de caché. Cuanto mayor sea el número, más RAM consumirá el daemon
ceph-osd
. El valor por defecto es0
.- hit_set_period
La duración en segundos de un periodo de conjunto de resultados para los repositorios de caché. Cuanto mayor sea el número, más RAM consumirá el daemon
ceph-osd
. Cuando se crea un repositorio, el valor por defecto se toma del valor del parámetroosd_tier_default_cache_hit_set_period
, que es1200
por defecto. Se aplica a los repositorios replicados solo porque los repositorios codificados de borrado no se pueden usar como nivel de caché.- hit_set_fpp
La probabilidad de falsos positivos para el tipo de conjunto de resultados del filtro de Bloom. Consulte este artículo sobre los filtros de Bloom para obtener más información. El intervalo válido es de 0.0 a 1.0; el valor predeterminado es
0.05
- use_gmt_hitset
Forzar a los OSD para que utilicen marcas horarias GMT (hora del meridiano de Greenwich) al crear un conjunto de resultados para los niveles de caché. Esto garantiza que los nodos de distintas zonas horarias devuelvan el mismo resultado. El valor por defecto es
1
. Este valor no debe cambiarse.- cache_target_dirty_ratio
El porcentaje del repositorio de caché que debe contener objetos modificados (sucios) para que el agente de niveles de caché los vacíe en el repositorio de almacenamiento. El valor por defecto es
0.4
.- cache_target_dirty_high_ratio
El porcentaje del repositorio de caché que debe contener objetos modificados (sucios) para que el agente de niveles de caché los vacíe en el repositorio de almacenamiento a mayor velocidad. El valor por defecto es
0.6
.- cache_target_full_ratio
El porcentaje del repositorio de caché que debe contener objetos no modificados (limpios) para que el agente de niveles de caché los expulse del repositorio de caché. El valor por defecto es
0.8
.- target_max_bytes
Ceph comenzará a expulsar o limpiar objetos cuando se active el umbral establecido en
max_bytes
.- target_max_objects
Ceph comenzará a expulsar o limpiar objetos cuando se active el umbral establecido en
max_objects
.- hit_set_grade_decay_rate
Velocidad de caída de temperatura entre dos
hit_set
s sucesivos. El valor por defecto es20
.- hit_set_search_last_n
Deben contarse como máximo
N
apariciones enhit_set
s para calcular la temperatura. El valor por defecto es1
.- cache_min_flush_age
El tiempo (en segundos) que debe transcurrir para que el agente de niveles de caché mueva un objeto del repositorio de caché al de almacenamiento.
- cache_min_evict_age
El tiempo (en segundos) que debe transcurrir para que el agente de niveles de caché expulse un objeto del repositorio de caché.
- fast_read
Si este indicador está habilitado en los repositorios codificados de borrado, las peticiones de lectura emite sublecturas a todos los shards y espera a recibir suficientes shards que descodificar para ofrecer servicio al cliente. En el caso de los complementos de borrado jerasure e isa, cuando vuelve la respuesta
K
, la petición del cliente se atiende de inmediato con los datos descodificados a partir de estas respuestas. Este enfoque provoca más carga de CPU y menos carga de disco/red. Actualmente, este indicador solo se admite para los repositorios codificados de borrado. El valor por defecto es0
.
18.5.6 Definición del número de réplicas de objetos #
Para establecer el número de réplicas de objetos en un repositorio replicado, ejecute lo siguiente:
cephuser@adm >
ceph osd pool set poolname size num-replicas
El valor num-replicas incluye el objeto en sí. Por ejemplo, si quiere que existan el objeto y dos copias (tres instancias en total), especifique 3.
Si establece un valor de 2 en num-replicas, solo habrá una copia de los datos. Si pierde una instancia de un objeto, para recuperarlo debe poder confiar en que la otra copia no haya sufrido daños, por ejemplo, desde el último borrado seguro (consulte la Sección 17.6, “Depuración de grupos de colocación” para obtener más detalles).
Si establece solo una réplica en el repositorio, significa que habrá exactamente una única instancia del objeto de datos. Si el OSD falla, se perderán los datos. Un posible uso de un repositorio con una réplica es el almacenamiento temporal de datos durante poco tiempo.
Si se definen 4 réplicas para un repositorio, la fiabilidad aumenta en un 25%.
En el caso de dos centros de datos, debe definir al menos 4 réplicas para que un repositorio tenga dos copias en cada centro de datos. De este modo, si se pierde un centro de datos, aún existen dos copias y se puede perder un disco más sin que se pierdan datos.
Un objeto puede aceptar operaciones de E/S en modo degradado con menos réplicas de las indicadas en pool size
. Para configurar un número mínimo de réplicas necesarias para las operaciones de E/S, debe utilizar el valor min_size
. Por ejemplo:
cephuser@adm >
ceph osd pool set data min_size 2
Esto garantiza que ningún objeto del repositorio de datos recibirá operaciones de E/S con menos réplicas de las indicadas en min_size
.
Para obtener el número de réplicas de objetos, ejecute lo siguiente:
cephuser@adm >
ceph osd dump | grep 'replicated size'
Ceph enumerará los grupos con el atributo replicated size
destacado. Ceph crea por defecto dos réplicas de cada objeto (un total de tres copias o un tamaño de 3).
18.6 Migración de repositorios #
Al crear un repositorio (consulte la Sección 18.1, “Creación de un repositorio”) debe especificar sus parámetros iniciales, como el tipo de repositorio o el número de grupos de colocación. Si más adelante decide cambiar cualquiera de estos parámetros (por ejemplo, al convertir un repositorio replicado en uno codificado de borrado o al disminuir el número de grupos de colocación), debe migrar los datos del repositorio a otro cuyos parámetros se adapten a la distribución.
En esta sección se describen dos métodos de migración: un método de nivel de caché para la migración de datos de repositorios generales y un método que utiliza los subcomandos rbd migrate
para migrar imágenes RBD a un repositorio nuevo. Cada método tiene sus particularidades y limitaciones.
18.6.1 Limitaciones #
Puede usar el método de niveles de caché para migrar desde un repositorio replicado a un repositorio codificado de borrado o a otro repositorio replicado. No se admite la migración desde un repositorio codificado de borrado.
No se pueden migrar imágenes RBD ni exportaciones de CephFS de un repositorio replicado a un repositorio codificado de borrado. La razón es que los repositorios codificados de borrado no admiten
omap
, mientras que RBD y CephFS utilizanomap
para almacenar sus metadatos. Por ejemplo, el objeto de encabezado del RBD no se podrá vaciar. Sin embargo, es posible migrar los datos al repositorio codificado de borrado y dejar los metadatos en el repositorio replicado.El método
rbd migration
permite migrar imágenes con el mínimo tiempo de inactividad del cliente. Solo es necesario detener el cliente antes del paso depreparación
e iniciarlo después. Tenga en cuenta que solo un clientelibrbd
que admita esta característica (Ceph Nautilus o posterior) podrá abrir la imagen justo después del paso depreparación
, mientras que los clienteslibrbd
más antiguos o los clienteskrbd
no podrán abrir la imagen hasta que ejecute el paso deasignación
.
18.6.2 Migración mediante el nivel de caché #
El principio básico es simple: incluir el repositorio que quiere migrar en un nivel de caché en orden inverso. En el ejemplo siguiente se migra un repositorio replicado denominado "testpool" a un repositorio codificado de borrado:
Cree un nuevo repositorio codificado de borrado y llámelo "newpool". Consulte la Sección 18.1, “Creación de un repositorio” para obtener una explicación detallada de los parámetros de creación de repositorios.
cephuser@adm >
ceph osd pool create newpool erasure defaultVerifique que el anillo de claves de cliente utilizado proporcione al menos las mismas capacidades para "newpool" que para "testpool".
Ahora tiene dos repositorios: el original replicado y lleno de datos ("testpool") y el nuevo repositorio codificado de borrado vacío ("newpool"):
Figura 18.1: Repositorios antes de la migración #Configure los niveles de caché y establezca el repositorio replicado "testpool" como repositorio de caché. La opción
-force-nonempty
permite añadir un nivel de caché incluso si el repositorio ya tiene datos:cephuser@adm >
ceph tell mon.* injectargs \ '--mon_debug_unsafe_allow_tier_with_nonempty_snaps=1'cephuser@adm >
ceph osd tier add newpool testpool --force-nonemptycephuser@adm >
ceph osd tier cache-mode testpool proxyFigura 18.2: Configuración de los niveles de caché #Ejecute un traslado forzoso de todos los objetos del repositorio de caché al nuevo repositorio:
cephuser@adm >
rados -p testpool cache-flush-evict-allFigura 18.3: Limpieza de datos #Hasta que todos los datos se hayan movido al nuevo repositorio codificado de borrado, es preciso especificar una superposición para que los objetos se busquen en el repositorio antiguo:
cephuser@adm >
ceph osd tier set-overlay newpool testpoolCon la superposición, todas las operaciones se reenvían al repositorio replicado antiguo ("testpool"):
Figura 18.4: Configuración de la superposición #Ahora puede configurar todos los clientes para que accedan a los objetos en el nuevo repositorio.
Una vez migrados todos los datos al repositorio codificado de borrado "newpool", elimine la superposición y el repositorio de caché antiguo ("testpool"):
cephuser@adm >
ceph osd tier remove-overlay newpoolcephuser@adm >
ceph osd tier remove newpool testpoolFigura 18.5: Migración completada #Ejecute:
cephuser@adm >
ceph tell mon.* injectargs \ '--mon_debug_unsafe_allow_tier_with_nonempty_snaps=0'
18.6.3 Migración de imágenes RBD #
A continuación se muestra la forma recomendada de migrar imágenes RBD de un repositorio replicado a otro repositorio replicado.
Detenga el acceso de los clientes (como una máquina virtual) a la imagen RBD.
Cree una nueva imagen en el repositorio de destino, con la imagen de origen como elemento padre:
cephuser@adm >
rbd migration prepare SRC_POOL/IMAGE TARGET_POOL/IMAGESugerencia: migración solo de datos a un repositorio codificado de borradoSi necesita migrar solo los datos de imagen a un nuevo repositorio codificado de borrado y dejar los metadatos en el repositorio replicado original, ejecute el siguiente comando:
cephuser@adm >
rbd migration prepare SRC_POOL/IMAGE \ --data-pool TARGET_POOL/IMAGEPermita que los clientes accedan a la imagen en el repositorio de destino.
Migre los datos al repositorio de destino:
cephuser@adm >
rbd migration execute SRC_POOL/IMAGEElimine la imagen antigua:
cephuser@adm >
rbd migration commit SRC_POOL/IMAGE
18.7 Instantáneas de repositorios #
Las instantáneas de repositorios son instantáneas del estado del repositorio Ceph completo. Con las instantáneas de repositorios, es posible conservar el historial de estado del repositorio. Crear instantáneas de repositorio consume un espacio de almacenamiento proporcional al tamaño del repositorio. Compruebe siempre que hay espacio de almacenamiento suficiente antes de crear la instantánea de un repositorio.
18.7.1 Creación de una instantánea de un repositorio #
Para crear una instantánea de un repositorio, ejecute:
cephuser@adm >
ceph osd pool mksnap POOL-NAME SNAP-NAME
Por ejemplo:
cephuser@adm >
ceph osd pool mksnap pool1 snap1
created pool pool1 snap snap1
18.7.2 Lista de las instantáneas de un repositorio #
Para mostrar las instantáneas existentes de un repositorio, ejecute:
cephuser@adm >
rados lssnap -p POOL_NAME
Por ejemplo:
cephuser@adm >
rados lssnap -p pool1
1 snap1 2018.12.13 09:36:20
2 snap2 2018.12.13 09:46:03
2 snaps
18.7.3 Eliminación de una instantánea de un repositorio #
Para eliminar una instantánea de un repositorio, ejecute:
cephuser@adm >
ceph osd pool rmsnap POOL-NAME SNAP-NAME
18.8 Compresión de datos #
BlueStore (encontrará más información en el Sección 1.4, “BlueStore”) proporciona compresión de datos sobre la marcha para ahorrar espacio en disco. La relación de compresión depende de los datos almacenados en el sistema. Tenga en cuenta que la compresión/descompresión requiere potencia de CPU adicional.
Puede configurar la compresión de datos a nivel global (consulte la Sección 18.8.3, “Opciones de compresión global”) y, a continuación, sustituir la configuración específica para cada repositorio individual.
Es posible habilitar o inhabilitar la compresión de datos del repositorio o cambiar el algoritmo y el modo de compresión en cualquier momento, independientemente de si el repositorio contiene datos o no.
No se aplicará ninguna compresión a los datos existentes después de habilitar la compresión del repositorio.
Después de inhabilitar la compresión de un repositorio, todos sus datos se descomprimirán.
18.8.1 Habilitación de la compresión #
Para habilitar la compresión de datos para un repositorio denominado POOL_NAME, ejecute el siguiente comando:
cephuser@adm >
ceph
osd pool set POOL_NAME compression_algorithm COMPRESSION_ALGORITHMcephuser@adm >
ceph
osd pool set POOL_NAME compression_mode COMPRESSION_MODE
Para inhabilitar la compresión de datos para un repositorio, utilice "none" como algoritmo de compresión:
cephuser@adm >
ceph
osd pool set POOL_NAME compression_algorithm none
18.8.2 Opciones de compresión de repositorios #
Este es un listado completo de las opciones de compresión:
- compression_algorithm
Los valores posibles son
none
,zstd
ysnappy
. El valor por defecto essnappy
.El algoritmo de compresión utilizado depende del caso de uso específico. A continuación s ofrecen varias recomendaciones:
Utilice el valor por defecto,
snappy
, si no tiene una buena razón para cambiarlo.zstd
ofrece una buena relación de compresión, pero causa una alta sobrecarga de CPU cuando comprime pequeñas cantidades de datos.Ejecute una comparativa de estos algoritmos en una muestra de sus datos reales y observe el uso de CPU y memoria en su clúster.
- compression_mode
Los valores posibles son
none
,aggressive
,passive
yforce
. El valor por defecto esnone
.none
: no comprimir nuncapassive
: comprimir si se sugiereCOMPRESSIBLE
aggressive
: comprimir a menos que se sugieraINCOMPRESSIBLE
force
: comprimir siempre
- compression_required_ratio
Valor: doble, proporción = SIZE_COMPRESSED / SIZE_ORIGINAL. El valor por defecto es
0.875
, lo que significa que si la compresión no reduce el espacio ocupado en al menos un 12,5 %, el objeto no se comprimirá.Los objetos por encima de esta proporción no se almacenarán comprimidos, ya que el beneficio neto es bajo.
- compression_max_blob_size
Valor: entero sin firmar, tamaño en bytes. Por defecto:
0
El tamaño máximo de los objetos comprimidos.
- compression_min_blob_size
Valor: entero sin firmar, tamaño en bytes. Por defecto:
0
El tamaño mínimo de los objetos comprimidos.
18.8.3 Opciones de compresión global #
Las siguientes opciones de configuración se pueden definir en la configuración de Ceph y se aplican a todos los OSD y no a un solo repositorio. La configuración específica del repositorio indicada en la Sección 18.8.2, “Opciones de compresión de repositorios” tendrá prioridad.
- bluestore_compression_algorithm
Consulte la compression_algorithm
- bluestore_compression_mode
Consulte la compression_mode
- bluestore_compression_required_ratio
Consulte la compression_required_ratio
- bluestore_compression_min_blob_size
Valor: entero sin firmar, tamaño en bytes. Por defecto:
0
El tamaño mínimo de los objetos comprimidos. La configuración se omite por defecto si se usa
bluestore_compression_min_blob_size_hdd
ybluestore_compression_min_blob_size_ssd
. Tiene prioridad cuando se define un valor distinto a cero.- bluestore_compression_max_blob_size
Valor: entero sin firmar, tamaño en bytes. Por defecto:
0
El tamaño máximo de los objetos que se comprimen antes de dividirse en fragmentos más pequeños. La configuración se omite por defecto si se usa
bluestore_compression_max_blob_size_hdd
ybluestore_compression_max_blob_size_ssd
. Tiene prioridad cuando se define un valor distinto a cero.- bluestore_compression_min_blob_size_ssd
Valor: entero sin firmar, tamaño en bytes. Por defecto:
8K
Tamaño mínimo de los objetos comprimidos y almacenados en la unidad de estado sólido.
- bluestore_compression_max_blob_size_ssd
Valor: entero sin firmar, tamaño en bytes. Por defecto:
64K
El tamaño máximo de los objetos que se comprimen y se almacenan en unidades de estado sólido antes de dividirse en fragmentos más pequeños.
- bluestore_compression_min_blob_size_hdd
Valor: entero sin firmar, tamaño en bytes. Por defecto:
128K
Tamaño mínimo de los objetos comprimidos y almacenados en los discos duros.
- bluestore_compression_max_blob_size_hdd
Valor: entero sin firmar, tamaño en bytes. Por defecto:
512K
El tamaño máximo de los objetos que se comprimen y se almacenan en discos duros antes de dividirse en fragmentos más pequeños.