cephx
In questo capitolo sono descritti i task amministrativi che di norma vengono eseguiti dopo la configurazione del cluster e l'esportazione di CephFS. Per ulteriori informazioni sulla configurazione di CephFS, fare riferimento a Capitolo 11, Installazione di CephFS.
Una volta creato il file system ed MDS è attivo, si è pronti per montare il file da un host client.
Se sull'host client è in esecuzione SUSE Linux Enterprise 12 SP2 o SP3, è possibile ignorare questa sezione in quanto il sistema è pronto per il montaggio di CephFS senza alcuna configurazione aggiuntiva.
Se sull'host client è in esecuzione SUSE Linux Enterprise 12 SP1, è necessario applicare le patch più recenti prima di montare CephFS.
In ogni caso, tutto il necessario per montare CephFS è incluso in SUSE Linux Enterprise. Il prodotto SUSE Enterprise Storage 6 non è necessario.
Per supportare la sintassi mount
completa, è necessario installare il pacchetto
ceph-common (fornito in dotazione con SUSE Linux Enterprise) prima di tentare di montare CephFS.
Per default, quando il cluster Ceph è in esecuzione l'autenticazione è attivata. È necessario creare un file in cui archiviare la chiave segreta (non il portachiavi stesso). Per ottenere la chiave segreta per un determinato utente e creare il file, procedere come indicato di seguito:
Visualizzare la chiave per l'utente specificato in un file portachiavi:
cephadm@adm >
cat /etc/ceph/ceph.client.admin.keyring
Copiare la chiave dell'utente che utilizzerà il file system Ceph FS montato. Di norma, la chiave è simile a quanto riportato di seguito:
AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==
Creare un file in cui il nome utente costituisce parte del nome file, ad esempio /etc/ceph/admin.secret
per l'utente admin.
Incollare il valore della chiave nel file creato al passaggio precedente.
Impostare i diritti di accesso al file appropriati. L'utente deve essere il solo in grado di leggere il file, gli altri non possono avere alcun diritto di accesso.
È possibile montare CephFS utilizzando il comando mount
. È necessario specificare il nome host di monitoraggio o l'indirizzo IP. Poiché in SUSE Enterprise Storage l'autenticazione cephx
è abilitata per default, è necessario specificare un nome utente e il rispettivo segreto:
root #
mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
-o name=admin,secret=AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==
Dato che il comando precedente rimane nella cronologia shell, la lettura del segreto da un file rappresenta un approccio più sicuro:
root #
mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
Il file segreto deve contenere solo il segreto del portachiavi effettivo. Nell'esempio, il file conterrà quindi solo la riga seguente:
AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==
Qualora uno dei monitoraggi dovesse essere inattivo al momento del montaggio, è buona prassi specificare più monitoraggi separati da virgole nella riga di comando mount
. Ciascun indirizzo di monitoraggio si presenta nella forma host[:port]
. Se non si specifica la porta, per default viene utilizzata la 6789.
Creare il punto di montaggio nell'host locale:
root #
mkdir /mnt/cephfs
Montaggio di CephFS:
root #
mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
Se è necessario montare un sottoinsieme del file system, è possibile specificare una sottodirectory subdir
:
root #
mount -t ceph ceph_mon1:6789:/subdir /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
È possibile specificare più host di monitoraggio nel comando mount
:
root #
mount -t ceph ceph_mon1,ceph_mon2,ceph_mon3:6789:/ /mnt/cephfs \
-o name=admin,secretfile=/etc/ceph/admin.secret
Se si utilizzano client con restrizioni di percorso, tra le funzionalità MDS deve essere incluso l'accesso in lettura alla directory radice. Ad esempio, un portachiavi potrebbe presentare l'aspetto seguente:
client.bar key: supersecretkey caps: [mds] allow rw path=/barjail, allow r path=/ caps: [mon] allow r caps: [osd] allow rwx
la parte allow r path=/
significa che i client con restrizioni di percorso sono in grado di leggere il volume radice, ma non di scriverlo. Nei casi di utilizzo in cui l'isolamento completo è un requisito, ciò può rappresentare un problema.
Per smontare CephFS, utilizzare il comando umount
:
root #
umount /mnt/cephfs
/etc/fstab
#
Per montare CephFS automaticamente all'avvio del client, inserire la riga corrispondente nella rispettiva tabella dei file system /etc/fstab
:
mon1:6790,mon2:/subdir /mnt/cephfs ceph name=admin,secretfile=/etc/ceph/secret.key,noatime,_netdev 0 2
Per default CephFS è configurato per un unico daemon MDS attivo. Per adattare le prestazioni dei metadati a sistemi su larga scala, è possibile abilitare più daemon MDS attivi in modo che il workload dei metadati venga condiviso con un altro.
Quando le prestazioni dei metadati sull'MDS singolo di default si bloccano, prendere in considerazione l'eventualità di utilizzare più daemon MDS attivi.
L'aggiunta di ulteriori daemon non migliora le prestazioni su tutti i tipi di workload. Ad esempio, una singola applicazione in esecuzione su un unico client non sarà avvantaggiata da un maggior numero di daemon MDS, a meno che l'applicazione non esegua parallelamente molte operazioni di metadati.
I workload che di norma traggono vantaggi da un maggior numero di daemon MDS attivi sono quelli provvisti di numerosi client, che magari funzionano su molte directory separate.
Ciascun file system CephFS presenta un'impostazione max_mds
che controlla il numero di livelli che saranno creati. Il numero di livelli effettivo nel file system aumenterà solo se è disponibile un daemon di riserva da inserire nel nuovo livello. Se ad esempio è in esecuzione un solo daemon MDS e max_mds
è impostato su due, non verrà creato un secondo livello.
Nell'esempio seguente, l'opzione max_mds
viene impostata a 2 per creare un nuovo livello oltre a quello di default. Per visualizzare le modifiche, eseguire ceph status
prima di impostare max_mds
, quindi osservare la riga contenente fsmap
:
cephadm@adm >
ceph
status [...] services: [...] mds: cephfs-1/1/1 up {0=node2=up:active}, 1 up:standby [...]cephadm@adm >
ceph
mds set max_mds 2cephadm@adm >
ceph
status [...] services: [...] mds: cephfs-2/2/2 up {0=node2=up:active,1=node1=up:active} [...]
Il livello appena creato (1) passa dallo stato "creating" al rispettivo stato "active".
Anche con più daemon MDS attivi, in un sistema altamente disponibile è comunque richiesto che vengano impiegati daemon in standby se i server in esecuzione su un daemon attivo vengono meno.
Di conseguenza, il numero massimo effettivo di max_mds
per i sistemi altamente disponibili è uno in meno rispetto al numero totale di server MDS presenti nel sistema. Per garantire la disponibilità qualora si verificassero più errori di server, aumentare il numero di daemon in standby nel sistema in modo che corrisponda al numero di errori di server necessario per poter rimanere attivi.
Tutti i livelli, inclusi quelli da rimuovere, devono prima essere attivi. Vale a dire che è necessario disporre di almeno max_mds
daemon MDS disponibili.
In primo luogo, impostare max_mds
a un numero inferiore. Ad esempio, tornare a un singolo MDS attivo:
cephadm@adm >
ceph
status [...] services: [...] mds: cephfs-2/2/2 up {0=node2=up:active,1=node1=up:active} [...]cephadm@adm >
ceph
mds set max_mds 1cephadm@adm >
ceph
status [...] services: [...] mds: cephfs-1/1/1 up {0=node2=up:active}, 1 up:standby [...]
Si noti che sono ancora presenti due MDS attivi. I livelli continuano a esistere nonostante la riduzione di max_mds
, perché max_mds
limita solo la creazione di nuovi livelli.
Successivamente, utilizzare il comando ceph mds deactivate rank
per rimuovere il livello non necessario:
cephadm@adm >
ceph
status [...] services: [...] mds: cephfs-2/2/1 up {0=node2=up:active,1=node1=up:active}cephadm@adm >
ceph
mds deactivate 1 telling mds.1:1 192.168.58.101:6805/2799214375 to deactivatecephadm@adm >
ceph
status [...] services: [...] mds: cephfs-2/2/1 up {0=node2=up:active,1=node1=up:stopping}cephadm@adm >
ceph
status [...] services: [...] mds: cephfs-1/1/1 up {0=node2=up:active}, 1 up:standby
Il livello disattivato passerà allo stato interrotto per un periodo di tempo, mentre distribuisce la rispettiva parte di metadati ai rimanenti daemon attivi. Questa fase può durare da pochi secondi fino ad alcuni minuti. Se sembra che MDS sia bloccato allo stato di interruzione, potrebbe trattarsi di un possibile bug ed è opportuno indagare in merito.
Se un daemon MDS si blocca o viene terminato mentre si trova in stato "stopping", un daemon in standby verrà impiegato al suo posto e lo stato tornerà ad essere "active". Una volta tornato attivo, sarà possibile tentare nuovamente di disattivarlo.
Quando un daemon non è più in stato di interruzione, viene riavviato e torna in standby.
Per distribuire uniformemente il carico dei metadati nel cluster in configurazioni con vari server di metadati attivi, viene eseguito un bilanciamento. Di norma, questo metodo risulta sufficientemente efficace per la maggior parte degli utenti, ma talvolta è auspicabile sostituire il bilanciamento dinamico con mappature esplicite dei metadati in determinati livelli. In tal modo l'amministratore o gli utenti possono distribuire uniformemente il carico di applicazioni o limitare l'impatto delle richieste di metadati degli utenti sull'intero cluster.
Il meccanismo fornito a tale scopo è denominato "pin di esportazione". Si tratta di un attributo esteso delle directory il cui nome è ceph.dir.pin
. Gli utenti possono impostare questo attributo mediante l'uso di comandi standard:
root #
setfattr -n ceph.dir.pin -v 2 /path/to/dir
Il valore (-v
) dell'attributo esteso corrisponde al livello cui assegnare il sottoalbero della directory. Un valore di default pari a -1 indica che la directory non è stata aggiunta.
La directory superiore più vicina con pin di esportazione impostato, eredita il pin. Pertanto, l'impostazione del pin di esportazione in una directory influisce su tutte le rispettive directory secondarie. Il pin della directory superiore può essere sostituito impostando il pin di esportazione della directory secondaria. Ad esempio:
root #
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.
Se un daemon MDS smette di comunicare con il monitoraggio, questo attenderà mds_beacon_grace
secondi (valore di default 15 secondi) prima di contrassegnare il daemon come lento. È possibile configurare uno o più daemon "in standby" che verranno impiegati durante il failover del daemon MDS.
Esistono diverse impostazioni di configurazione che consentono di controllare il comportamento di un daemon in standby. È possibile specificarle in ceph.conf
nell'host in cui viene eseguito il daemon MDS. Tali impostazioni vengono caricate dal daemon al suo avvio e vengono inviate al monitoraggio.
Per default, se non si utilizza alcuna di queste impostazioni, tutti i daemon MDS privi di livelli verranno utilizzati come "standby" per qualsiasi livello.
Le impostazioni che associano un daemon in standby a un determinato nome o livello non garantiscono che il daemon verrà utilizzato solo per il livello specificato. Vale a dire che quando sono disponibili più daemon in standby, viene utilizzato quello associato. Se un livello risulta impossibile ed è disponibile uno standby, verrà utilizzato quest'ultimo anche se è associato a un livello a un daemon con nome diverso.
Se impostata su true, il daemon in standby leggerà continuamente il journal dei metadati di un livello attivo. In tal modo si otterrà una cache dei metadati approntata e si velocizzerà il processo di failover se il daemon che serve il livello viene meno.
A un livello attivo è possibile assegnare un solo daemon di riproduzione in standby. Se due daemon sono entrambi impostati per la riproduzione in standby, uno di essi sarà arbitrariamente prioritario e l'altro diventerà un normale daemon in standby non di riproduzione.
Un daemon che entra in stato di riproduzione in standby, verrà utilizzato come standby per il livello successivo. Se un altro livello risulta impossibile, il daemon di riproduzione in standby non verrà utilizzato come sostituto, anche se non ve ne sono altri in standby disponibili.
Configurare questa impostazione per fare in modo che il daemon in standby venga impiegato al posto di un livello non riuscito se l'ultimo daemon che lo contiene corrisponde a tale nome.
Configurare questa impostazione per fare in modo che il daemon in standby venga impiegato al posto del livello specificato. Se un altro livello risulta impossibile, non verrà utilizzato il daemon per sostituirlo.
Utilizzare insieme a mds_standby_for_fscid
per specificare il livello del file system desiderato nel caso di più file system.
Se mds_standby_for_rank
è impostata, questa impostazione è un semplice qualificatore che indica a quale livello del file system si fa riferimento.
Se mds_standby_for_rank
non è impostata, l'impostazione di FSCID farà in modo che il daemon consideri come destinazione qualsiasi livello nell'FSCID specificato. Utilizzare questa impostazione se si desidera utilizzare un daemon per qualsiasi livello, ma solo in un determinato file system.
Questa impostazione viene utilizzata sugli host di monitoraggio. Per default è su true.
Se viene impostata su false, i daemon configurati con standby_replay=true
diventeranno attivi solo se il livello/nome per il quale sono stati configurati risulta impossibile. D'altro canto, se questa impostazione è su true, è possibile che un daemon configurato con standby_replay=true
venga assegnato a un altro livello.
Di seguito sono riportati diversi esempi di configurazioni ceph.conf
. Sarà quindi possibile applicare a tutti i server la configurazione ceph.conf
e quella dei daemon oppure disporre di un file diverso su ciascun server contenente la configurazione di deamon di un server specifico.
Due daemon MDS "a" e "b" agiscono in coppia. Quello cui attualmente non è assegnato un livello diventerà il daemon di riproduzione in standby successivo.
[mds.a] mds standby replay = true mds standby for rank = 0 [mds.b] mds standby replay = true mds standby for rank = 0
È possibile impostare le quote in qualsiasi sottodirectory del file system Ceph. La quota consente di limitare il numero di byte o file memorizzati al di sotto del punto specificato nella gerarchia della directory.
L'uso delle quote con CephFS pone le limitazioni seguenti:
Le quote Ceph contano sul fatto che il client, al raggiungimento di uno specifico limite, interrompa la scrittura sul file system di cui esegue il montaggio. La parte server non può impedire a un client dannoso di scrivere quanti più dati possibile. Le quote non devono essere utilizzate per evitare il riempimento del file system negli ambienti con client completamente inattendibili.
I processi che scrivono sul file system verranno interrotti poco dopo il raggiungimento del limite di quota. Verrà loro inevitabilmente concesso di scrivere alcuni dati oltre il limite configurato. I client scrittori verranno interrotti entro alcuni decimi di secondo dopo il superamento di tale limite.
Le quote sono supportate dal client dello spazio utente (libcephfs, ceph-fuse). I client kernel Linux 4.17 e versioni successive supportano le quote CephFS sui cluster di SUSE Enterprise Storage 6. I client kernel (anche le versioni recenti) non sono in grado di gestire le quote sui cluster meno recenti, anche se possono impostarne gli attributi estesi.
Per applicare le quote, il client deve disporre dell'accesso all'inode della directory sulla quale sono configurate. Il client non applicherà la quota se dispone dell'accesso limitato a un percorso specifico (ad esempio home/user
) in base alla funzionalità MDS e se la quota è configurata su una directory antenato a cui il client non ha accesso (/home
). Quando si utilizzano restrizioni dell'accesso basate sul percorso, assicurarsi di configurare la quota in una directory a cui il client dispone dell'accesso (home/user
) o in un elemento nidificato in un livello inferiore.
È possibile configurare le quote CephFS tramite gli attributi estesi virtuali:
ceph.quota.max_files
Configura un limite di file.
ceph.quota.max_bytes
Configura un limite di byte.
Se gli attributi vengono visualizzati su un inode della directory, la quota viene configurata in questa posizione. Se gli attributi non sono presenti, in questa directory non viene impostata nessuna quota (anche se potrebbe comunque esserne configurata una nella directory superiore).
Per impostare una quota di 100 MB, eseguire:
cephadm@mds >
setfattr -n ceph.quota.max_bytes -v 100000000 /SOME/DIRECTORY
Per impostare una quota di 10.000 file, eseguire:
cephadm@mds >
setfattr -n ceph.quota.max_files -v 10000 /SOME/DIRECTORY
Per visualizzare l'impostazione della quota, eseguire:
cephadm@mds >
getfattr -n ceph.quota.max_bytes /SOME/DIRECTORY
cephadm@mds >
getfattr -n ceph.quota.max_files /SOME/DIRECTORY
Se il valore dell'attributo esteso è "0", la quota non è impostata.
Per rimuovere una quota, eseguire:
cephadm@mds >
setfattr -n ceph.quota.max_bytes -v 0 /SOME/DIRECTORYcephadm@mds >
setfattr -n ceph.quota.max_files -v 0 /SOME/DIRECTORY
Le snapshot CephFS creano una vista di sola lettura del file system relativa al momento in cui vengono acquisite. È possibile creare una snapshot in qualsiasi directory. La snapshot includerà tutti i dati del file system nella directory specificata. In seguito alla creazione della snapshot, i dati memorizzati nel buffer vengono trasferiti in modo asincrono da diversi client. Di conseguenza, la creazione delle snapshot è un processo molto rapido.
Se sono presenti più file system CephFS che condividono un singolo pool (tramite spazi dei nomi), le relative snapshot entreranno in conflitto e l'eliminazione di una snapshot comporterà l'assenza di dati file su altre snapshot che condividono lo stesso pool.
La funzione delle snapshot CephFS è abilitata per default sui nuovi file system. Per abilitarla sui file system esistenti, eseguire:
cephadm@adm >
ceph fs set CEPHFS_NAME allow_new_snaps true
In seguito all'abilitazione delle snapshot, tutte le directory in CephFS avranno una sottodirectory.snap
speciale.
I client kernel CephFS hanno una limitazione: non sono in grado di gestire più di 400 snapshot in un albero della directory. Il numero di snapshot deve essere sempre tenuto al di sotto di questo limite, a prescindere dal client utilizzato. Se si utilizzano client CephFS meno recenti, come SLE12-SP3, tenere presente che superare le 400 snapshot è dannoso per le operazioni perché si verificherà un arresto anomalo del client.
Configurare l'impostazione client snapdir
per assegnare un nome diverso alla sottodirectory delle snapshot.
Per creare una snapshot, creare una sottodirectory nella directory .snap
con un nome personalizzato. Ad esempio, per creare una snapshot della directory /CEPHFS_MOUNT/2/3/
, eseguire:
tux >
mkdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME
Per eliminare una snapshot, rimuovere la relativa sottodirectory all'interno della directory .snap
:
tux >
rmdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME