Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
Aplica-se a SUSE Enterprise Storage 5

8 Dispositivo de Blocos RADOS

Um bloco é uma sequência de bytes. Por exemplo, um bloco de dados de 512 bytes. As interfaces de armazenamento com base em blocos são a maneira mais comum para armazenar dados com mídia rotativa, como discos rígidos, CDs e disquetes. A onipresença de interfaces de dispositivo de blocos faz do dispositivo de blocos virtual o candidato ideal para interagir com um sistema de armazenamento de dados em massa, como o Ceph.

Os dispositivos de blocos do Ceph permitem o compartilhamento de recursos físicos e são redimensionáveis. Eles armazenam dados distribuídos por vários OSDs em um cluster do Ceph. Os dispositivos de blocos do Ceph aproveitam os recursos do RADOS, como criação de instantâneos, replicação e consistência. Os Dispositivo de Blocos RADOS (RBD) do Ceph interagem com os OSDs usando os módulos do kernel ou a biblioteca librbd.

Protocolo RADOS
Figura 8.1: Protocolo RADOS

Os dispositivos de blocos do Ceph oferecem alto desempenho com escalabilidade infinita aos módulos do kernel. Eles suportam soluções de virtualização, como QEMU, ou sistemas de computação com base em nuvem, como OpenStack, que utilizam a libvirt. Você pode usar o mesmo cluster para operar o Object Gateway, o CephFS e os Dispositivos de Blocos RADOS simultaneamente.

8.1 Comandos do dispositivo de blocos

O comando rbd permite criar, listar, avaliar e remover imagens de dispositivo de blocos. Você também pode usá-lo, por exemplo, para clonar imagens, criar instantâneos, voltar uma imagem para um instantâneo ou ver um instantâneo.

Dica
Dica: Acesso a um cluster

Para usar os comandos do Dispositivo de Blocos RADOS, você deve ter acesso a um cluster do Ceph ativo.

8.1.1 Criando uma imagem de dispositivo de blocos

Antes de adicionar um dispositivo de blocos a um nó, você deve criar uma imagem para ele no cluster. Para criar uma imagem de dispositivo de blocos, execute o seguinte:

root # rbd create --size megabytes pool-name/image-name

Por exemplo, para criar uma imagem de 1 GB denominada “bar” que armazena informações em um pool chamado “swimmingpool”, execute o seguinte:

root # rbd create --size 1024 swimmingpool/bar
Dica
Dica: Pool padrão

Se você não especificar um pool durante a criação de uma imagem, ela será armazenada no pool padrão “rbd”.

Nota
Nota: Criar primeiro o pool

Você precisa primeiro criar um pool antes de especificá-lo como origem. Consulte o Capítulo 7, Gerenciando pools de armazenamento para obter mais detalhes.

8.1.2 Criando a imagem de um dispositivo de blocos em um pool com codificação de eliminação

A partir do SUSE Enterprise Storage 5, é possível armazenar dados de uma imagem de dispositivo de blocos em pools com codificação de eliminação. Apenas a parte de “dados” da imagem RBD pode ser armazenada em um pool com codificação de eliminação. Além disso, o pool com codificação de eliminação deve ter o flag “overwrite” definido como true. Apenas será possível definir esse flag como true se todos os OSDs usarem o BlueStore.

Os metadados de imagem não podem residir em um pool com codificação de eliminação. Os metadados podem residir no pool “rbd” padrão ou no pool que o usuário especifica explicitamente com o parâmetro --pool= no comando rbd create.

Nota
Nota: Necessário para o BlueStore

Todos os nós exigem que o BlueStore use pools com codificação de eliminação para imagens de dispositivo de blocos.

Siga as etapas abaixo para criar uma imagem RBD em um pool com codificação de eliminação:

root # ceph osd pool create POOL_NAME 12 12 erasure
root # ceph osd pool set POOL_NAME allow_ec_overwrites true

# Metadata will reside in pool "rbd", and data in pool "POOL_NAME"
root # rbd create IMAGE_NAME --size=1G --data-pool POOL_NAME

#Metadata will reside in pool "OTHER_POOL", and data in pool "POOL_NAME"
root # rbd create IMAGE_NAME --size=1G --data-pool POOL_NAME --pool=OTHER_POOL

8.1.3 Listando imagens de dispositivo de blocos

Para listar os dispositivos de blocos no pool “rbd”, execute o seguinte (“rbd” é o nome do pool padrão):

root # rbd ls

Para listar os dispositivos de blocos em um pool chamado “swimmingpool”, execute o seguinte:

root # rbd ls swimmingpool

8.1.4 Recuperando informações da imagem

Para recuperar informações da imagem “bar” em um pool chamado “swimmingpool”, execute o seguinte:

root # rbd info swimmingpool/bar

8.1.5 Redimensionando a imagem de um dispositivo de blocos

As imagens de Dispositivo de Blocos RADOS são aprovisionadas dinamicamente, elas não usam nenhum armazenamento físico até você começar a gravar dados nelas. No entanto, elas têm uma capacidade máxima que você define com a opção --size. Para aumentar (ou diminuir) o tamanho máximo da imagem, execute o seguinte:

root # rbd resize --size 2048 foo # to increase
rbd resize --size 2048 foo --allow-shrink # to decrease

8.1.6 Removendo a imagem de um dispositivo de blocos

Para remover um dispositivo de blocos correspondente a uma imagem “bar” no pool chamado “swimmingpool”, execute o seguinte:

root # rbd rm swimmingpool/bar

8.2 Montando e desmontando imagens RBD

Após criar um Dispositivo de Blocos RADOS, você poderá formatá-lo, montá-lo para poder trocar arquivos e desmontá-lo depois de concluído.

  1. Verifique se o cluster do Ceph inclui um pool com a imagem do disco que você deseja montar. Considere o pool chamado mypool e a imagem myimage.

    rbd list mypool
  2. Mapeie a imagem para um novo dispositivo de blocos.

    root # rbd map --pool mypool myimage
    Dica
    Dica: Nome e autenticação de usuário

    Para especificar um nome de usuário, utilize --id user-name. Além disso, se você usar a autenticação cephx, deverá também especificar um segredo. Ele pode vir de um chaveiro ou de um arquivo que contém o segredo:

    root # rbd map --pool rbd myimage --id admin --keyring /path/to/keyring

    ou

    root # rbd map --pool rbd myimage --id admin --keyfile /path/to/file
  3. Liste todos os dispositivos mapeados:

    root # rbd showmapped
     id pool   image   snap device
     0  mypool myimage -    /dev/rbd0

    O dispositivo no qual desejamos trabalhar é /dev/rbd0.

  4. Crie um sistema de arquivos XFS no dispositivo /dev/rbd0.

    root # mkfs.xfs /dev/rbd0
     log stripe unit (4194304 bytes) is too large (maximum is 256KiB)
     log stripe unit adjusted to 32KiB
     meta-data=/dev/rbd0              isize=256    agcount=9, agsize=261120 blks
              =                       sectsz=512   attr=2, projid32bit=1
              =                       crc=0        finobt=0
     data     =                       bsize=4096   blocks=2097152, imaxpct=25
              =                       sunit=1024   swidth=1024 blks
     naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
     log      =internal log           bsize=4096   blocks=2560, version=2
              =                       sectsz=512   sunit=8 blks, lazy-count=1
     realtime =none                   extsz=4096   blocks=0, rtextents=0
  5. Monte o dispositivo e verifique se ele foi montado corretamente. Substitua /mnt pelo ponto de montagem.

    root # mount /dev/rbd0 /mnt
    root # mount | grep rbd0
    /dev/rbd0 on /mnt type xfs (rw,relatime,attr2,inode64,sunit=8192,...

    Agora, você pode mover os dados de e para o dispositivo como se ele fosse um diretório local.

    Dica
    Dica: Aumentando o tamanho do dispositivo RBD

    Se você acha que o tamanho do dispositivo RBD não é mais suficiente, pode aumentá-lo com facilidade.

    1. Aumente o tamanho da imagem RBD. Por exemplo, até 10 GB.

      root # rbd resize --size 10000 mypool/myimage
       Resizing image: 100% complete...done.
    2. Expanda o sistema de arquivos para preencher o novo tamanho do dispositivo.

      root # xfs_growfs /mnt
       [...]
       data blocks changed from 2097152 to 2560000
  6. Após terminar de acessar o dispositivo, você poderá desmontá-lo.

    root # unmount /mnt
Dica
Dica: (Des)montagem manual

Como o mapeamento e a montagem manuais de imagens RBD após a inicialização, e a desmontagem e a anulação do mapeamento antes do encerramento, podem ser desgastantes, um script rbdmap e uma unidade systemd são fornecidos. Consulte a Seção 8.4, “rbdmap: Mapear dispositivos RBD no momento da inicialização”.

8.3 Instantâneos de dispositivo de blocos

Um instantâneo RBD é aquele de uma imagem do Dispositivo de Blocos RADOS. Com os instantâneos, você pode manter o histórico de estado da imagem. O Ceph também suporta camadas de instantâneo, o que permite clonar imagens de VM de forma rápida e fácil. O Ceph suporta instantâneos de dispositivo de blocos usando o comando rbd e muitas interfaces de nível mais alto, incluindo QEMU, libvirt, OpenStack e CloudStack.

Nota
Nota

Pare as operações de entrada e de saída antes de criar instantâneos de uma imagem. Se a imagem tiver um sistema de arquivos, o estado dele deverá ser consistente antes da criação de instantâneos.

8.3.1 Notas sobre o Cephx

Quando o cephx está habilitado (consulte http://ceph.com/docs/master/rados/configuration/auth-config-ref/ para obter mais informações), você deve especificar um nome de usuário ou ID e um caminho para o chaveiro que contém a chave correspondente para o usuário. Consulte Gerenciamento de usuários para obter mais detalhes. É possível também adicionar a variável de ambiente CEPH_ARGS para evitar uma nova entrada dos parâmetros a seguir.

root # rbd --id user-ID --keyring=/path/to/secret commands
root # rbd --name username --keyring=/path/to/secret commands

Por exemplo:

root # rbd --id admin --keyring=/etc/ceph/ceph.keyring commands
root # rbd --name client.admin --keyring=/etc/ceph/ceph.keyring commands
Dica
Dica

Adicione o usuário e o segredo à variável de ambiente CEPH_ARGS para que você não precise digitá-los toda vez.

8.3.2 Aspectos básicos do instantâneo

Os procedimentos a seguir demonstram como criar, listar e remover instantâneos usando o comando rbd na linha de comando.

8.3.2.1 Criar instantâneos

Para criar um instantâneo com rbd, especifique a opção snap create, o nome do pool e o nome da imagem.

root # rbd --pool pool-name snap create --snap snap-name image-name
root # rbd snap create pool-name/image-name@snap-name

Por exemplo:

root # rbd --pool rbd snap create --snap snapshot1 image1
root # rbd snap create rbd/image1@snapshot1

8.3.2.2 Listar instantâneos

Para listar os instantâneos de uma imagem, especifique o nome do pool e o nome da imagem.

root # rbd --pool pool-name snap ls image-name
root # rbd snap ls pool-name/image-name

Por exemplo:

root # rbd --pool rbd snap ls image1
root # rbd snap ls rbd/image1

8.3.2.3 Voltar um instantâneo

Para voltar a um instantâneo com rbd, especifique a opção snap rollback, o nome do pool, o nome da imagem e o nome do instantâneo.

root # rbd --pool pool-name snap rollback --snap snap-name image-name
root # rbd snap rollback pool-name/image-name@snap-name

Por exemplo:

root # rbd --pool pool1 snap rollback --snap snapshot1 image1
root # rbd snap rollback pool1/image1@snapshot1
Nota
Nota

Voltar uma imagem para um instantâneo significa sobregravar a versão atual da imagem com os dados de um instantâneo. O tempo necessário para executar um rollback aumenta de acordo com o tamanho da imagem. É mais rápido clonar de um instantâneo do que voltar uma imagem para um instantâneo, e é o método preferencial para reverter a um estado preexistente.

8.3.2.4 Apagar um instantâneo

Para apagar um instantâneo com rbd, especifique a opção snap rm, o nome do pool, o nome da imagem e o nome de usuário.

root # rbd --pool pool-name snap rm --snap snap-name image-name
root # rbd snap rm pool-name/image-name@snap-name

Por exemplo:

root # rbd --pool pool1 snap rm --snap snapshot1 image1
root # rbd snap rm pool1/image1@snapshot1
Nota
Nota

Os Ceph OSDs apagam dados de forma assíncrona, portanto, apagar um instantâneo não libera o espaço em disco imediatamente.

8.3.2.5 Purgar instantâneos

Para apagar todos os instantâneos de uma imagem com rbd, especifique a opção snap purge e o nome da imagem.

root # rbd --pool pool-name snap purge image-name
root # rbd snap purge pool-name/image-name

Por exemplo:

root # rbd --pool pool1 snap purge image1
root # rbd snap purge pool1/image1

8.3.3 Camadas

O Ceph permite criar muitos clones COW (Copy-On-Write – Cópia em Gravação) de um instantâneo de dispositivo de blocos. As camadas de instantâneo permitem que os clientes de dispositivo de blocos do Ceph criem imagens muito rapidamente. Por exemplo, você pode criar uma imagem de dispositivo de blocos com uma VM Linux gravada nela e, em seguida, capturar um instantâneo da imagem, proteger o instantâneo e criar quantos clones de cópia em gravação desejar. Um instantâneo é apenas leitura, portanto, sua clonagem simplifica a semântica, possibilitando criar clones rapidamente.

Nota
Nota

Os termos “pai” e “filho” mencionados nos exemplos de linha de comando a seguir indicam um instantâneo de dispositivo de blocos do Ceph (pai) e a imagem correspondente clonada do instantâneo (filho).

Cada imagem clonada (filho) armazena uma referência à imagem pai, o que permite que a imagem clonada abra o instantâneo pai e o leia.

Um clone COW de um instantâneo funciona exatamente como qualquer outra imagem de dispositivo de blocos do Ceph. Você pode ler, gravar, clonar e redimensionar imagens clonadas. Não há nenhuma restrição especial em relação às imagens clonadas. No entanto, o clone de cópia em gravação de um instantâneo refere-se ao instantâneo. Sendo assim, você deve proteger o instantâneo antes de cloná-lo.

Nota
Nota

O Ceph suporta apenas a clonagem para imagens format 2 (criadas com rbd create --image-format 2).

8.3.3.1 Introdução às camadas

As camadas de dispositivo de blocos do Ceph são um processo simples. Você deve ter uma imagem. Você deve criar um instantâneo da imagem. Você deve proteger o instantâneo. Após executar essas etapas, você poderá iniciar a clonagem do instantâneo.

A imagem clonada tem uma referência ao instantâneo pai e inclui os IDs do pool, da imagem e do instantâneo. A inclusão do ID do pool significa que você pode clonar instantâneos de um pool para imagens em outro pool.

  • Gabarito de Imagem: Um caso de uso comum para camadas de dispositivo de blocos é criar uma imagem master e um instantâneo que serve como gabarito para os clones. Por exemplo, um usuário pode criar uma imagem para uma distribuição Linux (por exemplo, SUSE Linux Enterprise Server) e criar um instantâneo para ela. Periodicamente, o usuário pode atualizar a imagem e criar um novo instantâneo (por exemplo, zypper ref && zypper patch seguido por rbd snap create). Durante a maturação da imagem, o usuário pode clonar qualquer um dos instantâneos.

  • Gabarito Estendido: Um caso de uso mais avançado inclui estender a imagem de um gabarito que fornece mais informações do que uma imagem de base. Por exemplo, um usuário pode clonar uma imagem (um gabarito de VM) e instalar outro software (por exemplo, um banco de dados, um sistema de gerenciamento de conteúdo ou um sistema de análise) e, em seguida, capturar um instantâneo da imagem estendida que, por si só, pode ser atualizada da mesma forma que a imagem de base.

  • Pool de Gabarito: Uma maneira de usar as camadas de dispositivo de blocos é criar um pool que contém imagens master que atuam como gabaritos e instantâneos desses gabaritos. Em seguida, você pode estender os privilégios apenas leitura aos usuários para que eles possam clonar os instantâneos sem a capacidade de gravação ou execução no pool.

  • Migração/Recuperação de Imagens: Uma maneira de usar as camadas de dispositivo de blocos é migrar ou recuperar os dados de um pool para outro.

8.3.3.2 Protegendo um instantâneo

Os clones acessam os instantâneos pai. Todos os clones serão destruídos se um usuário apagar o instantâneo pai por engano. Para evitar a perda de dados, você precisa proteger o instantâneo antes de cloná-lo.

root # rbd --pool pool-name snap protect \
 --image image-name --snap snapshot-name
root # rbd snap protect pool-name/image-name@snapshot-name

Por exemplo:

root # rbd --pool pool1 snap protect --image image1 --snap snapshot1
root # rbd snap protect pool1/image1@snapshot1
Nota
Nota

Você não pode apagar um instantâneo protegido.

8.3.3.3 Clonando um instantâneo

Para clonar um instantâneo, você precisa especificar o pool pai, a imagem, o instantâneo, o pool filho e o nome da imagem. Você precisa proteger o instantâneo antes de cloná-lo.

root # rbd --pool pool-name --image parent-image \
 --snap snap-name --dest-pool pool-name \
 --dest child-image
root # rbd clone pool-name/parent-image@snap-name \
pool-name/child-image-name

Por exemplo:

root # rbd clone pool1/image1@snapshot1 pool1/image2
Nota
Nota

Você pode clonar um instantâneo de um pool para uma imagem em outro pool. Por exemplo, você pode manter as imagens e os instantâneos apenas leitura como gabaritos em um pool e os clones graváveis em outro pool.

8.3.3.4 Anulando a proteção de um instantâneo

Antes de apagar um instantâneo, você deve anular a proteção dele. Além disso, você não pode apagar instantâneos com referências de clones. Você precisa nivelar cada clone de um instantâneo antes de apagar o instantâneo.

root # rbd --pool pool-name snap unprotect --image image-name \
 --snap snapshot-name
root # rbd snap unprotect pool-name/image-name@snapshot-name

Por exemplo:

root # rbd --pool pool1 snap unprotect --image image1 --snap snapshot1
root # rbd snap unprotect pool1/image1@snapshot1

8.3.3.5 Listando os filhos de um instantâneo

Para listar os filhos de um instantâneo, execute o seguinte:

root # rbd --pool pool-name children --image image-name --snap snap-name
root # rbd children pool-name/image-name@snapshot-name

Por exemplo:

root # rbd --pool pool1 children --image image1 --snap snapshot1
root # rbd children pool1/image1@snapshot1

8.3.3.6 Nivelando uma imagem clonada

As imagens clonadas mantêm uma referência ao instantâneo pai. Ao remover a referência do clone filho para o instantâneo pai, você “nivela” com eficiência a imagem copiando as informações do instantâneo para o clone. O tempo necessário para nivelar um clone aumenta de acordo com o tamanho do instantâneo. Para apagar um instantâneo, você deve primeiro nivelar as imagens filho.

root # rbd --pool pool-name flatten --image image-name
root # rbd flatten pool-name/image-name

Por exemplo:

root # rbd --pool pool1 flatten --image image1
root # rbd flatten pool1/image1
Nota
Nota

Como uma imagem nivelada contém todas as informações do instantâneo, ela ocupa mais espaço de armazenamento do que um clone em camadas.

8.4 rbdmap: Mapear dispositivos RBD no momento da inicialização

rbdmap é um script de shell que automatiza as operações rbd map e rbd unmap em uma ou mais imagens de Dispositivo de Blocos RADOS. Embora você possa executar o script manualmente a qualquer momento, o caso de uso principal é mapear e montar automaticamente as imagens RBD no momento da inicialização (e desmontar e anular o mapeamento no encerramento), conforme acionado pelo sistema Init. Um arquivo da unidade systemd, rbdmap.service, está incluído no pacote ceph-common para essa finalidade.

O script aplica um único argumento, que pode ser map ou unmap. Em qualquer um dos casos, o script analisa um arquivo de configuração. Ele assume como padrão /etc/ceph/rbdmap, mas pode ser anulado por meio de uma variável de ambiente RBDMAPFILE. Cada linha do arquivo de configuração corresponde a uma imagem RBD que será mapeada ou que terá o mapeamento anulado.

O arquivo de configuração tem o seguinte formato:

image_specification rbd_options
image_specification

Caminho para uma imagem em um pool. Especifique como nome_do_pool/nome_da_imagem. Se você omitir nome_do_pool, o padrão “rbd” será assumido.

rbd_options

Uma lista opcional de parâmetros a serem passados para o comando rbd map subjacente. Esses parâmetros e seus valores devem ser especificados como uma string separada por vírgula. Por exemplo:

PARAM1=VAL1,PARAM2=VAL2,...

O exemplo faz com que o script rbdmap execute o seguinte comando:

rbd map pool_name/image_name --PARAM1 VAL1 --PARAM2 VAL2

Quando executado como rbdmap map, o script analisa o arquivo de configuração e, para cada imagem RBD especificada, ele tenta primeiro mapear a imagem (usando o comando rbd map) e, na sequência, montar a imagem.

Quando executado como rbdmap unmap, as imagens listadas no arquivo de configuração serão desmontadas e o mapeamento delas será anulado.

rbdmap unmap-all tenta desmontar e, na sequência, anular o mapeamento de todas as imagens RBD mapeadas, independentemente de estarem listadas no arquivo de configuração.

Se bem-sucedida, a operação rbd map mapeia a imagem para um dispositivo /dev/rbdX e, nesse ponto, uma regra udev é acionada para criar um link simbólico do nome do dispositivo amigável /dev/rbd/nome_do_pool/nome_da_imagem apontando para o dispositivo real mapeado.

Para que a montagem e a desmontagem sejam bem-sucedidas, o nome “amigável” do dispositivo precisa ter uma entrada correspondente em /etc/fstab. Ao gravar entradas /etc/fstab em imagens RBD, especifique a opção de montagem “noauto” (ou “nofail”). Isso impede que o sistema Init tente montar o dispositivo com muita antecedência, antes mesmo de ele existir, pois rbdmap.service é normalmente acionado mais adiante na sequência de boot.

Para obter uma lista de opções rbd, consulte a página de manual do rbd (man 8 rbd).

Para ver exemplos de uso do rbdmap, consulte a página de manual do rbdmap (man 8 rbdmap).

8.5 Espelhamento de dispositivo de blocos RADOS

É possível espelhar as imagens RBD de forma assíncrona entre dois clusters do Ceph. Essa funcionalidade usa o recurso de registro de imagens RBD em diário para garantir a replicação consistente com a falha entre os clusters. O espelhamento é configurado por pool nos clusters peer e pode ser configurado para espelhar automaticamente todas as imagens em um pool ou apenas um subconjunto específico de imagens. O espelhamento é configurado usando o comando rbd. O daemon rbd-mirror é responsável por capturar as atualizações da imagem do cluster peer remoto e aplicá-las à imagem no cluster local.

Importante
Importante: Daemon rbd-mirror

Para usar o espelhamento de RBD, você precisa ter dois clusters do Ceph, cada um executando o daemon rbd-mirror.

8.5.1 Daemon rbd-mirror

Os dois daemons rbd-mirror são responsáveis por observar os diários da imagem no cluster peer remoto e reproduzir os eventos do diário no cluster local. O recurso de registro de imagens RBD em diário registra todas as modificações feitas na imagem na ordem em que elas ocorrem. Isso garante que um espelho da imagem remota consistente com a falha esteja disponível localmente.

O daemon rbd-mirror está disponível no pacote rbd-mirror. Instale, habilite e inicie-o em um dos nós do cluster:

root@minion > zypper install rbd-mirror
root@minion > systemctl enable ceph-rbd-mirror@server_name.service
root@minion > systemctl start ceph-rbd-mirror@server_name.service
Importante
Importante

Cada daemon rbd-mirror requer conexão com os dois clusters simultaneamente.

8.5.2 Configuração do pool

Os procedimentos a seguir demonstram como executar as tarefas administrativas básicas para configurar o espelhamento usando o comando rbd. O espelhamento é configurado por pool nos clusters do Ceph.

Você precisa executar as etapas de configuração do pool em ambos os clusters peer. Estes procedimentos consideram a existência de dois clusters, chamados "local" e "remote", acessíveis de um único host, por motivos de clareza.

Consulte a página de manual do rbd (man 8 rbd) para obter mais detalhes sobre como se conectar a diferentes clusters do Ceph.

Dica
Dica: Vários clusters

O nome do cluster nos exemplos a seguir corresponde a um arquivo de configuração do Ceph de mesmo nome /etc/ceph/remote.conf. Consulte a documentação do ceph-conf para saber como configurar vários clusters.

8.5.2.1 Habilitar o espelhamento

Para habilitar o espelhamento em um pool, especifique o subcomando mirror pool enable, o nome do pool e o modo de espelhamento. O modo de espelhamento pode ser pool ou image:

pool

Todas as imagens no pool com o recurso de registro em diário habilitado são espelhadas.

image

O espelhamento precisa ser habilitado explicitamente em cada imagem. Consulte a Seção 8.5.3.2, “Habilitar o espelhamento de imagem” para obter mais informações.

Por exemplo:

root # rbd --cluster local mirror pool enable image-pool pool
root # rbd --cluster remote mirror pool enable image-pool pool

8.5.2.2 Desabilitar o espelhamento

Para desabilitar o espelhamento em um pool, especifique o subcomando mirror pool disable e o nome do pool. Quando o espelhamento é desabilitado dessa maneira em um pool, ele também é desabilitado em todas as imagens (no pool) para as quais ele foi explicitamente habilitado.

root # rbd --cluster local mirror pool disable image-pool
root # rbd --cluster remote mirror pool disable image-pool

8.5.2.3 Adicionar peer de clusters

Para que o daemon rbd-mirror descubra seu cluster peer, o peer precisa ser registrado no pool. Para adicionar um cluster peer de espelhamento, especifique o subcomando mirror pool peer add, o nome do pool e uma especificação do cluster:

root # rbd --cluster local mirror pool peer add image-pool client.remote@remote
root # rbd --cluster remote mirror pool peer add image-pool client.local@local

8.5.2.4 Remover peer de clusters

Para remover um cluster peer de espelhamento, especifique o subcomando mirror pool peer remove, o nome do pool e o UUID do peer (disponível no comando rbd mirror pool info):

root # rbd --cluster local mirror pool peer remove image-pool \
 55672766-c02b-4729-8567-f13a66893445
root # rbd --cluster remote mirror pool peer remove image-pool \
 60c0e299-b38f-4234-91f6-eed0a367be08

8.5.3 Configuração da imagem

Diferentemente da configuração do pool, a configuração da imagem precisa apenas ser executada em um único cluster peer de espelhamento do Ceph.

As imagens RBD espelhadas são designadas como principais ou não principais. Essa é uma propriedade da imagem, e não do pool. Não é possível modificar as imagens designadas como não principais.

As imagens são automaticamente promovidas a principais quando o espelhamento é habilitado primeiro em uma imagem (seja implicitamente, se o modo de espelhamento do pool for “pool” e a imagem tiver o recurso de registro de imagens em diário habilitado, ou explicitamente (consulte a Seção 8.5.3.2, “Habilitar o espelhamento de imagem”) pelo comando rbd).

8.5.3.1 Habilitar o suporte ao registro de imagens em diário

O espelhamento de RBD usa o recurso de registro de RBD em diário para garantir que a imagem replicada permaneça sempre consistente com a falha. Antes de espelhar uma imagem para um cluster peer, o recurso de registro em diário deve ser habilitado. O recurso pode ser habilitado no momento da criação da imagem inserindo a opção --image-feature exclusive-lock,journaling no comando rbd.

Se preferir, o recurso de registro em diário pode ser habilitado dinamicamente nas imagens RBD preexistentes. Para habilitar o registro em diário, especifique o subcomando feature enable, o nome do pool e da imagem e o nome do recurso:

root # rbd --cluster local feature enable image-pool/image-1 journaling
Nota
Nota: Dependência de opção

O recurso de registro em diário depende do recurso de bloqueio exclusivo. Se o recurso de bloqueio exclusivo ainda não estiver habilitado, você precisará habilitá-lo antes de habilitar o recurso de registro em diário.

Dica
Dica: Registrando todas as novas imagens em diário

Você pode habilitar o registro em diário em todas as novas imagens por padrão adicionando a seguinte linha ao arquivo de configuração do Ceph:

rbd default features = 125

8.5.3.2 Habilitar o espelhamento de imagem

Se o espelhamento for configurado no modo “image” para o pool da imagem, será necessário habilitar explicitamente o espelhamento para cada imagem no pool. Para habilitar o espelhamento em determinada imagem, especifique o subcomando mirror image enable juntamente com o nome do pool e da imagem:

root # rbd --cluster local mirror image enable image-pool/image-1

8.5.3.3 Desabilitar o espelhamento de imagem

Para desabilitar o espelhamento em determinada imagem, especifique o subcomando mirror image disable juntamente com o nome do pool e da imagem:

root # rbd --cluster local mirror image disable image-pool/image-1

8.5.3.4 Promoção e rebaixamento de imagem

Em um cenário de failover em que a designação principal precisa ser movida para a imagem no cluster peer, você precisa interromper o acesso à imagem principal, rebaixar a imagem principal atual, promover a nova imagem principal e continuar o acesso à imagem no cluster alternativo.

Para rebaixar determinada imagem para não principal, especifique o subcomando mirror image demote juntamente com o nome do pool e da imagem:

root # rbd --cluster local mirror image demote image-pool/image-1

Para rebaixar todas as imagens principais em um pool para não principais, especifique o subcomando mirror pool demote juntamente com o nome do pool:

root # rbd --cluster local mirror pool demote image-pool

Para promover determinada imagem para principal, especifique o subcomando mirror image promote juntamente com o nome do pool e da imagem:

root # rbd --cluster remote mirror image promote image-pool/image-1

Para promover todas as imagens não principais em um pool para principais, especifique o subcomando mirror pool promote juntamente com o nome do pool:

root # rbd --cluster local mirror pool promote image-pool
Dica
Dica: Dividir a carga de E/S

Como o status principal ou não principal refere-se a cada imagem, é possível ter dois clusters que dividem a carga de E/S e o failover ou failback por fase.

Nota
Nota: Promoção forçada

A promoção pode ser forçada usando a opção --force. A promoção forçada é necessária quando o rebaixamento não pode ser propagado para o cluster peer (por exemplo, em caso de falha do cluster ou interrupção da comunicação). Isso resultará em um cenário de split-brain (dupla personalidade) entre os dois peers, e a imagem não será mais sincronizada até que um subcomando resync seja emitido.

8.5.3.5 Forçar ressincronização de imagem

Se um evento de split-brain for detectado pelo daemon rbd-mirror, ele não tentará espelhar a imagem afetada até o problema ser corrigido. Para continuar o espelhamento de uma imagem, primeiro rebaixe a imagem que foi identificada como desatualizada e, em seguida, solicite uma ressincronização com a imagem principal. Para solicitar a ressincronização de uma imagem, especifique o subcomando mirror image resync juntamente com o nome do pool e da imagem:

root # rbd mirror image resync image-pool/image-1

8.5.4 Status do espelho

O status de replicação do cluster peer é armazenado para cada imagem principal espelhada. Esse status pode ser recuperado usando os subcomandos mirror image status e mirror pool status:

Para solicitar o status da imagem de espelho, especifique o subcomando mirror image status juntamente com o nome do pool e da imagem:

root # rbd mirror image status image-pool/image-1

Para solicitar o status do resumo do pool de espelhos, especifique o subcomando mirror pool status juntamente com o nome do pool:

root # rbd mirror pool status image-pool
Dica
Dica:

A adição da opção --verbose ao subcomando mirror pool status resultará também nos detalhes de status para cada imagem de espelhamento no pool.

Imprimir esta página