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 - replicadoou- 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- ke- 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_NAMEO 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 - replicatedpara recuperação de OSDs perdidos mantendo várias cópias dos objetos, ou- erasurepara 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- Por qualquer motivo, se o dimensionador automático tiver sido desabilitado ( - pg_autoscale_modedefinido 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 arquivosnegativo), 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 ls18.3 Renomeando um pool #
Para renomear um pool, execute:
cephuser@adm > ceph osd pool rename CURRENT_POOL_NAME NEW_POOL_NAMESe 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_name18.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 BYTESPor exemplo:
cephuser@adm > ceph osd pool set-quota data max_objects 10000Para 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 BVeja 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 KEYVocê 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 all18.5.5 Definindo valores de um pool #
Para definir um valor para um pool, execute:
cephuser@adm > ceph osd pool set POOL_NAME KEY VALUEVeja 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_nume- pgp_numdo 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_DONTNEEDnas 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 - 0significa que o valor- osd_scrub_min_intervaldo 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 - 0significa que o valor- osd_scrub_max_intervaldo 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 - 0significa que o valor- osd_deep_scrubdo 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 é- falsepor 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 é- 1200por 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_bytesfor acionado.
- target_max_objects
- O Ceph iniciará o descarregamento ou a eliminação de objetos quando o limite - max_objectsfor 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 - Napariçõ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. 
- 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 - Krespostas 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-replicasO 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 o- omappara 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 migrationpermite migrar imagens com tempo de espera mínimo do cliente. Você apenas precisa parar o cliente antes da etapa de- preparaçãoe iniciá-lo depois. Observe que apenas um cliente- librbdcom suporte a esse recurso (Ceph Nautilus ou mais recente) poderá abrir a imagem logo após a etapa de- preparação. Os clientes- librbdmais antigos ou os clientes- krbdnã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:
- 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: 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-nonemptypermite 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 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 testpool- Com 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 newpool- cephuser@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çã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
- Permita 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/IMAGE
- 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-NAMEPor exemplo:
cephuser@adm > ceph osd pool mksnap pool1 snap1
created pool pool1 snap snap118.7.2 Listando instantâneos de um pool #
Para listar os instantâneos existentes de um pool, execute:
cephuser@adm > rados lssnap -p POOL_NAMEPor exemplo:
cephuser@adm > rados lssnap -p pool1
1	snap1	2018.12.13 09:36:20
2	snap2	2018.12.13 09:46:03
2 snaps18.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-NAME18.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 >cephosd pool set POOL_NAME compression_algorithm COMPRESSION_ALGORITHMcephuser@adm >cephosd 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 >cephosd 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,- zstde- 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 - snappyse não tiver um bom motivo para mudá-lo.
- O - zstdoferece 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,- passivee- 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 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_hdde- 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_hdde- 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. 




