23 Sistema de arquivos em cluster #
Este capítulo descreve as tarefas de administração que normalmente são executadas depois que o cluster é configurado e o CephFS é exportado. Se você precisar de mais informações sobre como configurar o CephFS, consulte o Seção 8.3.3, “Implantando servidores de metadados”.
23.1 Montando o CephFS #
Quando o sistema de arquivos é criado e o MDS está ativo, você está pronto para montar o sistema de arquivos de um host de cliente.
23.1.1 Preparando o cliente #
Se o host de cliente executa o SUSE Linux Enterprise 12 SP2 ou versão mais recente, o sistema está pronto para montar o CephFS “out-of-the-box”.
Se o host de cliente executa o SUSE Linux Enterprise 12 SP1, você precisa aplicar todos os patches mais recentes antes de montar o CephFS.
Em qualquer caso, tudo o que é preciso para montar o CephFS está incluído no SUSE Linux Enterprise. O produto SUSE Enterprise Storage 7.1 não é necessário.
Para suportar a sintaxe de mount
completa, o pacote ceph-common (que acompanha o SUSE Linux Enterprise) deve ser instalado antes de tentar montar o CephFS.
Se o pacote ceph-common (e, portanto, sem o ajudante mount.ceph
), os IPs dos monitores precisarão ser usados em vez dos nomes. O motivo é que o cliente do kernel não poderá executar a resolução de nome.
A sintaxe de montagem básica é:
#
mount -t ceph MON1_IP[:PORT],MON2_IP[:PORT],...:CEPHFS_MOUNT_TARGET \
MOUNT_POINT -o name=CEPHX_USER_NAME,secret=SECRET_STRING
23.1.2 Criando um arquivo secreto #
Por padrão, o cluster do Ceph é executado com a autenticação ativada. Você deve criar um arquivo que armazena sua chave secreta (não o chaveiro propriamente dito). Para obter a chave secreta para determinado usuário e, em seguida, criar o arquivo, faça o seguinte:
Veja a chave do usuário específico em um arquivo de chaveiro:
cephuser@adm >
cat /etc/ceph/ceph.client.admin.keyringCopie a chave do usuário que utilizará o sistema de arquivos Ceph FS montado. Normalmente, a chave tem a seguinte aparência:
AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==
Crie um arquivo com o nome de usuário como parte do nome de arquivo. Por exemplo,
/etc/ceph/admin.secret
para o usuário admin.Cole o valor da chave no arquivo criado na etapa anterior.
Defina os direitos de acesso apropriados para o arquivo. O usuário deve ser a única pessoa que pode ler o arquivo. Outras pessoas não devem ter nenhum direito de acesso.
23.1.3 Montando o CephFS #
Você pode montar o CephFS com o comando mount
. Você precisa especificar o nome de host ou endereço IP do monitor. Como a autenticação cephx
está habilitada por padrão no SUSE Enterprise Storage, você precisa especificar um nome de usuário e também o segredo relacionado:
#
mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
-o name=admin,secret=AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==
Como o comando anterior permanece no histórico do shell, uma abordagem mais segura é ler o segredo de um arquivo:
#
mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
Observe que o arquivo de segredo deve conter apenas o segredo do chaveiro real. Em nosso exemplo, o arquivo incluirá apenas a seguinte linha:
AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==
Convém especificar vários monitores separados por vírgulas na linha de comando mount
para o caso de um monitor ficar inativo no momento da montagem. Cada endereço de monitor adota o formato host[:porta]
. Se a porta não for especificada, será usado o padrão 6789.
Crie o ponto de montagem no host local:
#
mkdir /mnt/cephfs
Monte o CephFS:
#
mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
Um subdiretório subdir
poderá ser especificado se um subconjunto do sistema de arquivos tiver que ser montado:
#
mount -t ceph ceph_mon1:6789:/subdir /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
Você pode especificar mais de um host de monitor no comando mount
:
#
mount -t ceph ceph_mon1,ceph_mon2,ceph_mon3:6789:/ /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
Se forem usados clientes com restrição de caminho, os recursos do MDS precisarão incluir o acesso de leitura ao diretório raiz. Por exemplo, um chaveiro pode ter a seguinte aparência:
client.bar key: supersecretkey caps: [mds] allow rw path=/barjail, allow r path=/ caps: [mon] allow r caps: [osd] allow rwx
A parte allow r path=/
indica que os clientes com restrição de caminho podem ver o volume raiz, mas não podem gravar nele. Isso pode ser um problema para casos de uso em que o isolamento completo é um requisito.
23.2 Desmontando o CephFS #
Para desmontar o CephFS, use o comando umount
:
#
umount /mnt/cephfs
23.3 Montando o CephFS em /etc/fstab
#
Para montar o CephFS automaticamente na inicialização do cliente, insira a linha correspondente na respectiva tabela de sistemas de arquivos /etc/fstab
:
mon1:6790,mon2:/subdir /mnt/cephfs ceph name=admin,secretfile=/etc/ceph/secret.key,noatime,_netdev 0 2
23.4 Vários daemons MDS ativos (MDS ativo-ativo) #
Por padrão, o CephFS é configurado para um único daemon MDS ativo. Para aumentar o desempenho dos metadados em sistemas de grande escala, é possível habilitar vários daemons MDS ativos, que compartilharão a carga de trabalho dos metadados entre eles.
23.4.1 Usando o MDS ativo-ativo #
Considere o uso de vários daemons MDS ativos em caso de gargalo no desempenho dos metadados no MDS único padrão.
A adição de mais daemons não aumenta o desempenho em todos os tipos de carga de trabalho. Por exemplo, um único aplicativo em execução em um só cliente não se beneficiará de um número maior de daemons MDS, a menos que o aplicativo esteja efetuando muitas operações de metadados em paralelo.
As cargas de trabalho que costumam se beneficiar de um número maior de daemons MDS ativos são aquelas com vários clientes, que podem atuar em muitos diretórios separados.
23.4.2 Aumentando o tamanho do cluster MDS ativo #
Cada sistema de arquivos CephFS tem uma configuração max_mds
que controla quantas classificações serão criadas. O número real de classificações no sistema de arquivos apenas será aumentado se um daemon sobressalente estiver disponível para assumir a nova classificação. Por exemplo, se houver apenas um daemon MDS em execução, e max_mds
estiver definido como dois, não será criada uma segunda classificação.
No exemplo a seguir, definimos a opção max_mds
como 2 para criar uma nova classificação separadamente do padrão. Para ver as mudanças, execute ceph status
antes e depois que você definir max_mds
e observe a linha que contém fsmap
:
cephuser@adm >
ceph
status [...] services: [...] mds: cephfs-1/1/1 up {0=node2=up:active}, 1 up:standby [...]cephuser@adm >
ceph
fs set cephfs max_mds 2cephuser@adm >
ceph
status [...] services: [...] mds: cephfs-2/2/2 up {0=node2=up:active,1=node1=up:active} [...]
A classificação recém-criada (1) passa pelo estado de “criação” e depois entra no estado “ativo”.
Mesmo com vários daemons MDS ativos, um sistema altamente disponível ainda requer daemons de standby para assumir o controle em caso de falha em qualquer um dos servidores que executam um daemon ativo.
Consequentemente, o limite máximo ideal de max_mds
para sistemas de alta disponibilidade é menor do que o número total de servidores MDS no sistema. Para se manter disponível em caso de várias falhas do servidor, aumente o número de daemons de standby no sistema para corresponder ao número de falhas do servidor que você precisa superar.
23.4.3 Diminuindo o número de classificações #
Todas as classificações, incluindo as que devem ser removidas, devem primeiro estar ativas. Isso significa que é necessário ter pelo menos max_mds
daemons MDS disponíveis.
Primeiramente, defina max_mds
como um número mais baixo. Por exemplo, volte a ter um único MDS ativo:
cephuser@adm >
ceph
status [...] services: [...] mds: cephfs-2/2/2 up {0=node2=up:active,1=node1=up:active} [...]cephuser@adm >
ceph
fs set cephfs max_mds 1cephuser@adm >
ceph
status [...] services: [...] mds: cephfs-1/1/1 up {0=node2=up:active}, 1 up:standby [...]
23.4.4 Fixando manualmente árvores de diretório em uma classificação #
Em várias configurações de servidor de metadados ativas, um balanceador é executado, que funciona para distribuir a carga de metadados igualmente no cluster. Em geral, isso funciona bem o suficiente para a maioria dos usuários; mas, às vezes, convém anular o balanceador dinâmico com mapeamentos explícitos de metadados para classificações específicas. Isso pode permitir que o administrador ou os usuários distribuam a carga do aplicativo igualmente ou limitem o impacto das solicitações de metadados dos usuários sobre o cluster inteiro.
O mecanismo fornecido para essa finalidade é chamado “export pin”. Ele é um atributo estendido de diretórios. O nome desse atributo estendido é ceph.dir.pin
. Os usuários podem definir esse atributo usando os comandos padrão:
#
setfattr -n ceph.dir.pin -v 2 /path/to/dir
O valor (-v
) do atributo estendido é a classificação à qual atribuir a subárvore do diretório. O valor padrão -1 indica que o diretório não foi fixado.
O export pin de um diretório é herdado do seu pai mais próximo com um export pin definido. Portanto, a definição do export pin em um diretório afeta todos os seus filhos. No entanto, a fixação do pai pode ser anulada pela definição do export pin do diretório filho. Por exemplo:
#
mkdir -p a/b # "a" and "a/b" start with no export pin set.
setfattr -n ceph.dir.pin -v 1 a/ # "a" and "b" are now pinned to rank 1.
setfattr -n ceph.dir.pin -v 0 a/b # "a/b" is now pinned to rank 0
# and "a/" and the rest of its children
# are still pinned to rank 1.
23.5 Gerenciando o failover #
Se um daemon MDS parar de se comunicar com o monitor, o monitor aguardará mds_beacon_grace
segundos (o padrão é 15 segundos) antes de marcar o daemon como lento. Você pode configurar um ou mais daemons de “standby” para assumir o controle durante o failover do daemon MDS.
23.5.1 Configurando a reprodução de standby #
Cada sistema de arquivos CephFS pode ser configurado para adicionar daemons de reprodução de standby. Esses daemons de standby seguem o diário de metadados do MDS ativo para reduzir o tempo de failover caso o MDS ativo se torne indisponível. Cada MDS ativo pode ter apenas um daemon de reprodução de standby o seguindo.
Configure a reprodução de standby em um sistema de arquivos com o seguinte comando:
cephuser@adm >
ceph fs set FS-NAME allow_standby_replay BOOL
Quando definidos, os monitores atribuirão os daemons de standby disponíveis para seguir os MDSs ativos nesse sistema de arquivos.
Quando um MDS entrar no estado de reprodução de standby, ele apenas será usado como standby para a classificação que está seguindo. Se houver falha em outra classificação, esse daemon de reprodução de standby não será usado como substituição, mesmo que não haja outros standbys disponíveis. Por esse motivo, se a reprodução de standby for usada, será aconselhável que cada MDS ativo tenha um daemon de reprodução de standby.
23.6 Definindo cotas do CephFS #
Você pode definir cotas em qualquer subdiretório do sistema de arquivos Ceph. A cota restringe o número de bytes ou de arquivos armazenados abaixo do ponto especificado na hierarquia de diretórios.
23.6.1 Limitações de cota do CephFS #
O uso de cotas com o CephFS tem as seguintes limitações:
- As cotas são cooperativas e não concorrentes.
As cotas do Ceph confiam que o cliente que está montando o sistema de arquivos pare de gravar nele quando um limite é atingido. A parte do servidor não pode evitar que um cliente mal intencionado grave a quantidade de dados que ele precisar. Não use cotas para evitar o preenchimento do sistema de arquivos em ambientes em que os clientes não são totalmente confiáveis.
- As cotas não são precisas.
Os processos que estão gravando no sistema de arquivos serão interrompidos logo após o limite da cota ser atingido. Inevitavelmente, eles poderão gravar alguma quantidade de dados acima do limite configurado. Os gravadores do cliente serão interrompidos dentro de décimos de segundos após ultrapassar o limite configurado.
- As cotas são implementadas no cliente do kernel a partir da versão 4.17.
As cotas são suportadas pelo cliente do espaço de usuário (libcephfs, ceph-fuse). Os clientes do kernel do Linux 4.17 e superiores suportam cotas do CephFS nos clusters do SUSE Enterprise Storage 7.1. Haverá falha nos clientes do kernel (até nas versões recentes) ao processar cotas em clusters mais antigos, mesmo que eles possam definir os atributos estendidos das cotas. Os kernels do SLE12-SP3 (e versões mais recentes) já incluem os backports necessários para administrar as cotas.
- Configure as cotas com cuidado quando forem usadas com restrições de montagem com base no caminho.
O cliente precisa ter acesso ao inode do diretório em que as cotas são configuradas para aplicá-las. Se o cliente tiver acesso restrito a um determinado caminho (por exemplo,
/home/user
) com base no recurso do MDS, e se a cota for configurada em um diretório de origem ao qual ele não tem acesso a (/home
), o cliente não a aplicará. Ao usar restrições de acesso com base no caminho, certifique-se de configurar a cota no diretório que o cliente pode acessar (por exemplo,/home/user
ou/home/user/quota_dir
).
23.6.2 Configurando cotas do CephFS #
Você pode configurar cotas do CephFS usando atributos estendidos virtuais:
ceph.quota.max_files
Configura um limite de arquivos.
ceph.quota.max_bytes
Configura um limite de bytes.
Se os atributos aparecerem no inode de um diretório, uma cota será configurada nele. Se eles não estiverem presentes, nenhuma cota será definida nesse diretório (embora uma ainda possa ser configurada em um diretório pai).
Para definir uma cota de 100 MB, execute:
cephuser@mds >
setfattr -n ceph.quota.max_bytes -v 100000000 /SOME/DIRECTORY
Para definir uma cota de 10.000 arquivos, execute:
cephuser@mds >
setfattr -n ceph.quota.max_files -v 10000 /SOME/DIRECTORY
Para ver a configuração de cota, execute:
cephuser@mds >
getfattr -n ceph.quota.max_bytes /SOME/DIRECTORY
cephuser@mds >
getfattr -n ceph.quota.max_files /SOME/DIRECTORY
Se o valor do atributo estendido for “0”, a cota não será definida.
Para remover uma cota, execute:
cephuser@mds >
setfattr -n ceph.quota.max_bytes -v 0 /SOME/DIRECTORYcephuser@mds >
setfattr -n ceph.quota.max_files -v 0 /SOME/DIRECTORY
23.7 Gerenciando instantâneos do CephFS #
Os instantâneos do CephFS criam uma visão apenas leitura do sistema de arquivos no momento em que são capturados. Você pode criar um instantâneo em qualquer diretório. O instantâneo incluirá todos os dados no sistema de arquivos abaixo do diretório especificado. Após a criação de um instantâneo, os dados incluídos no buffer serão descarregados dos vários clientes de maneira assíncrona. Dessa forma, a criação de um instantâneo é muito rápida.
Se você tiver vários sistemas de arquivos CephFS compartilhando um único pool (por meio de namespaces), seus instantâneos colidirão, e a exclusão de um instantâneo resultará em dados de arquivos ausentes em outros instantâneos que compartilham o mesmo pool.
23.7.1 Criando instantâneos #
Por padrão, o recurso de instantâneo do CephFS está habilitado nos sistemas de arquivos novos. Para habilitá-lo nos sistemas de arquivos existentes, execute:
cephuser@adm >
ceph fs set CEPHFS_NAME allow_new_snaps true
Após a habilitação dos instantâneos, todos os diretórios no CephFS terão um subdiretório .snap
especial.
Este é um subdiretório virtual. Ele não aparece na listagem de diretórios do diretório pai, mas o nome .snap
não pode ser usado como nome de arquivo ou diretório. O diretório .snap
precisa ser acessado explicitamente, por exemplo:
>
ls -la /CEPHFS_MOUNT/.snap/
Os clientes do kernel do CephFS têm uma limitação: eles não podem processar mais do que 400 instantâneos em um sistema de arquivos. O número de instantâneos deve ser mantido sempre abaixo desse limite, seja qual for o cliente que você usa. Se você usa clientes CephFS mais antigos, como SLE12-SP3, lembre-se de que ultrapassar 400 instantâneos é prejudicial para as operações, porque haverá falha no cliente.
Você pode configurar um nome diferente para o subdiretório de instantâneos definindo a configuração client snapdir
.
Para criar um instantâneo, crie um subdiretório abaixo do diretório .snap
com um nome personalizado. Por exemplo, para criar um instantâneo do diretório /CEPHFS_MOUNT/2/3/
, execute:
>
mkdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME
23.7.2 Apagando instantâneos #
Para apagar um instantâneo, remova seu subdiretório dentro do diretório .snap
:
>
rmdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME