NFS Ganesha è un server NFS (fare riferimento a Sharing File Systems with NFS, in lingua inglese) che viene eseguito in uno spazio di indirizzo dell'utente come parte del kernel del sistema operativo. Con NFS Ganesha, è possibile collegare un meccanismo di memorizzazione, come Ceph, e accedervi da qualsiasi client NFS.
I compartimenti S3 vengono esportati in NFS in base a ogni singolo utente, ad esempio tramite il percorso GANESHA_NODE:/USERNAME/BUCKETNAME
.
Un CephFS viene esportato per default tramite il percorso GANESHA_NODE:/cephfs
.
Per istruzioni sull'installazione, vedere Capitolo 12, Installazione di NFS Ganesha.
Per un elenco di tutti i parametri disponibili nel file di configurazione, vedere:
man ganesha-config
man ganesha-ceph-config
per le opzioni dello strato di astrazione del file system (FSAL, File System Abstraction Layer) CephFS.
man ganesha-rgw-config
per le opzioni FSAL Object Gateway.
In questa sezione sono incluse informazioni utili per configurare il server NFS Ganesha in modo che i dati del cluster siano accessibili tramite Object Gateway e CephFS.
La configurazione di NFS Ganesha viene controllata da /etc/ganesha/ganesha.conf
. Le modifiche al file vengono sovrascritte quando si esegue la fase 4 DeepSea. Per modificare le impostazioni in modo permanente, modificare il file /srv/salt/ceph/ganesha/files/ganesha.conf.j2
ubicato nel Salt master.
In questa sezione è descritto come configurare le sezioni EXPORT
in ganesha.conf
.
EXPORT { Export_Id = 1; Path = "/"; Pseudo = "/"; Access_Type = RW; Squash = No_Root_Squash; [...] FSAL { Name = CEPH; } }
Ciascuna esportazione deve disporre di un "Export_Id" (Id di esportazione) (obbligatorio).
Percorso di esportazione nel pool CephFS correlato (obbligatorio). Consente di esportare le sottodirectory da CephFS.
Percorso di esportazione NFS di destinazione (obbligatorio per NFSv4). Definisce sotto quale percorso di esportazione NFS sono disponibili i dati esportati.
Esempio: con il valore /cephfs/
e dopo aver eseguito
root #
mount GANESHA_IP:/cephfs/ /mnt/
I dati CephFS sono disponibili nella directory /mnt/cephfs/
sul client.
"RO" per accesso in sola lettura, l'impostazione di default è "None".
Opzione squash NFS.
Esportazione dello strato di astrazione del file system (FSAL, File System Abstraction Layer). Vedere Sezione 14.2.1.2, «Sottosezione FSAL».
EXPORT { [...] FSAL { Name = CEPH; } }
Definisce il back end utilizzato da NFS Ganesha. I valori consentiti sono CEPH
per CephFS o RGW
per Object Gateway. A seconda della scelta, è necessario definire role-mds
o role-rgw
in policy.cfg
.
RGW { ceph_conf = "/etc/ceph/ceph.conf"; name = "name"; cluster = "ceph"; }
Punta al file ceph.conf
. Quando si esegue la distribuzione con DeepSea, non è necessario modificare questo valore.
Nome dell'utente client Ceph utilizzato da NFS Ganesha.
Nome del cluster Ceph. Attualmente SUSE Enterprise Storage 5 supporta solo un nome cluster, che per default è ceph
.
Per default, NFS Ganesha utilizza la porta 2049 per NFS e la 875 per il supporto rquota. Per modificare i numeri di porta di default, utilizzare le opzioni NFS_Port
e RQUOTA_Port
incluse nella sezione NFS_CORE_PARAM
, ad esempio:
NFS_CORE_PARAM { NFS_Port = 2060; RQUOTA_Port = 876; }
È possibile definire ruoli NFS Ganesha personalizzati per i nodi del cluster. Tali ruoli vengono quindi assegnati ai ruoli in policy.cfg
. I ruoli consentono:
a nodi NFS Ganesha separati di accedere a Object Gateway e CephFS.
di assegnare diversi utenti Object Gateway ai nodi NFS Ganesha.
Il fatto di disporre di diversi utenti Object Gateway consente ai nodi NFS Ganesha di accedere a diversi compartimenti S3. È possibile utilizzare i compartimenti S3 per il controllo dell'accesso. Nota: non confondere i compartimenti S3 con i compartimenti Ceph utilizzati nella mappa CRUSH.
Nella seguente procedura di esempio per Salt master è illustrato come creare due ruoli NFS Ganesha con diversi utenti Object Gateway. In questo esempio, vengono utilizzati i ruoli gold
e silver
, per i quali DeepSea fornisce già i file di configurazione di esempio.
Aprire il file /srv/pillar/ceph/stack/global.yml
con un editor a scelta. Creare il file qualora non esistesse.
Il file deve contenere le righe seguenti:
rgw_configurations: - rgw - silver - gold ganesha_configurations: - silver - gold
Successivamente, è possibile assegnare questi ruoli nel file policy.cfg
.
Creare un file /srv/salt/ceph/rgw/users/users.d/gold.yml
e aggiungere il contenuto seguente:
- { uid: "gold1", name: "gold1", email: "gold1@demo.nil" }
Creare un file /srv/salt/ceph/rgw/users/users.d/silver.yml
e aggiungere il contenuto seguente:
- { uid: "silver1", name: "silver1", email: "silver1@demo.nil" }
Adesso, per ogni ruolo è necessario creare i modelli per il file ganesha.conf
. Il modello originale di DeepSea è un buon inizio. Creare due copie:
root #
cd
/srv/salt/ceph/ganesha/files/root #
cp
ganesha.conf.j2 silver.conf.j2root #
cp
ganesha.conf.j2 gold.conf.j2
Sono richiesti i portachiavi per i nuovi ruoli affinché questi accedano al cluster. Per fornire l'accesso, copiare ganesha.j2
:
root #
cp
ganesha.j2 silver.j2root #
cp
ganesha.j2 gold.j2
Copiare il portachiavi per Object Gateway:
root #
cd
/srv/salt/ceph/rgw/files/root #
cp
rgw.j2 silver.j2root #
cp
rgw.j2 gold.j2
In Object Gateway è inoltre necessaria la configurazione per i ruoli diversi:
root #
cd
/srv/salt/ceph/configuration/files/root #
cp
ceph.conf.rgw silver.confroot #
cp
ceph.conf.rgw gold.conf
Assegnare i ruoli appena creati ai nodi del cluster in /srv/pillar/ceph/proposals/policy.cfg
:
role-silver/cluster/NODE1.sls role-gold/cluster/NODE2.sls
SostituireNODE1 e NODE2 con i nomi dei nodi cui si desidera assegnare i ruoli.
Eseguire le fasi da 0 a 4 di DeepSea.
Nella seguente procedura di esempio per Salt master è illustrato come creare due nuovi ruoli diversi che utilizzano CephFS e Object Gateway:
Aprire il file /srv/pillar/ceph/rgw.sls
con un editor a scelta. Creare il file qualora non esistesse.
Il file deve contenere le righe seguenti:
rgw_configurations: ganesha_cfs: users: - { uid: "demo", name: "Demo", email: "demo@demo.nil" } ganesha_rgw: users: - { uid: "demo", name: "Demo", email: "demo@demo.nil" } ganesha_configurations: - ganesha_cfs - ganesha_rgw
Successivamente, è possibile assegnare questi ruoli nel file policy.cfg
.
Adesso, per ogni ruolo è necessario creare i modelli per il file ganesha.conf
. Il modello originale di DeepSea è un buon inizio. Creare due copie:
root #
cd
/srv/salt/ceph/ganesha/files/root #
cp
ganesha.conf.j2 ganesha_rgw.conf.j2root #
cp
ganesha.conf.j2 ganesha_cfs.conf.j2
Modificare ganesha_rgw.conf.j2
e rimuovere la sezione:
{% if salt.saltutil.runner('select.minions', cluster='ceph', roles='mds') != [] %} [...] {% endif %}
Modificare ganesha_cfs.conf.j2
e rimuovere la sezione:
{% if salt.saltutil.runner('select.minions', cluster='ceph', roles=role) != [] %} [...] {% endif %}
Sono richiesti i portachiavi per i nuovi ruoli affinché questi accedano al cluster. Per fornire l'accesso, copiare ganesha.j2
:
root #
cp
ganesha.j2 ganesha_rgw.j2root #
cp
ganesha.j2 ganesha_cfs.j2
È possibile rimuovere la riga caps mds = "allow *"
da ganesha_rgw.j2
.
Copiare il portachiavi per Object Gateway:
root #
cp
/srv/salt/ceph/rgw/files/rgw.j2 \ /srv/salt/ceph/rgw/files/ganesha_rgw.j2
Per Object Gateway è necessaria la configurazione del nuovo ruolo:
root #
cp
/srv/salt/ceph/configuration/files/ceph.conf.rgw \ /srv/salt/ceph/configuration/files/ceph.conf.ganesha_rgw
Assegnare i ruoli appena creati ai nodi del cluster in /srv/pillar/ceph/proposals/policy.cfg
:
role-ganesha_rgw/cluster/NODE1.sls role-ganesha_cfs/cluster/NODE1.sls
SostituireNODE1 e NODE2 con i nomi dei nodi cui si desidera assegnare i ruoli.
Eseguire le fasi da 0 a 4 di DeepSea.
Per abilitare e avviare il servizio NFS Ganesha, eseguire:
root #
systemctl
enable nfs-ganesharoot #
systemctl
start nfs-ganesha
Riavviare NFS Ganesha con:
root #
systemctl
restart nfs-ganesha
Quando si avvia o riavvia NFS Ganesha, il timeout di tolleranza per NFS v4 è di 90 secondi. Durante la moratoria, le nuove richieste dai client vengono rifiutate attivamente. Pertanto, è possibile che i client subiscano un rallentamento delle richieste durante lo stato di moratoria di NFS.
È possibile modificare il livello di debug di default NIV_EVENT
modificando il file /etc/sysconfig/nfs-ganesha
. Sostituire NIV_EVENT
con NIV_DEBUG
o NIV_FULL_DEBUG
. L'aumento del livello di dettaglio del log può produrre grandi quantità di dati nei file di log.
OPTIONS="-L /var/log/ganesha/ganesha.log -f /etc/ganesha/ganesha.conf -N NIV_EVENT"
Quando si modifica il livello di log è necessario riavviare il servizio.
Quando si utilizza NFS v3, è possibile verificare se le condivisioni NFS vengono esportate nel nodo server di NFS Ganesha:
root #
showmount
-e / (everything)
Per montare la condivisione NFS esportata (come configurato nella Sezione 14.2, «Configurazione») su un host client, eseguire:
root #
mount
-t nfs -o rw,noatime,sync \ nfs_ganesha_server_hostname:/ /path/to/local/mountpoint
La documentazione originale su NFS Ganesha è disponibile al sito https://github.com/nfs-ganesha/nfs-ganesha/wiki/Docs (in lingua inglese).