Ir para o conteúdoIr para navegação de página: página anterior [tecla de acesso p]/próxima página [tecla de acesso n]
documentation.suse.com / Documentação do SUSE Enterprise Storage 7 / Guia de Operações e Administração / Armazenando dados em um cluster / Gerenciar pools de armazenamento
Aplica-se a SUSE Enterprise Storage 7

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 ou codificaçã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 de k e m, em que k é o número de pacotes de dados e m é 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
Nota
Nota

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, ou erasure 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 de POOL_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.

Nota
Nota

Por 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

Atenção
Atenção: A exclusão do pool não é reversível

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=true
cephuser@adm > ceph osd pool delete pool_name pool_name --yes-i-really-really-mean-it
cephuser@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
Dica
Dica: Nomes de aplicativos padrão

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.

Dica
Dica: Todos os valores de um pool

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:

Valores comuns 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 e pgp_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 valor osd_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 valor osd_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 valor osd_deep_scrub do arquivo de configuração do Ceph foi usado.

Valores de pools replicados
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âmetro osd_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_sets sucessivos. O padrão é 20.

hit_set_search_last_n

Considera no máximo N aparições nos hit_sets 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.

Valores de pool codificado para eliminação
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.

Atenção
Atenção: Não defina menos do que 3 réplicas

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.

Dica
Dica: Definindo mais do que 3 réplicas

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.

Nota
Nota

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.

Dica
Dica: Obter o número de réplicas do objeto

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 o omap 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 de preparação e iniciá-lo depois. Observe que apenas um cliente librbd com suporte a esse recurso (Ceph Nautilus ou mais recente) poderá abrir a imagem logo após a etapa de preparação. Os clientes librbd mais antigos ou os clientes krbd não poderão abrir a imagem antes da execução da etapa de confirmaçã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:

Procedimento 18.1: Migrando um pool replicado para um codificado para eliminação
  1. 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 default

    Verifique 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:

    Pools antes da migração
    Figura 18.1: Pools antes da migração
  2. 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-nonempty
    cephuser@adm > ceph osd tier cache-mode testpool proxy
    Configuração da camada de cache
    Figura 18.2: Configuração da camada de cache
  3. Force o pool de cache a mover todos os objetos para o novo pool:

    cephuser@adm > rados -p testpool cache-flush-evict-all
    Descarregando dados
    Figura 18.3: Descarregando dados
  4. 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 testpool

    Com a sobreposição, todas as operações são encaminhadas para o “testpool” replicado antigo:

    Definindo a sobreposição
    Figura 18.4: Definindo a sobreposição

    Agora você pode alternar todos os clientes para acessar objetos no novo pool.

  5. 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 newpool
    cephuser@adm > ceph osd tier remove newpool testpool
    Migração concluída
    Figura 18.5: Migração concluída
  6. 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.

  1. Impeça os clientes (como uma máquina virtual) de acessar a imagem RBD.

  2. 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/IMAGE
    Dica
    Dica: Migrar apenas dados para um pool codificado para eliminação

    Se 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/IMAGE
  3. Permita que os clientes acessem a imagem no pool de destino.

  4. Migre os dados para o pool de destino:

    cephuser@adm > rbd migration execute SRC_POOL/IMAGE
  5. Remova 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_ALGORITHM
cephuser@adm > ceph osd pool set POOL_NAME compression_mode COMPRESSION_MODE
Dica
Dica: Desabilitando a compactação do pool

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 e snappy. 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 e force. O padrão é none.

  • none: nunca comprimir

  • passive: comprimir se houver a dica COMPRESSIBLE

  • aggressive: comprimir, exceto se houver a dica INCOMPRESSIBLE

  • 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 compression_algorithm.

bluestore_compression_mode

Consulte compression_mode.

bluestore_compression_required_ratio

Consulte 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 e bluestore_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 e bluestore_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.