Saltar al contenutoSaltar alla navigazione delle pagine: pagina precedente [chiave d’accesso p]/pagina successiva [chiave d’accesso n]
Si applica a SUSE Enterprise Storage 6

21 NFS Ganesha: esportazione dei dati Ceph tramite NFS

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.

Nota
Nota: prestazioni di NFS Ganesha

A causa dell'aumento dell'overhead del protocollo e della latenza aggiuntiva causati dagli hop di rete extra tra il client e lo storage, l'accesso a Ceph tramite un gateway NFS potrebbe ridurre notevolmente le prestazioni dell'applicazione se confrontate con quelle dei client CephFS o degli Object Gateway nativi.

21.1 Installazione

Per istruzioni sull'installazione, vedere Capitolo 12, Installazione di NFS Ganesha.

21.2 Configurazione

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 NFS Ganesha è composta da due parti: configurazione del servizio e configurazione delle esportazioni. La configurazione del servizio è controllata dal file /etc/ganesha/ganesha.conf. Tenere presente che le modifiche apportate a questo file vengono sovrascritte quando si esegue la fase 4 di DeepSea. Per modificare le impostazioni in modo permanente, modificare il file /srv/salt/ceph/ganesha/files/ganesha.conf.j2 ubicato nel Salt master. La configurazione delle esportazioni viene memorizzata nel cluster Ceph come oggetto RADOS.

21.2.1 Configurazione del servizio

La configurazione del servizio viene memorizzata in /etc/ganesha/ganesha.conf e controlla tutte le impostazioni del daemon NFS Ganesha, inclusa la posizione di memorizzazione della configurazione delle esportazioni nel cluster Ceph. Tenere presente che le modifiche apportate a questo file vengono sovrascritte quando si esegue la fase 4 di DeepSea. Per modificare le impostazioni in modo permanente, modificare il file /srv/salt/ceph/ganesha/files/ganesha.conf.j2 ubicato nel Salt master.

21.2.1.1 Sezione RADOS_URLS

La sezione RADOS_URLS consente di configurare l'accesso al cluster Ceph per la lettura della configurazione NFS Ganesha dagli oggetti RADOS.

RADOS_URLS {
  Ceph_Conf = /etc/ceph/ceph.conf;

  UserId = "ganesha.MINION_ID";
  watch_url = "rados://RADOS_POOL/ganesha/conf-MINION_ID";
}
Ceph_Conf

Ubicazione del percorso del file di configurazione Ceph.

UserId

ID utente cephx.

watch_url

URL dell'oggetto RADOS per il controllo delle notifiche di ricaricamento.

21.2.1.2 Sezione RGW

RGW {
  ceph_conf = "/etc/ceph/ceph.conf";
  name = "name";
  cluster = "ceph";
}
ceph_conf

Punta al file ceph.conf. Quando si esegue la distribuzione con DeepSea, non è necessario modificare questo valore.

name

Nome dell'utente client Ceph utilizzato da NFS Ganesha.

cluster

Nome del cluster Ceph. Attualmente SUSE Enterprise Storage 6 supporta solo un nome cluster, che per default è ceph.

21.2.1.3 URL dell'oggetto RADOS

%url rados://RADOS_POOL/ganesha/conf-MINION_ID

NFS Ganesha supporta la lettura della configurazione da un oggetto RADOS. La direttiva %url consente di specificare un URL RADOS che identifica l'ubicazione dell'oggetto RADOS.

Un URL RADOS può essere in due formati: rados://<POOL>/<OBJECT> o rados://<POOL>/<NAMESPACE>/<OBJECT>, dove POOL è il pool RADOS in cui è memorizzato l'oggetto, NAMESPACE è lo spazio dei nomi del pool in cui è memorizzato l'oggetto e OBJECT è il nome dell'oggetto.

Per supportare le capacità di gestione di NFS Ganesha del Ceph Dashboard, è necessario seguire una convenzione sul nome dell'oggetto RADOS per ogni daemon del servizio. Il nome dell'oggetto deve essere nel formato conf-MINION_ID, dove MINION_ID corrisponde all'ID del Salt minion del nodo su cui è in esecuzione il servizio.

Questo URL viene già generato da DeepSea e non è pertanto necessario apportarvi modifiche.

21.2.1.4 Modifica delle porte NFS Ganesha di default

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;
}

21.2.2 Configurazione delle esportazioni

La configurazione delle esportazioni viene memorizzata come oggetto RADOS nel cluster Ceph. Ogni blocco di esportazione viene memorizzato nel proprio oggetto RADOS denominato export-<id>, dove <id> deve corrispondere all'attributo Export_ID della configurazione dell'esportazione. L'associazione tra le esportazioni e i servizi NFS Ganesha viene effettuata tramite gli oggetti conf-MINION_ID. Ogni oggetto servizio contiene un elenco degli URL RADOS per ciascuna esportazione esportata da tale servizio. Un blocco di esportazione è simile a quanto riportato di seguito:

EXPORT
{
  Export_Id = 1;
  Path = "/";
  Pseudo = "/";
  Access_Type = RW;
  Squash = No_Root_Squash;
  [...]
  FSAL {
    Name = CEPH;
  }
}

Per creare l'oggetto RADOS per il blocco di esportazione riportato sopra, è necessario innanzitutto memorizzare il codice del blocco di esportazione in un file. Quindi, sarà possibile utilizzare lo strumento dell'interfaccia riga di comando RADOS per memorizzare i contenuti del file salvato in precedenza in un oggetto RADOS.

cephadm@adm > rados -p POOL -N NAMESPACE put export-EXPORT_ID EXPORT_FILE

In seguito alla creazione dell'oggetto di esportazione, sarà possibile associare l'esportazione a un'istanza del servizio aggiungendo l'URL RADOS corrispondente dell'oggetto esportazione all'oggetto servizio. Le sezioni seguenti descrivono come configurare un blocco di esportazione.

21.2.2.1 Sezione di esportazione principale

Export_Id

Ciascuna esportazione deve disporre di un "Export_Id" (Id di esportazione) (obbligatorio).

Path

Percorso di esportazione nel pool CephFS correlato (obbligatorio). Consente di esportare le sottodirectory da CephFS.

Pseudo

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.

Access_Type

"RO" per l'accesso in sola lettura, "RW" per l'accesso in sola scrittura e "None" per nessun accesso.

Suggerimento
Suggerimento: restrizione dell'accesso ai client

Se si lascia invariata l'impostazione Access_Type = RW nella sezione EXPORT principale e si limita l'accesso a un client specifico nella sezione CLIENT, gli altri client saranno comunque in grado di eseguire la connessione. Per disabilitare l'accesso a tutti i client e abilitarlo soltanto per client specifici, impostare Access_Type = None nella sezione EXPORT e quindi specificare una modalità di accesso meno restrittiva per uno o più client nella sezione CLIENT:

EXPORT {

	FSAL {
 access_type = "none";
 [...]
 }

 CLIENT {
		clients = 192.168.124.9;
		access_type = "RW";
		[...]
 }
[...]
}
Squash

Opzione squash NFS.

FSAL

Esportazione dello strato di astrazione del file system (FSAL, File System Abstraction Layer). Vedere Sezione 21.2.2.2, «Sottosezione FSAL».

21.2.2.2 Sottosezione FSAL

EXPORT
{
  [...]
  FSAL {
    Name = CEPH;
  }
}
Name

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.

21.3 Ruoli NFS Ganesha personalizzati

È 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.

21.3.1 Utenti Object Gateway diversi per NFS Ganesha

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.

  1. Aprire il file /srv/pillar/ceph/stack/global.yml con un editor a scelta. Creare il file qualora non esistesse.

  2. 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.

  3. 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" }
  4. 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@master # cd /srv/salt/ceph/ganesha/files/
    root@master # cp ganesha.conf.j2 silver.conf.j2
    root@master # cp ganesha.conf.j2 gold.conf.j2
  5. Sono richiesti i portachiavi per i nuovi ruoli affinché questi accedano al cluster. Per fornire l'accesso, copiare ganesha.j2:

    root@master # cp ganesha.j2 silver.j2
    root@master # cp ganesha.j2 gold.j2
  6. Copiare il portachiavi per Object Gateway:

    root@master # cd /srv/salt/ceph/rgw/files/
    root@master # cp rgw.j2 silver.j2
    root@master # cp rgw.j2 gold.j2
  7. In Object Gateway è inoltre necessaria la configurazione per i ruoli diversi:

    root@master # cd /srv/salt/ceph/configuration/files/
    root@master # cp ceph.conf.rgw silver.conf
    root@master # cp ceph.conf.rgw gold.conf
  8. 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.

  9. Eseguire le fasi da 0 a 4 di DeepSea.

21.3.2 Separazione di FSAL CephFS e Object Gateway

Nella seguente procedura di esempio per Salt master è illustrato come creare due nuovi ruoli diversi che utilizzano CephFS e Object Gateway:

  1. Aprire il file /srv/pillar/ceph/rgw.sls con un editor a scelta. Creare il file qualora non esistesse.

  2. 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.

  3. 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@master # cd /srv/salt/ceph/ganesha/files/
    root@master # cp ganesha.conf.j2 ganesha_rgw.conf.j2
    root@master # cp ganesha.conf.j2 ganesha_cfs.conf.j2
  4. Modificare ganesha_rgw.conf.j2 e rimuovere la sezione:

    {% if salt.saltutil.runner('select.minions', cluster='ceph', roles='mds') != [] %}
            [...]
    {% endif %}
  5. Modificare ganesha_cfs.conf.j2 e rimuovere la sezione:

    {% if salt.saltutil.runner('select.minions', cluster='ceph', roles=role) != [] %}
            [...]
    {% endif %}
  6. Sono richiesti i portachiavi per i nuovi ruoli affinché questi accedano al cluster. Per fornire l'accesso, copiare ganesha.j2:

    root@master # cp ganesha.j2 ganesha_rgw.j2
    root@master # cp ganesha.j2 ganesha_cfs.j2

    È possibile rimuovere la riga caps mds = "allow *" da ganesha_rgw.j2.

  7. Copiare il portachiavi per Object Gateway:

    root@master # cp /srv/salt/ceph/rgw/files/rgw.j2 \
    /srv/salt/ceph/rgw/files/ganesha_rgw.j2
  8. Per Object Gateway è necessaria la configurazione del nuovo ruolo:

    root@master # cp /srv/salt/ceph/configuration/files/ceph.conf.rgw \
    /srv/salt/ceph/configuration/files/ceph.conf.ganesha_rgw
  9. 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.

  10. Eseguire le fasi da 0 a 4 di DeepSea.

21.3.3 Operazioni supportate

L'interfaccia RGW NFS supporta la maggior parte delle operazioni su file e directory, con le restrizioni seguenti:

  • I collegamenti che includono collegamenti simbolici non sono supportati.

  • Gli elenchi di controllo dell'accesso NFS non sono supportati. La proprietà e le autorizzazioni di gruppo e utente Unix sono supportate.

  • Non è possibile spostare o rinominare le directory. È possibile spostare i file tra le directory.

  • Sono supportate soltanto le operazioni di I/O di scrittura sequenziali e complete. Pertanto, le operazioni di scrittura sono applicate come upload. Molte operazioni di I/O tipiche, come la modifica di file esistenti, non riusciranno perché eseguono memorizzazioni non sequenziali. Alcune utility di file scrivono apparentemente in modo sequenziale (ad esempio alcune versioni di tar GNU), ma potrebbero non riuscire a causa di memorizzazioni occasionali non sequenziali. Generalmente, se si effettua il montaggio tramite NFS, è possibile forzare un'operazione di I/O sequenziale dell'applicazione a eseguire operazioni di scrittura in sequenza sul server NFS tramite il montaggio sincrono (l'opzione -o sync). I client NFS che non sono in grado di effettuare il montaggio sincrono (ad esempio Microsoft Windows*) non potranno eseguire l'upload dei file.

  • NFS RGW supporta le operazioni di lettura-scrittura soltanto per i blocchi di dimensioni inferiori a 4 MB.

21.4 Avvio o riavvio di NFS Ganesha

Per abilitare e avviare il servizio NFS Ganesha, eseguire:

root@minion > systemctl enable nfs-ganesha
root@minion > systemctl start nfs-ganesha

Riavviare NFS Ganesha con:

root@minion > 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.

21.5 Impostazione del livello di log

È 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.

21.6 Verifica della condivisione NFS esportata

Quando si utilizza NFS v3, è possibile verificare se le condivisioni NFS vengono esportate nel nodo server di NFS Ganesha:

root@minion > showmount -e
/ (everything)

21.7 Montaggio della condivisione NFS esportata

Per montare la condivisione NFS esportata (come configurato nella Sezione 21.2, «Configurazione») su un host client, eseguire:

root # mount -t nfs -o rw,noatime,sync \
 nfs_ganesha_server_hostname:/ /path/to/local/mountpoint
Stampa pagina