18 Gerenciar pools de armazenamento #
O Ceph armazena dados em pools. Pools são grupos lógicos para armazenamento de objetos. Quando você implanta um cluster pela primeira vez sem criar um pool, o Ceph usa os pools padrão para armazenar os dados. Os destaques importantes a seguir são relacionados aos pools do Ceph:
Resiliência: Os pools do Ceph oferecem resiliência replicando ou codificando os dados contidos neles. É possível definir cada pool como
replicado
oucodificação de eliminação
. Para pools replicados, você ainda define o número de réplicas, ou cópias, que cada objeto de dados terá no pool. O número de cópias (OSDs, compartimentos de memória/folhas CRUSH) que podem ser perdidas é um a menos que o número de réplicas. Com a codificação de eliminação, você define os valores dek
em
, em quek
é o número de pacotes de dados em
é o número de pacotes de codificação. Para os pools codificados para eliminação, esse é o número de pacotes de codificação que determina quantos OSDs (compartimentos de memória/folhas CRUSH) podem ser perdidos sem perda de dados.Grupos de Posicionamento: Você pode definir o número de grupos de posicionamento para o pool. Uma configuração típica usa aproximadamente 100 grupos de posicionamento por OSD para possibilitar o equilíbrio ideal sem usar muitos recursos de computação. Ao configurar vários pools, tenha cuidado para garantir que você defina um número adequado de grupos de posicionamento para o pool e o cluster como um todo.
Regras CRUSH: Quando você armazena dados em um pool, os objetos e suas réplicas (ou blocos, no caso de pools codificados para eliminação) são posicionados de acordo com o conjunto de regras CRUSH mapeado para o pool. Você pode criar uma regra CRUSH personalizada para o pool.
Instantâneos: Ao criar instantâneos com
ceph osd pool mksnap
, você efetivamente captura um instantâneo de determinado pool.
Para organizar dados em pools, você pode listar, criar e remover pools. Você também pode ver as estatísticas de uso para cada pool.
18.1 Criando um pool #
Um pool pode ser criado como replicated
para recuperar OSDs perdidos mantendo várias cópias dos objetos, ou como erasure
para ter um recurso RAID5 ou 6 generalizado. Os pools replicados exigem mais armazenamento bruto, enquanto os pools codificados para eliminação exigem menos armazenamento bruto. A configuração padrão é replicated
. Para obter mais informações sobre pools codificados para eliminação, consulte o Capítulo 19, Pools codificados para eliminação.
Para criar um pool replicado, execute:
cephuser@adm >
ceph osd pool create POOL_NAME
O dimensionador automático cuidará dos argumentos opcionais restantes. Para obter mais informações, consulte a Seção 17.4.12, “Habilitando o dimensionador automático de PG”.
Para criar um pool codificado para eliminação, execute:
cephuser@adm >
ceph osd pool create POOL_NAME erasure CRUSH_RULESET_NAME \
EXPECTED_NUM_OBJECTS
O comando ceph osd pool create
poderá falhar se você exceder o limite de grupos de posicionamento por OSD. O limite é definido com a opção mon_max_pg_per_osd
.
- POOL_NAME
O nome do pool. Ele deve ser exclusivo. Essa opção é obrigatória.
- POOL_TYPE
O tipo de pool, que pode ser
replicated
para recuperação de OSDs perdidos mantendo várias cópias dos objetos, ouerasure
para aplicar um tipo de recurso RAID5 generalizado. Os pools replicados exigem mais armazenamento bruto, porém implementam todas as operações do Ceph. Os pools de eliminação exigem menos armazenamento bruto, porém implementam apenas um subconjunto das operações disponíveis. O padrão dePOOL_TYPE
éreplicated
.- CRUSH_RULESET_NAME
O nome do conjunto de regras CRUSH para este pool. Se o conjunto de regras especificado não existir, haverá falha na criação dos pools replicados com -ENOENT. Para pools replicados, trata-se do conjunto de regras especificado pela variável de configuração
osd pool default CRUSH replicated ruleset
. Esse conjunto de regras deve existir. Para pools de eliminação, trata-se do “erasure-code”, se o perfil de código de eliminação for usado ou, do contrário, POOL_NAME. Esse conjunto de regras será criado implicitamente se ainda não existir.- erasure_code_profile=profile
Apenas para pools codificados para eliminação. Use o perfil de código de eliminação. Ele deve ser um perfil existente, conforme definido por
osd erasure-code-profile set
.NotaPor qualquer motivo, se o dimensionador automático tiver sido desabilitado (
pg_autoscale_mode
definido como desativado) em um pool, você poderá calcular e definir os números de PGs manualmente. Consulte a Seção 17.4, “Grupos de posicionamento” para obter detalhes sobre como calcular um número apropriado de grupos de posicionamento para seu pool.- EXPECTED_NUM_OBJECTS
O número esperado de objetos para este pool. Ao definir esse valor (juntamente com um
limite de fusão de armazenamento de arquivos
negativo), a divisão da pasta PG é feita no momento da criação do pool. Isso evita o impacto da latência com uma divisão de pasta em tempo de execução.
18.2 Listando os pools #
Para listar os pools do cluster, execute:
cephuser@adm >
ceph osd pool ls
18.3 Renomeando um pool #
Para renomear um pool, execute:
cephuser@adm >
ceph osd pool rename CURRENT_POOL_NAME NEW_POOL_NAME
Se você renomear um pool e tiver recursos por pool para um usuário autenticado, deverá atualizar os recursos do usuário com o novo nome do pool.
18.4 Apagando um pool #
Os pools podem conter dados importantes. Apagar um pool faz com que todos os dados nele desapareçam, e não é possível recuperá-los.
Como a exclusão acidental do pool é um perigo real, o Ceph implementa dois mecanismos que impedem que os pools sejam apagados. Os dois mecanismos devem ser desabilitados antes que um pool possa ser apagado.
O primeiro mecanismo é o flag NODELETE
. Cada pool tem esse flag, e seu valor padrão é “false”. Para saber o valor desse flag em um pool, execute o seguinte comando:
cephuser@adm >
ceph osd pool get pool_name nodelete
Se a saída for nodelete: true
, não será possível apagar o pool até você mudar o flag usando o seguinte comando:
cephuser@adm >
ceph osd pool set pool_name nodelete false
O segundo mecanismo é o parâmetro de configuração de todo o cluster mon allow pool delete
, que assume como padrão “false”. Por padrão, isso significa que não é possível apagar um pool. A mensagem de erro exibida é:
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 apagar o pool mesmo com essa configuração de segurança, você pode definir mon allow pool delete
temporariamente como “true”, apagar o pool e, em seguida, reverter o parâmetro para “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
O comando injectargs
exibe a seguinte mensagem:
injectargs:mon_allow_pool_delete = 'true' (not observed, change may require restart)
Trata-se apenas de uma confirmação de que o comando foi executado com êxito. Isso não é um erro.
Se você criou seus próprios conjuntos de regras e suas próprias regras para um pool, convém removê-los quando ele não for mais necessário.
18.5 Outras operações #
18.5.1 Associando pools a um aplicativo #
Antes de usar os pools, você precisa associá-los a um aplicativo. Os pools que serão usados com o CephFS ou os pools criados automaticamente pelo Gateway de Objetos são associados de forma automática.
Nos outros casos, você pode associar manualmente um nome de aplicativo de formato livre a um pool:
cephuser@adm >
ceph osd pool application enable POOL_NAME APPLICATION_NAME
O CephFS usa o nome do aplicativo cephfs
, o Dispositivo de Blocos RADOS usa o rbd
e o Gateway de Objetos usa o rgw
.
É possível associar um pool a vários aplicativos, e cada aplicativo tem seus próprios metadados. Para listar o(s) aplicativo(s) associado(s) a um pool, emita o seguinte comando:
cephuser@adm >
ceph osd pool application get pool_name
18.5.2 Definindo cotas de pool #
Você pode definir cotas do pool para o número máximo de bytes e/ou para o número máximo de objetos por pool.
cephuser@adm >
ceph osd pool set-quota POOL_NAME MAX_OBJECTS OBJ_COUNT MAX_BYTES BYTES
Por exemplo:
cephuser@adm >
ceph osd pool set-quota data max_objects 10000
Para remover uma cota, defina o valor como 0.
18.5.3 Mostrando as estatísticas do pool #
Para mostrar as estatísticas de uso de um pool, execute:
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
Veja a seguir uma descrição de cada coluna:
- USED
Número de bytes usados pelo pool.
- OBJECTS
Número de objetos armazenados no pool.
- CLONES
Número de clones armazenados no pool. Quando um instantâneo é criado e faz gravações em um objeto, em vez de modificar o objeto original, o clone dele é criado para que o conteúdo do objeto original do qual foi feito o instantâneo não seja modificado.
- COPIES
Número de réplicas do objeto. Por exemplo, se um pool replicado com o fator de replicação 3 tiver “x” objetos, ele normalmente terá 3 * x cópias.
- MISSING_ON_PRIMARY
Número de objetos no estado degradado (nem todas as cópias existem) enquanto a cópia está ausente no OSD principal.
- UNFOUND
Número de objetos não encontrados.
- DEGRADED
Número de objetos degradados.
- RD_OPS
Número total de operações de leitura solicitadas para este pool.
- RD
Número total de bytes lidos deste pool.
- WR_OPS
Número total de operações de gravação solicitadas para este pool.
- WR
Número total de bytes gravados no pool. Observe que isso não é igual ao uso do pool porque você pode gravar no mesmo objeto várias vezes. O resultado é que o uso do pool permanecerá o mesmo, mas o número de bytes gravados no pool aumentará.
- USED COMPR
Número de bytes alocados para dados comprimidos.
- UNDER COMPR
Número de bytes que os dados comprimidos ocupam quando não são comprimidos.
18.5.4 Obtendo valores do pool #
Para obter um valor de um pool, execute o seguinte comando get
:
cephuser@adm >
ceph osd pool get POOL_NAME KEY
Você pode obter valores para as chaves listadas na Seção 18.5.5, “Definindo valores de um pool” e as chaves a seguir:
- PG_NUM
O número de grupos de posicionamento para o pool.
- PGP_NUM
O número efetivo de grupos de posicionamento a ser usado ao calcular o posicionamento dos dados. A faixa válida é igual a ou menor do que
PG_NUM
.
Para listar todos os valores relacionados a um pool específico, execute:
cephuser@adm >
ceph osd pool get POOL_NAME all
18.5.5 Definindo valores de um pool #
Para definir um valor para um pool, execute:
cephuser@adm >
ceph osd pool set POOL_NAME KEY VALUE
Veja a seguir uma lista de valores de pool classificados por tipo de pool:
- crash_replay_interval
O número de segundos para permitir que os clientes reproduzam solicitações confirmadas, mas não comprometidas.
- pg_num
O número de grupos de posicionamento para o pool. Se você adicionar novos OSDs ao cluster, verifique o valor para os grupos de posicionamento em todos os pools direcionados para os novos OSDs.
- pgp_num
O número efetivo de grupos de posicionamento a ser usado ao calcular o posicionamento dos dados.
- crush_ruleset
O conjunto de regras a ser usado para mapear o posicionamento de objetos no cluster.
- hashpspool
Defina (1) ou não defina (0) o flag HASHPSPOOL em um pool específico. A habilitação desse flag muda o algoritmo para distribuir melhor os PGs pelos OSDs. Após a habilitação desse flag em um pool com o flag HASHPSPOOL definido como o padrão 0, o cluster iniciará o provisionamento para reposicionar todos os PGs corretamente. Saiba que isso pode gerar uma carga de E/S muito significativa em um cluster, portanto, não habilite o flag de 0 a 1 em clusters de produção altamente carregados.
- nodelete
Impede que o pool seja removido.
- nopgchange
Impede que
pg_num
epgp_num
do pool sejam modificados.- noscrub,nodeep-scrub
Desabilita a depuração (profunda) dos dados para o pool específico a fim de resolver uma alta carga de E/S temporária.
- write_fadvise_dontneed
Defina ou cancele a definição do flag
WRITE_FADVISE_DONTNEED
nas solicitações de leitura/gravação de um determinado pool para ignorar a colocação dos dados em cache. O padrão éfalse
. Aplica-se aos pools tanto replicados quanto EC.- scrub_min_interval
O intervalo mínimo em segundos para depuração do pool quando a carga do cluster está baixa. O padrão
0
significa que o valorosd_scrub_min_interval
do arquivo de configuração do Ceph foi usado.- scrub_max_interval
O intervalo máximo em segundos para depuração do pool, independentemente da carga do cluster. O padrão
0
significa que o valorosd_scrub_max_interval
do arquivo de configuração do Ceph foi usado.- deep_scrub_interval
O intervalo em segundos para depuração do pool em detalhes. O padrão
0
significa que o valorosd_deep_scrub
do arquivo de configuração do Ceph foi usado.
- size
Define o número de réplicas para os objetos no pool. Consulte a Seção 18.5.6, “Definindo o número de réplicas do objeto” para obter mais detalhes. Apenas pools replicados.
- min_size
Define o número mínimo de réplicas necessárias para E/S. Consulte a Seção 18.5.6, “Definindo o número de réplicas do objeto” para obter mais detalhes. Apenas pools replicados.
- nosizechange
Impede que o tamanho do pool seja modificado. Quando um pool é criado, o valor padrão é obtido do valor do parâmetro
osd_pool_default_flag_nosizechange
, que éfalse
por padrão. Aplica-se apenas a pools replicados porque não é possível mudar o tamanho dos pools EC.- hit_set_type
Habilita o monitoramento de conjunto de acertos para pools de cache. Consulte Filtro de Bloom para obter informações adicionais. Essa opção pode ter os seguintes valores:
bloom
,explicit_hash
,explicit_object
. O padrão ébloom
, os outros valores são apenas para teste.- hit_set_count
O número de conjuntos de acertos para armazenar nos pools de cache. Quanto maior o número, mais RAM é consumida pelo daemon
ceph-osd
. O padrão é0
.- hit_set_period
A duração em segundos de um período do conjunto de acertos para os pools de cache. Quanto maior o número, mais RAM é consumida pelo daemon
ceph-osd
. Quando um pool é criado, o valor padrão é obtido do valor do parâmetroosd_tier_default_cache_hit_set_period
, que é1200
por padrão. Aplica-se apenas a pools replicados porque os pools EC não podem ser usados como camada de cache.- hit_set_fpp
A probabilidade de falsos positivos para o tipo de conjunto de acertos bloom. Consulte Filtro de Bloom para obter informações adicionais. A faixa válida é de 0,0 a 1,0. O padrão é
0,05
- use_gmt_hitset
Force os OSDs a usar marcações de horário em GMT (Horário de Greenwich) ao criar um conjunto de acertos para camadas de cache. Isso garante que os nós em fusos horários diferentes retornem o mesmo resultado. O padrão é
1
. Esse valor não deve ser mudado.- cache_target_dirty_ratio
A porcentagem do pool de cache que contém os objetos modificados antes que o agente de camadas de cache os descarregue para o pool de armazenamento de suporte. O padrão é
0.4
.- cache_target_dirty_high_ratio
A porcentagem do pool de cache que contém os objetos modificados antes que o agente de camadas de cache os descarregue para o pool de armazenamento de suporte com uma velocidade maior. O padrão é
0.6
.- cache_target_full_ratio
A porcentagem do pool de cache que contém os objetos não modificados (limpos) antes que o agente de camadas de cache os elimine do pool de cache. O padrão é
0.8
.- target_max_bytes
O Ceph iniciará o descarregamento ou a eliminação de objetos quando o limite
max_bytes
for acionado.- target_max_objects
O Ceph iniciará o descarregamento ou a eliminação de objetos quando o limite
max_objects
for acionado.- hit_set_grade_decay_rate
Taxa de redução de temperatura entre dois
hit_set
s sucessivos. O padrão é20
.- hit_set_search_last_n
Considera no máximo
N
aparições noshit_set
s para o cálculo da temperatura. O padrão é1
.- cache_min_flush_age
O tempo (em segundos) antes que o agente de camadas de cache descarregue um objeto do pool de cache para o pool de armazenamento.
- cache_min_evict_age
O tempo (em segundos) antes que o agente de camadas de cache elimine um objeto do pool de cache.
- fast_read
Se esse flag estiver habilitado nos pools com codificação de eliminação, a solicitação de leitura emitirá subleituras para todos os fragmentos e aguardará até receber fragmentos suficientes para decodificar e atender ao cliente. No caso dos plug-ins de eliminação jerasure e isa, quando as primeiras
K
respostas são retornadas, a solicitação do cliente é atendida imediatamente, usando os dados decodificados dessas respostas. Essa abordagem gera mais carga de CPU e menos carga de disco/rede. No momento, esse flag é suportado apenas para pools com codificação de eliminação. O padrão é0
.
18.5.6 Definindo o número de réplicas do objeto #
Para definir o número de réplicas do objeto em um pool replicado, execute o seguinte:
cephuser@adm >
ceph osd pool set poolname size num-replicas
O num-replicas inclui o próprio objeto. Por exemplo, se você deseja o objeto e duas cópias dele para um total de três instâncias do objeto, especifique 3.
Se você definir num-replicas como 2, haverá apenas uma cópia dos dados. Se você perder uma instância do objeto, precisará confiar que a outra cópia não foi corrompida desde a última depuração durante a recuperação, por exemplo (consulte a Seção 17.6, “Depurando grupos de posicionamento” para obter detalhes).
A definição de um pool para uma réplica significa que existe exatamente uma instância do objeto de dados no pool. Se houver falha no OSD, você perderá os dados. Um uso possível para um pool com uma réplica é armazenar dados temporários por um curto período.
A definição de 4 réplicas para um pool aumenta a confiabilidade em 25%.
No caso de dois data centers, você precisa definir pelo menos 4 réplicas para que um pool tenha duas cópias em cada data center. Desse modo, se um data center for perdido, ainda haverá duas cópias, e você poderá perder um disco sem perder os dados.
Um objeto pode aceitar E/S no modo degradado com menos do que pool size
réplicas. Para definir um número mínimo de réplicas necessárias para E/S, você deve usar a configuração min_size
. Por exemplo:
cephuser@adm >
ceph osd pool set data min_size 2
Isso garante que nenhum objeto no pool de dados receba E/S com menos do que min_size
réplicas.
Para obter o número de réplicas do objeto, execute o seguinte:
cephuser@adm >
ceph osd dump | grep 'replicated size'
O Ceph listará os pools, com o atributo replicated size
realçado. Por padrão, o Ceph cria duas réplicas de um objeto (um total de três cópias, ou um tamanho de 3).
18.6 Migração de pool #
Ao criar um pool (consulte a Seção 18.1, “Criando um pool”), você precisa especificar os parâmetros iniciais, como o tipo de pool ou o número de grupos de posicionamento. Posteriomente, se você decidir mudar qualquer um desses parâmetros, por exemplo, ao converter um pool replicado em um codificado para eliminação ou reduzir o número de grupos de posicionamento, será necessário migrar os dados do pool para outro cujos parâmetros sejam mais adequados à sua implantação.
Esta seção descreve dois métodos de migração: camada de cache para migração geral de dados do pool, e o método que usa os subcomandos rbd migrate
para migrar imagens RBD para um novo pool. Cada método tem suas especificações e limitações.
18.6.1 Limitações #
Você pode usar o método de camada de cache para migrar de um pool replicado para um pool EC ou para outro replicado. A migração de um pool EC não é suportada.
Não é possível migrar imagens RBD e exportações do CephFS de um pool replicado para um pool com EC. O motivo é que os pools EC não suportam
omap
, e o RBD e o CephFS usam oomap
para armazenar seus metadados. Por exemplo, haverá falha ao descarregar o objeto de cabeçalho do RBD. Porém, você pode migrar os dados para o pool EC, deixando os metadados no pool replicado.O método
rbd migration
permite migrar imagens com tempo de espera mínimo do cliente. Você apenas precisa parar o cliente antes da etapa depreparação
e iniciá-lo depois. Observe que apenas um clientelibrbd
com suporte a esse recurso (Ceph Nautilus ou mais recente) poderá abrir a imagem logo após a etapa depreparação
. Os clienteslibrbd
mais antigos ou os clienteskrbd
não poderão abrir a imagem antes da execução da etapa deconfirmação
.
18.6.2 Migração usando a camada de cache #
O princípio é simples: incluir o pool que você precisa migrar para a camada de cache na ordem inversa. O exemplo a seguir migra um pool replicado chamado “testpool” para um pool codificado para eliminação:
Crie um novo pool codificado para eliminação chamado “newpool”. Consulte a Seção 18.1, “Criando um pool” para obter uma explicação detalhada dos parâmetros de criação de pool.
cephuser@adm >
ceph osd pool create newpool erasure defaultVerifique se o chaveiro do cliente usado oferece pelo menos os mesmos recursos do “testpool” para o “newpool”.
Agora você tem dois pools: o “testpool” replicado original preenchido com dados e o novo “newpool” codificado para eliminação vazio:
Figura 18.1: Pools antes da migração #Configure a camada de cache e defina o pool replicado “testpool” como o pool de cache. A opção
-force-nonempty
permite adicionar uma camada de cache mesmo que o pool já tenha dados: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: Configuração da camada de cache #Force o pool de cache a mover todos os objetos para o novo pool:
cephuser@adm >
rados -p testpool cache-flush-evict-allFigura 18.3: Descarregando dados #Até todos os dados serem descarregados para o novo pool codificado para eliminação, você precisa especificar uma sobreposição para que esses objetos sejam pesquisados no pool antigo:
cephuser@adm >
ceph osd tier set-overlay newpool testpoolCom a sobreposição, todas as operações são encaminhadas para o “testpool” replicado antigo:
Figura 18.4: Definindo a sobreposição #Agora você pode alternar todos os clientes para acessar objetos no novo pool.
Após a migração de todos os dados para o “newpool” codificado para eliminação, remova a sobreposição e o pool de cache antigo “testpool”:
cephuser@adm >
ceph osd tier remove-overlay newpoolcephuser@adm >
ceph osd tier remove newpool testpoolFigura 18.5: Migração concluída #Execute:
cephuser@adm >
ceph tell mon.* injectargs \ '--mon_debug_unsafe_allow_tier_with_nonempty_snaps=0'
18.6.3 Migrando imagens RBD #
Veja a seguir a maneira recomendada de migrar imagens RBD entre dois pools replicados.
Impeça os clientes (como uma máquina virtual) de acessar a imagem RBD.
Crie uma nova imagem no pool de destino, com o pai definido como a imagem de origem:
cephuser@adm >
rbd migration prepare SRC_POOL/IMAGE TARGET_POOL/IMAGEDica: Migrar apenas dados para um pool codificado para eliminaçãoSe você precisa migrar apenas os dados da imagem para um novo pool EC e deixar os metadados no pool replicado original, execute o seguinte comando:
cephuser@adm >
rbd migration prepare SRC_POOL/IMAGE \ --data-pool TARGET_POOL/IMAGEPermita que os clientes acessem a imagem no pool de destino.
Migre os dados para o pool de destino:
cephuser@adm >
rbd migration execute SRC_POOL/IMAGERemova a imagem antiga:
cephuser@adm >
rbd migration commit SRC_POOL/IMAGE
18.7 Instantâneos de pool #
Os instantâneos de pool são capturados com base no estado do pool inteiro do Ceph. Com os instantâneos de pool, você pode manter o histórico de estado do pool. A criação de instantâneos de pool consome espaço de armazenamento proporcional ao tamanho do pool. Confira sempre se há espaço em disco suficiente no armazenamento relacionado antes de criar um instantâneo de um pool.
18.7.1 Criando um instantâneo de um pool #
Para criar um instantâneo de um pool, execute:
cephuser@adm >
ceph osd pool mksnap POOL-NAME SNAP-NAME
Por exemplo:
cephuser@adm >
ceph osd pool mksnap pool1 snap1
created pool pool1 snap snap1
18.7.2 Listando instantâneos de um pool #
Para listar os instantâneos existentes de um pool, execute:
cephuser@adm >
rados lssnap -p POOL_NAME
Por exemplo:
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 Removendo um instantâneo de um pool #
Para remover um instantâneo de um pool, execute:
cephuser@adm >
ceph osd pool rmsnap POOL-NAME SNAP-NAME
18.8 Compactação de dados #
O BlueStore (encontre mais detalhes no Seção 1.4, “BlueStore”) oferece compactação de dados sob demanda para economizar espaço no disco. A taxa de compactação depende dos dados armazenados no sistema. Observe que a compactação/descompactação requer mais capacidade da CPU.
Você pode configurar a compactação de dados globalmente (consulte a Seção 18.8.3, “Opções globais de compactação”) e, em seguida, anular as configurações de compactação específicas para cada pool individual.
Você pode habilitar ou desabilitar a compactação de dados do pool ou mudar o algoritmo e o modo de compactação a qualquer momento, para um pool tanto com dados quanto sem dados.
Nenhuma compactação será aplicada aos dados existentes após habilitar a compactação do pool.
Após desabilitar a compactação de um pool, todos os dados dele serão descompactados.
18.8.1 Habilitando a compactação #
Para habilitar a compactação de dados para um pool denominado POOL_NAME, execute o seguinte 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 desabilitar a compactação de dados para um pool, use “none” (nenhum) como o algoritmo de compactação:
cephuser@adm >
ceph
osd pool set POOL_NAME compression_algorithm none
18.8.2 Opções de compactação do pool #
Uma lista completa de configurações de compactação:
- compression_algorithm
Os valores possíveis são
none
,zstd
esnappy
. O padrão ésnappy
.O algoritmo de compactação a ser usado depende do caso de uso específico. Veja a seguir várias recomendações:
Use o padrão
snappy
se não tiver um bom motivo para mudá-lo.O
zstd
oferece uma boa taxa de compactação, mas provoca alto overhead da CPU ao compactar pequenas quantidades de dados.Realize um benchmark desses algoritmos em uma amostra dos dados reais e observe o uso de CPU e memória do cluster.
- compression_mode
Os valores possíveis são
none
,aggressive
,passive
eforce
. O padrão énone
.none
: nunca comprimirpassive
: comprimir se houver a dicaCOMPRESSIBLE
aggressive
: comprimir, exceto se houver a dicaINCOMPRESSIBLE
force
: sempre comprimir
- compression_required_ratio
Valor: Duplo, Taxa = SIZE_COMPRESSED/SIZE_ORIGINAL. O padrão é
0,875
, o que significa que, se a compactação não reduzir o espaço ocupado em pelo menos 12,5%, o objeto não será comprimido.Os objetos acima dessa taxa não serão comprimidos por causa do baixo ganho líquido.
- compression_max_blob_size
Valor: Número Inteiro Não Assinado, tamanho em bytes. Padrão:
0
Tamanho máximo dos objetos que serão comprimidos.
- compression_min_blob_size
Valor: Número Inteiro Não Assinado, tamanho em bytes. Padrão:
0
Tamanho mínimo dos objetos que serão comprimidos.
18.8.3 Opções globais de compactação #
As seguintes opções de configuração podem ser definidas na configuração do Ceph e aplicam-se a todos os OSDs, não apenas a um único pool. A configuração específica do pool listada na Seção 18.8.2, “Opções de compactação do pool” tem prioridade.
- bluestore_compression_algorithm
Consulte a compression_algorithm
- bluestore_compression_mode
Consulte a compression_mode
- bluestore_compression_required_ratio
Consulte a compression_required_ratio
- bluestore_compression_min_blob_size
Valor: Número Inteiro Não Assinado, tamanho em bytes. Padrão:
0
Tamanho mínimo dos objetos que serão comprimidos. Por padrão, a configuração é ignorada a favor de
bluestore_compression_min_blob_size_hdd
ebluestore_compression_min_blob_size_ssd
. Ela tem prioridade quando definida como um valor diferente de zero.- bluestore_compression_max_blob_size
Valor: Número Inteiro Não Assinado, tamanho em bytes. Padrão:
0
Tamanho máximo dos objetos que são comprimidos antes de serem divididos em blocos menores. Por padrão, a configuração é ignorada a favor de
bluestore_compression_max_blob_size_hdd
ebluestore_compression_max_blob_size_ssd
. Ela tem prioridade quando definida como um valor diferente de zero.- bluestore_compression_min_blob_size_ssd
Valor: Número Inteiro Não Assinado, tamanho em bytes. Padrão:
8K
Tamanho mínimo dos objetos que serão comprimidos e armazenados na unidade de estado sólido.
- bluestore_compression_max_blob_size_ssd
Valor: Número Inteiro Não Assinado, tamanho em bytes. Padrão:
64K
Tamanho máximo dos objetos que são comprimidos e armazenados em unidade de estado sólido antes de serem divididos em blocos menores.
- bluestore_compression_min_blob_size_hdd
Valor: Número Inteiro Não Assinado, tamanho em bytes. Padrão:
128K
Tamanho mínimo dos objetos que serão comprimidos e armazenados em discos rígidos.
- bluestore_compression_max_blob_size_hdd
Valor: Número Inteiro Não Assinado, tamanho em bytes. Padrão:
512K
Tamanho máximo dos objetos que são comprimidos e armazenados em discos rígidos antes de serem divididos em blocos menores.