Vai al contenuto
documentation.suse.com / Guida alle operazioni e all'amministrazione
SUSE Enterprise Storage 7

Guida alle operazioni e all'amministrazione

Autori: Tomáš Bažant, Alexandra Settle, e Liam Proven
Data di pubblicazione: 11 dic 2023
Lista delle figure

Copyright © 2020–2023 SUSE LLC e collaboratori. Tutti i diritti riservati.

Tranne laddove diversamente specificato, il presente documento è fornito con licenza Creative Commons Attribution-ShareAlike 4.0 International (CC-BY-SA 4.0): https://creativecommons.org/licenses/by-sa/4.0/legalcode

Per i marchi di fabbrica SUSE vedere http://www.suse.com/company/legal/. Tutti i marchi di fabbrica di terze parti appartengono ai rispettivi proprietari. I simboli di marchio di fabbrica (®, ™ e così via) indicano i marchi di fabbrica appartenenti a SUSE e alle rispettive affiliate. Gli asterischi (*) indicano i marchi di fabbrica di terze parti.

Tutte le informazioni presenti nella presente pubblicazione sono state compilate con la massima attenzione ai dettagli. Ciò, tuttavia, non garantisce una precisione assoluta. SUSE LLC, le rispettive affiliate, gli autori e i traduttori non potranno essere ritenuti responsabili di eventuali errori o delle relative conseguenze.

Informazioni su questa guida

Questa guida è incentrata sui task di routine che gli amministratori devono completare in seguito alla distribuzione del cluster Ceph di base (operazioni giorno 2). Descrive inoltre tutti i metodi supportati per l'accesso ai dati memorizzati in un cluster Ceph.

SUSE Enterprise Storage 7 è un'estensione per SUSE Linux Enterprise Server 15 SP2 che combina le funzionalità del progetto di storage Ceph (http://ceph.com/) con il supporto e l'ingegneria aziendale di SUSE. SUSE Enterprise Storage 7 fornisce alle organizzazioni IT la possibilità di installare un'architettura di storage distribuita in grado di supportare numerosi casi di utilizzo mediante piattaforme hardware commodity.

1 Documentazione disponibile

Nota
Nota: documentazione online e ultimi aggiornamenti

La documentazione relativa ai nostri prodotti è disponibile all'indirizzo https://documentation.suse.com, dove sono disponibili anche gli ultimi aggiornamenti ed è possibile sfogliare ed effettuare il download della documentazione in vari formati. Gli ultimi aggiornamenti della documentazione sono disponibili in lingua inglese.

Inoltre, la documentazione dei prodotti è disponibile nel sistema installato in /usr/share/doc/manual. È inclusa in un pacchetto RPM denominato ses-manual_LANG_CODE. Installarlo se non è già presente nel sistema, ad esempio:

root # zypper install ses-manual_en

Per questo prodotto è disponibile la seguente documentazione:

Guida all'installazione

Questa guida è incentrata sulla distribuzione di un cluster Ceph di base e di servizi aggiuntivi. Illustra inoltre le procedure da completare per eseguire l'upgrade a SUSE Enterprise Storage 7 dalla versione precedente.

Guida all'amministrazione e alle operazioni

Questa guida è incentrata sui task di routine che gli amministratori devono completare in seguito alla distribuzione del cluster Ceph di base (operazioni giorno 2). Descrive inoltre tutti i metodi supportati per l'accesso ai dati memorizzati in un cluster Ceph.

Guida alla sicurezza avanzata

Questa guida descrive le procedure per verificare la protezione del cluster.

Guida alla soluzione dei problemi

Questa guida descrive diversi problemi comuni correlati all'esecuzione di SUSE Enterprise Storage 7 e altri problemi relativi ai componenti pertinenti, come Ceph oppure Object Gateway.

Guida di SUSE Enterprise Storage per Windows

Questa guida descrive le procedure di integrazione, installazione e configurazione degli ambienti Microsoft Windows e SUSE Enterprise Storage tramite il driver di Windows.

2 Invio di feedback

Qualsiasi feedback e contributo alla presente documentazione è ben accetto. È possibile lasciare il proprio feedback tramite tanti canali diversi:

Richieste di servizio e supporto

Per verificare i servizi e le opzioni di supporto disponibili per il proprio prodotto, visitare http://www.suse.com/support/.

Per aprire una richiesta di servizio, è necessario l'abbonamento al SUSE Customer Center. Andare a https://scc.suse.com/support/requests, eseguire il login e fare clic su Crea nuovo.

Segnalazioni di bug

Segnalare i problemi relativi alla documentazione all'indirizzo https://bugzilla.suse.com/. Per la segnalazione dei problemi, è necessario un account Bugzilla.

Per semplificare il processo, è possibile utilizzare i collegamenti per la segnalazione dei bug della documentazione, accanto ai titoli nella versione HTML del presente documento, che preselezionano la categoria e il prodotto corretti in Bugzilla e indirizzano alla sezione corrente. È possibile iniziare a digitare subito la segnalazione di bug.

Contributi

Per contribuire alla presente documentazione, utilizzare i collegamenti Modifica sorgente, accanto ai titoli nella versione HTML del documento, che indirizzano al codice sorgente su GitHub, dove è possibile aprire una richiesta pull. Per inviare un contributo, è necessario un account GitHub.

Per ulteriori informazioni sull'ambiente di documentazione utilizzato, vedere il file README dell'archivio all'indirizzo https://github.com/SUSE/doc-ses.

Posta

È inoltre possibile segnalare errori e inviare feedback sulla documentazione scrivendo all'indirizzo <>. Includere il titolo del documento, la versione del prodotto e la data di pubblicazione del documento. Inoltre, includere il titolo e il numero della sezione pertinente (o specificare l'URL) e fornire una breve descrizione del problema.

3 Convenzioni utilizzate nella documentazione

Nel presente documento vengono utilizzati gli avvisi e le convenzioni tipografiche illustrati di seguito:

  • /etc/passwd: nomi di directory e file

  • SEGNAPOSTO: sostituire SEGNAPOSTO con il valore effettivo

  • PATH: variabile di ambiente

  • ls, --help: comandi, opzioni e parametri

  • user: nome dell'utente o del gruppo

  • package_name: nome di un pacchetto software

  • Alt, AltF1: tasto da premere o combinazione di tasti. I tasti sono visualizzati in maiuscolo come se fossero sulla tastiera.

  • File, File › Save As (Salva con nome): voci di menu, pulsanti

  • AMD/Intel Questo paragrafo riguarda solo le architetture Intel 64/AMD64. Le frecce contrassegnano l'inizio e la fine del blocco di testo.

    IBM Z, POWER Questo paragrafo si riferisce esclusivamente alle architetture IBM Z e POWER. Le frecce contrassegnano l'inizio e la fine del blocco di testo.

  • Capitolo 1, «Capitolo di esempio»: riferimento incrociato a un altro capitolo della presente guida.

  • Comandi che devono essere eseguiti con privilegi di root. Per eseguire tali comandi come utente senza privilegi, è spesso possibile anteporvi il prefisso sudo.

    root # command
    tux > sudo command
  • Comandi che possono essere eseguiti anche da utenti senza privilegi.

    tux > command
  • Avvisi

    Avvertimento
    Avvertimento: avvertenza

    Informazioni essenziali che è indispensabile conoscere prima di procedere. Segnala problemi di sicurezza, potenziali perdite di dati, danni hardware o pericoli fisici.

    Importante
    Importante: avviso importante

    Informazioni importanti che è consigliabile leggere prima di procedere.

    Nota
    Nota: nota

    Informazioni aggiuntive, che illustrano ad esempio le differenze tra le varie versioni del software.

    Suggerimento
    Suggerimento: suggerimento

    Informazioni utili, come linee guida o consigli pratici.

  • Avvisi compatti

    Nota

    Informazioni aggiuntive, che illustrano ad esempio le differenze tra le varie versioni del software.

    Suggerimento

    Informazioni utili, come linee guida o consigli pratici.

4 Ciclo di vita del prodotto e supporto

Prodotti SUSE diversi hanno cicli di vita diversi. Per verificare le date esatte del ciclo di vita di SUSE Enterprise Storage, visitare https://www.suse.com/lifecycle/.

4.1 Definizioni del supporto SUSE

Agli indirizzi https://www.suse.com/support/policy.html e https://www.suse.com/support/programs/long-term-service-pack-support.html è possibile trovare informazioni sulle opzioni e la policy di supporto.

4.2 Informativa sul supporto per SUSE Enterprise Storage

Per ricevere supporto, occorre una sottoscrizione idonea a SUSE. Per visualizzare le offerte di supporto specifiche disponibili, andare a https://www.suse.com/support/ e selezionare il prodotto in uso.

Di seguito sono riportate le definizioni dei livelli di supporto:

L1

Individuazione del problema, ovvero supporto tecnico pensato per fornire informazioni di compatibilità, assistenza per l'utilizzo, operazioni di manutenzione, raccolta di informazioni e risoluzione dei problemi di base tramite la documentazione disponibile.

L2

Isolamento del problema, ovvero supporto tecnico pensato per l'analisi dei dati, la riproduzione dei problemi dei clienti, l'isolamento dell'area del problema e la proposta di una risoluzione dei problemi non risolti al livello 1 o la loro preparazione per il livello 3.

L3

Risoluzione del problema, ovvero supporto tecnico pensato per la risoluzione dei difetti del prodotto identificati al livello di supporto 2.

Per i clienti e i partner con contratto, SUSE Enterprise Storage è fornito con supporto L3 per tutti i pacchetti, a eccezione di quanto segue:

  • Anteprime della tecnologia

  • Suoni, grafiche, tipi di carattere e oggetti grafici

  • Pacchetti che richiedono un contratto con il cliente aggiuntivo

  • Alcuni pacchetti rilasciati come parte del modulo Workstation Extension dispongono soltanto del supporto L2.

  • I pacchetti il cui nome termina in -devel (contenenti file di intestazione e simili risorse per sviluppatori) sono supportati soltanto insieme ai relativi pacchetti principali.

SUSE supporterà soltanto l'utilizzo dei pacchetti originali. Vale a dire, i pacchetti non modificati e non ricompilati.

4.3 Anteprime della tecnologia

Le anteprime della tecnologia sono pacchetti, stack o funzioni forniti da SUSE come anticipazioni sulle future innovazioni. Tramite le anteprime della tecnologia, i clienti hanno la possibilità di testare le nuove tecnologie all'interno del proprio ambiente. I feedback degli utenti sono bene accetti. Se si esegue il test di un'anteprima della tecnologia, contattare il proprio rappresentante SUSE per informarlo della propria esperienza utente e dei casi d'uso. I suggerimenti degli utenti sono molto utili per lo sviluppo futuro.

Le anteprime della tecnologia prevedono le limitazioni seguenti:

  • Le anteprime della tecnologia sono ancora in fase di sviluppo. Di conseguenza, potrebbero essere incomplete a livello di funzioni, instabili o in altri modi non adatte per l'utilizzo nell'ambiente di produzione.

  • Le anteprime della tecnologia non dispongono di alcun supporto.

  • Le anteprime della tecnologia potrebbero essere disponibili soltanto per architetture hardware specifiche.

  • I dettagli e le funzionalità delle anteprime della tecnologia sono soggetti a modifica. Di conseguenza, potrebbe non essere possibile eseguire l'upgrade alle successive release di un'anteprima della tecnologia e potrebbe essere necessario eseguire una nuova installazione.

  • È possibile rimuovere le anteprime della tecnologia da un prodotto in qualsiasi momento. SUSE non si impegna a fornire una versione supportata di tali tecnologie in futuro. Ad esempio, ciò potrebbe applicarsi nelle situazioni in cui SUSE rileva che un'anteprima non soddisfa le esigenze dei clienti o del mercato o che non è conforme agli standard aziendali.

Per una panoramica delle anteprime della tecnologia fornite con il prodotto, vedere le note di rilascio all'indirizzo https://www.suse.com/releasenotes/x86_64/SUSE-Enterprise-Storage/7.

5 Collaboratori di Ceph

Il progetto Ceph e la relativa documentazione sono il risultato del lavoro di centinaia di collaboratori e organizzazioni. Per ulteriori dettagli, consultare la pagina all'indirizzo https://ceph.com/contributors/.

6 Comandi e prompt dei comandi utilizzati nella presente guida

Gli amministratori del cluster Ceph si occupano della configurazione e della modifica del comportamento del cluster tramite l'esecuzione di comandi specifici. Saranno necessari diversi tipi di comandi:

6.1 Comandi correlati a Salt

Questi comandi consentono di distribuire i nodi del cluster Ceph, di eseguire comandi contemporaneamente su più (o su tutti i) nodi del cluster e semplificano l'aggiunta o la rimozione dei nodi del cluster. I comandi utilizzati più di frequente sono ceph-salt e ceph-salt config. È necessario eseguire i comandi Salt sul nodo del Salt Master come root. Questi comandi sono introdotti dal prompt seguente:

root@master # 

Esempio:

root@master # ceph-salt config ls

6.2 Comandi correlati a Ceph

Si tratta di comandi di livello inferiore per la configurazione e l'ottimizzazione di tutti gli aspetti del cluster e dei relativi gateway sulla riga di comando, ad esempio ceph, cephadm, rbd o radosgw-admin.

Per eseguire i comandi correlati a Ceph, è necessario disporre dell'accesso in lettura a una chiave Ceph. Le capacità della chiave definiscono i privilegi dell'utente all'interno dell'ambiente Ceph. Un'opzione consiste nell'eseguire i comandi di Ceph come root (o tramite sudo) e utilizzare il portachiavi di default senza restrizioni "ceph.client.admin.key".

L'opzione consigliata e più sicura consiste nel creare una chiave individuale più restrittiva per ogni utente amministratore e inserirla in una directory in cui gli utenti possano leggerla, ad esempio:

~/.ceph/ceph.client.USERNAME.keyring
Suggerimento
Suggerimento: percorso delle chiavi Ceph

Per utilizzare un utente amministratore e un portachiavi personalizzati, è necessario specificare il nome utente e il percorso della chiave ogni volta che si esegue il comando ceph tramite le opzioni -n client.USER_NAME e --keyring PATH/TO/KEYRING.

Per evitarlo, includere queste opzioni nella variabile CEPH_ARGS nei file ~/.bashrc dei singoli utenti.

I comandi correlati a Ceph possono essere eseguiti su qualsiasi nodo del cluster, ma è consigliabile eseguirli sul nodo admin. In questa documentazione, l'utente cephuser esegue i comandi, pertanto questi vengono introdotti dal prompt seguente:

cephuser@adm > 

Esempio:

cephuser@adm > ceph auth list
Suggerimento
Suggerimento: comandi per nodi specifici

Se nella documentazione è indicato di eseguire un comando su un nodo del cluster con un ruolo specifico, questo verrà indirizzato dal prompt. Esempio:

cephuser@mon > 

6.2.1 Esecuzione di ceph-volume

A partire da SUSE Enterprise Storage 7, i servizi Ceph vengono eseguiti in container. Se è necessario eseguire ceph-volume su un nodo OSD, occorre anteporlo con il comando cephadm, ad esempio:

cephuser@adm > cephadm ceph-volume simple scan

6.3 Comandi Linux generali

I comandi Linux non correlati a Ceph, come mount, cat o openssl, sono introdotti con i prompt cephuser@adm > o root # , a seconda dei privilegi richiesti dal comando correlato.

6.4 Informazioni aggiuntive

Per ulteriori informazioni sulla gestione della chiave Ceph, fare riferimento a Sezione 30.2, «Gestione delle chiavi».

Parte I Ceph Dashboard

1 Informazioni sul Ceph Dashboard

Il Ceph Dashboard è un'applicazione di gestione e monitoraggio Ceph integrata e basata sul Web per l'amministrazione di diversi aspetti e oggetti del cluster. Il dashboard è abilitato automaticamente in seguito alla distribuzione del cluster di base come descritto nel Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.3 “Distribuzione del cluster Ceph”.

Il Ceph Dashboard di SUSE Enterprise Storage 7 dispone di ulteriori funzionalità di gestione basate sul Web per semplificare l'amministrazione di Ceph, incluse le attività di monitoraggio e amministrazione dell'applicazione sul Ceph Manager. Per gestire e monitorare il cluster Ceph, non è più necessario conoscere i complessi comandi di Ceph. È possibile utilizzare l'intuitiva interfaccia o l'API REST integrata del Ceph Dashboard.

Il modulo del Ceph Dashboard visualizza informazioni e statistiche sul cluster Ceph tramite un server Web ospitato da ceph-mgr. Vedere Book “Guida alla distribuzione”, Chapter 1 “SES e Ceph”, Section 1.2.3 “Daemon e nodi Ceph” per ulteriori dettagli su Ceph Manager.

2 Interfaccia utente Web del dashboard

2.1 Login

Per eseguire il login al Ceph Dashboard, puntare il browser verso il relativo URL includendo il numero di porta. Eseguire il comando seguente per trovare l'indirizzo:

cephuser@adm > ceph mgr services | grep dashboard
"dashboard": "https://host:port/",

Il comando restituisce l'URL su cui si trova il Ceph Dashboard. In caso di problemi con questo comando, vedere Book “Troubleshooting Guide”, Chapter 10 “Troubleshooting the Ceph Dashboard”, Section 10.1 “Locating the Ceph Dashboard”.

Schermata di login del Ceph Dashboard
Figura 2.1: Schermata di login del Ceph Dashboard

Eseguire il login con le credenziali create durante la distribuzione del cluster (vedere Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.3.2.9 “Configurazione delle credenziali di login del Ceph Dashboard”).

Suggerimento
Suggerimento: account utente personalizzato

Se non si desidera utilizzare l'account admin di default per accedere al Ceph Dashboard, creare un account utente personalizzato con privilegi di amministratore. Per ulteriori dettagli, fare riferimento alla Capitolo 11, Gestione di utenti e ruoli sulla riga di comando.

L'interfaccia utente del dashboard è graficamente suddivisa in più blocchi: il menu dell'utility in alto a destra sulla schermata, il menu principale a sinistra e il pannello dei contenuti principale.

Home page del Ceph Dashboard
Figura 2.2: Home page del Ceph Dashboard

2.2 Menu dell'utility

Il menu dell'utility occupa il lato superiore destro della schermata e include i task generali correlati più al dashboard che al cluster Ceph. Facendo clic sulle opzioni, è possibile:

  • Modificare la lingua dell'interfaccia del dashboard su: ceco, tedesco, inglese, spagnolo, francese, indonesiano, italiano, giapponese, coreano, polacco, portoghese (brasiliano) e cinese.

  • Accedere a task e notifiche.

  • Visualizzare la documentazione, le informazioni sull'API REST o ulteriori informazioni sul dashboard.

  • Accedere alla gestione utenti e alla configurazione di telemetria.

    Nota
    Nota

    Per descrizioni più dettagliate della riga di comando per i ruoli dell'utente, vedere il Capitolo 11, Gestione di utenti e ruoli sulla riga di comando.

  • Accedere alla configurazione del login; modificare la password o disconnettersi.

2.3 Menu principale

Il menu principale del dashboard occupa il lato superiore sinistro della schermata e copre gli argomenti seguenti:

Dashboard

Per tornare alla home page del Ceph Dashboard.

Cluster

Per visualizzare informazioni dettagliate su host, inventario, Ceph Monitor, servizi, Ceph OSD, configurazione del cluster, mappa CRUSH, moduli di Ceph Manager, log e monitoraggio.

Pool

Per visualizzare e gestire i pool del cluster.

Blocco

Per visualizzare informazioni dettagliate e gestire le immagini del dispositivo di blocco RADOS (RADOS Block Device, RBD), la copia speculare e iSCSI.

NFS

Per visualizzare e gestire le distribuzioni di NFS Ganesha.

Nota
Nota

Se NFS Ganesha non è distribuito, viene visualizzato un avviso. Vedere Sezione 11.6, «Configurazione di NFS Ganesha nel Ceph Dashboard».

File system

Per visualizzare e gestire i CephFS.

Object Gateway

Per visualizzare e gestire i daemon, gli utenti e i compartimenti di Object Gateway.

Nota
Nota

Se Object Gateway non è distribuito, viene visualizzato un avviso. Vedere Sezione 10.4, «Abilitazione del front-end di gestione di Object Gateway».

2.4 Pannello dei contenuti

Il pannello dei contenuti occupa la parte principale della schermata del dashboard. Nella home page del dashboard sono mostrati molti widget utili con informazioni sintetiche sullo stato corrente del cluster, sulla capacità e sulle prestazioni.

2.5 Funzioni dell'interfaccia utente Web comuni

Spesso nel Ceph Dashboard si utilizzano elenchi: ad esempio, elenchi di pool, nodi OSD o dispositivi RBD. Tutti gli elenchi si aggiornano automaticamente per default ogni cinque secondi. I seguenti widget comuni consentono di gestire o regolare tali elenchi:

Fare clic su Image per attivare un aggiornamento manuale dell'elenco.

Fare clic su Image per visualizzare o nascondere colonne della tabella individuali.

Fare clic su Image e immettere (o selezionare) il numero di righe da visualizzare in un'unica pagina.

Fare clic all'interno di Image e filtrare le righe digitando la stringa da ricercare.

Utilizzare Image per modificare la pagina attualmente visualizzata se l'elenco è distribuito su più pagine.

2.6 Widget del dashboard

Ogni widget del dashboard mostra specifiche informazioni sullo stato relative a un determinato aspetto di un cluster Ceph in esecuzione. Alcuni widget sono collegamenti attivi che, dopo essere stati selezionati, reindirizzano l'utente a una pagina dettagliata dell'argomento a cui fanno riferimento.

Suggerimento
Suggerimento: ulteriori dettagli sul passaggio del mouse

Passando il mouse sopra alcuni widget grafici, è possibile visualizzare ulteriori dettagli.

2.6.1 Widget Stato

I widget Stato forniscono una breve panoramica sullo stato corrente del cluster.

Widget Stato
Figura 2.3: Widget Stato
Stato del cluster

Mostra le informazioni di base sullo stato del cluster.

Host

Mostra il numero totale di nodi del cluster.

Monitor

Mostra il numero di monitor in esecuzione e il relativo quorum.

OSD

Mostra il numero totale di OSD, oltre al numero di OSD negli stati up e in.

Manager

Mostra il numero di Ceph Manager Daemon attivi e in standby.

Object Gateway

Mostra il numero di Object Gateway in esecuzione.

Server di metadati

Mostra il numero di server di metadati.

iSCSI Gateway

Mostra il numero di iSCSI Gateway configurati.

2.6.2 Widget Capacità

I widget Capacità mostrano brevi informazioni sulla capacità di storage.

Widget Capacità
Figura 2.4: Widget Capacità
Capacità di base

Mostra il rapporto tra la capacità di storage nominale disponibile e quella utilizzata.

Oggetti

Mostra il numero di oggetti dati memorizzati nel cluster.

Stato gruppo di posizionamento

Visualizza un grafico dei gruppi di posizionamento in base al relativo stato.

Pool

Mostra il numero di pool nel cluster.

Gruppi di posizionamento per OSD

Mostra il numero medio di gruppi di posizionamento per OSD.

2.6.3 Widget Prestazioni

I widget Prestazioni fanno riferimento ai dati di base sulle prestazioni dei client Ceph.

Widget prestazioni
Figura 2.5: Widget prestazioni
Lettura/scrittura client

Numero di operazioni di lettura e scrittura dei client al secondo.

Velocità effettiva client

Quantità in byte al secondo di dati trasferiti ai e dai client Ceph.

Velocità effettiva di recupero

Velocità effettiva dei dati recuperati al secondo.

Pulitura

Mostra lo stato della pulitura (vedere la Sezione 17.4.9, «Pulitura di un gruppo di posizionamento»). Lo stato può essere inactive, enabled o active (inattivo, abilitato o attivo).

3 Gestione degli utenti e dei ruoli del Ceph Dashboard

La gestione degli utenti del dashboard tramite i comandi di Ceph sulla riga di comando è già stata illustrata nella Capitolo 11, Gestione di utenti e ruoli sulla riga di comando.

Questa sezione descrive come gestire gli account utente tramite l'interfaccia utente Web del dashboard.

3.1 Elenco degli utenti

Fare clic su Image nel menu dell'utility e selezionare Gestione utenti.

L'elenco contiene il nome utente, il nome completo, l'indirizzo e-mail, un elenco dei ruoli assegnati, le informazioni sullo stato di abilitazione del ruolo e la data di scadenza della password di ciascun utente.

Gestione utenti
Figura 3.1: Gestione utenti

3.2 Aggiunta di nuovi utenti

Fare clic su Crea in alto a sinistra nell'intestazione della tabella per aggiungere un nuovo utente. Immettere il nome utente e la password e facoltativamente il nome completo e l'e-mail.

Aggiunta di un utente
Figura 3.2: Aggiunta di un utente

Selezionare l'icona a forma di penna per assegnare i ruoli predefiniti all'utente. Confermare con Crea utente.

3.3 Modifica di utenti

Fare clic sulla riga di tabella corrispondente a un utente per evidenziarla. Selezionare Modifica per modificare i dettagli relativi all'utente. Confermare con Modifica utente.

3.4 Eliminazione di utenti

Fare clic sulla riga di tabella corrispondente a un utente per evidenziarla. Selezionare il pulsante a discesa accanto a Modifica e selezionare Elimina dall'elenco per eliminare l'account utente. Attivare la casella di controllo e confermare con Elimina utente.

3.5 Elenco dei ruoli dell'utente

Fare clic su Image nel menu dell'utility e selezionare Gestione utenti. Quindi, fare clic sulla scheda Ruoli.

L'elenco contiene il nome e la descrizione di ciascun ruolo e indica se si tratta di un ruolo di sistema.

Ruoli dell'utente
Figura 3.3: Ruoli dell'utente

3.6 Aggiunta di ruoli personalizzati

Fare clic su Crea in alto a sinistra nell'intestazione della tabella per aggiungere un nuovo ruolo personalizzato. Immettere il nome e la descrizione e, accanto ad Autorizzazioni, selezionare le autorizzazioni appropriate.

Suggerimento
Suggerimento: eliminazione definitiva dei ruoli personalizzati

Se si creano ruoli dell'utente personalizzati e si intende rimuovere il cluster Ceph con il comando ceph-salt purge in un secondo momento, è necessario innanzitutto eliminare definitivamente i ruoli personalizzati. Ulteriori dettagli sono disponibili nella Sezione 13.9, «Rimozione dell'intero cluster Ceph».

Aggiunta di un ruolo
Figura 3.4: Aggiunta di un ruolo
Suggerimento
Suggerimento: attivazione multipla

Tramite l'attivazione della casella di controllo accanto al nome dell'argomento, si attivano tutte le autorizzazioni correlate a quest'ultimo. Se si attiva la casella di controllo Tutto, si attivano tutte le autorizzazioni correlate a tutti gli argomenti.

Confermare con Crea ruolo.

3.7 Modifica dei ruoli personalizzati

Fare clic sulla riga di tabella corrispondente a un utente per evidenziarla. Selezionare Modifica in alto a sinistra nell'intestazione della tabella per modificare la descrizione e le autorizzazioni di un ruolo personalizzato. Confermare con Modifica ruolo.

3.8 Eliminazione dei ruoli personalizzati

Fare clic sulla riga di tabella corrispondente a un ruolo per evidenziarla. Selezionare il pulsante a discesa accanto a Modifica e selezionare Elimina dall'elenco per eliminare il ruolo. Attivare la casella di controllo e confermare con Elimina ruolo.

4 Visualizzazione dei componenti interni del cluster

La voce di menu Cluster consente di visualizzare informazioni dettagliate su host, inventario, Ceph Monitor, servizi, OSD, configurazione, mappa CRUSH, Ceph Manager, log e file di monitoraggio del cluster Ceph.

4.1 Visualizzazione dei nodi del cluster

Fare clic su Cluster › Host per visualizzare un elenco dei nodi del cluster.

Hosts
Figura 4.1: Hosts

Fare clic sulla freccia a discesa accanto al nome di un nodo nella colonna Nome host per visualizzare i dettagli sulle prestazioni del nodo.

Nella colonna Servizi sono elencati tutti i daemon in esecuzione in ogni nodo correlato. Fare clic sul nome di un daemon per visualizzare la relativa configurazione dettagliata.

4.2 Accesso all'inventario del cluster

Fare clic su Cluster › Inventario per visualizzare un elenco dei dispositivi. L'elenco riporta il percorso, il tipo, la disponibilità, il produttore, il modello, la dimensione e gli OSD del dispositivo.

Fare clic per selezionare il nome di un nodo nella colonna Nome host. Quindi, fare clic su Identifica per identificare il dispositivo su cui è in esecuzione l'host. Questa operazione invia al dispositivo l'istruzione di far lampeggiare i LED. Selezionare la durata di questa azione su 1, 2, 5, 10 o 15 minuti. Fare clic su Esegui.

servizi
Figura 4.2: servizi

4.3 Visualizzazione dei Ceph Monitor

Fare clic su Cluster › Monitor per visualizzare un elenco dei nodi del cluster con Ceph Monitor in esecuzione. Il pannello dei contenuti è suddiviso in due viste: Stato e Nel quorum o Non nel quorum.

Nella tabella Stato sono riportate le statistiche generali relative ai Ceph Monitor in esecuzione, inclusi:

  • ID cluster

  • monmap modified

  • monmap epoch

  • quorum con

  • quorum mon

  • required con

  • required mon

I pannelli Nel quorum e Non nel quorum includono il nome, la classificazione, il numero, l'indirizzo IP pubblico e il numero di sessioni aperte di ogni monitor.

Fare clic sul nome di un nodo nella colonna Nome per visualizzare la configurazione del Ceph Monitor correlato.

Ceph Monitor
Figura 4.3: Ceph Monitor

4.4 Visualizzazione dei servizi

Fare clic su Cluster › Servizi per visualizzare i dettagli su ciascuno dei servizi disponibili: crash, Ceph Manager e Ceph Monitor. L'elenco include il nome dell'immagine del container, l'ID dell'immagine del container, lo stato degli elementi in esecuzione, la dimensione e l'ultimo aggiornamento.

Fare clic sulla freccia a discesa accanto al nome di un servizio nella colonna Servizio per visualizzare i dettagli sul daemon. Nell'elenco dei dettagli sono inclusi il nome host, il tipo di daemon, l'ID del daemon, l'ID del container, il nome dell'immagine del container, l'ID dell'immagine del container, il numero di versione, lo stato e l'ultimo aggiornamento.

servizi
Figura 4.4: servizi

4.5 Visualizzazione dei Ceph OSD

Fare clic su Cluster › OSD per visualizzare un elenco dei nodi con daemon OSD in esecuzione. Nell'elenco sono inclusi il nome, l'ID, lo stato, la classe del dispositivo, il numero di gruppi di posizionamento, le dimensioni, l'utilizzo, il grafico delle operazioni di lettura/scrittura nel tempo e la frequenza delle operazioni di lettura/scrittura al secondo di ogni nodo.

Ceph OSD
Figura 4.5: Ceph OSD

Selezionare Flag dal menu a discesa Configurazione a livello di cluster nell'intestazione della tabella per aprire una finestra popup contenente un elenco dei flag che si applicano all'intero cluster. È possibile attivare o disattivare i singoli flag e confermare con Invia.

Flag OSD
Figura 4.6: Flag OSD

Selezionare Priorità di recupero dal menu a discesa Configurazione a livello di cluster nell'intestazione della tabella per aprire una finestra popup contenente un elenco delle priorità di recupero OSD che si applicano all'intero cluster. È possibile attivare il profilo di priorità preferito e ottimizzare i singoli valori di seguito. Confermare con Invia.

Priorità di recupero OSD
Figura 4.7: Priorità di recupero OSD

Fare clic sulla freccia a discesa accanto al nome di un nodo nella colonna Host per visualizzare una tabella estesa con i dettagli sulle impostazioni e le prestazioni del dispositivo. Sfogliando le diverse schede, è possibile visualizzare gli elenchi Attributi, Metadati, Integrità dispositivo, Contatore delle prestazioni, un Istogramma delle operazioni di lettura e scrittura e Dettagli sulle prestazioni.

Dettagli OSD
Figura 4.8: Dettagli OSD
Suggerimento
Suggerimento: esecuzione di task specifici sugli OSD

Dopo aver fatto clic sul nome di un nodo OSD, la riga della tabella verrà evidenziata a indicare che è possibile eseguire task sul nodo. È possibile scegliere di eseguire una delle azioni seguenti: Modifica, Crea, Pulitura, Pulitura approfondita, Ripesa, Disattiva, Attiva, Declassa, Contrassegna come perso, Ripulisci, Elimina definitivamente o Elimina.

Fare clic sulla freccia verso il basso in alto a sinistra nell'intestazione della tabella accanto al pulsante Crea e selezionare il task che si desidera eseguire.

4.5.1 Aggiunta di OSD

Per aggiungere nuovi OSD, seguire la procedura indicata di seguito:

  1. Verificare che alcuni nodi del cluster dispongano di dispositivi di memorizzazione in stato available (disponibile). Quindi, fare clic sulla freccia verso il basso in alto a sinistra nell'intestazione della tabella e selezionate Crea. Si aprirà la finestra Crea OSD.

    Creazione di OSD
    Figura 4.9: Creazione di OSD
  2. Per aggiungere dispositivi di memorizzazione primari per gli OSD, fare clic su Aggiungi. Prima che sia possibile aggiungere dispositivi di memorizzazione, è necessario specificare i criteri di filtro in alto a destra nella tabella Dispositivi primari, ad esempio Tipo hdd. Confermare con Aggiungi.

    Aggiunta di dispositivi primari
    Figura 4.10: Aggiunta di dispositivi primari
  3. Nella finestra Crea OSD aggiornata, è possibile aggiungere dispositivi WAL e DB condivisi o abilitare la cifratura dei dispositivi.

    Creazione di OSD con dispositivi primari aggiunti
    Figura 4.11: Creazione di OSD con dispositivi primari aggiunti
  4. Fare clic su Anteprima per visualizzare l'anteprima della specifica dei DriveGroups per i dispositivi aggiunti in precedenza. Confermare con il pulsante Crea.

    Figura 4.12:
  5. I nuovi dispositivi verranno aggiunti all'elenco degli OSD.

    OSD appena aggiunti
    Figura 4.13: OSD appena aggiunti
    Nota
    Nota

    Lo stato di avanzamento del processo di creazione degli OSD non viene visualizzato. Per completare il processo, sono necessari diversi istanti. Gli OSD verranno visualizzati nell'elenco dopo essere stati distribuiti. Se si desidera controllare lo stato della distribuzione, aprire i log facendo clic su Cluster › Log.

4.6 Visualizzazione della configurazione del cluster

Fare clic su Cluster › Configurazione per visualizzare un elenco completo delle opzioni di configurazione del cluster Ceph. L'elenco contiene il nome dell'opzione, la descrizione breve, i valori attuali e di default e se l'opzione è modificabile.

Configurazione del cluster
Figura 4.14: Configurazione del cluster

Fare clic sulla freccia a discesa accanto a un'opzione di configurazione nella colonna Nome per visualizzare una tabella estesa con le informazioni dettagliate sull'opzione, come il tipo di valore, i valori minimo e massimo consentiti, se è possibile aggiornarla al runtime e molto altro.

Dopo aver evidenziato un'opzione specifica, è possibile modificarne i valori facendo clic sul pulsante Modifica in alto a sinistra nell'intestazione della tabella. Confermare le modifiche con Salva.

4.7 Visualizzazione della mappa CRUSH del

Fare clic su Cluster › Mappa CRUSH per visualizzare una mappa CRUSH del cluster. Per ulteriori informazioni generali sulle mappe CRUSH, fare riferimento alla Sezione 17.5, «Modifica della mappa CRUSH».

Fare clic sulla radice, sui nodi o sui singoli OSD per visualizzare altri dettagli, come il peso crush, la profondità nell'albero della mappa, la classe di dispositivi dell'OSD e molto altro.

Mappa CRUSH
Figura 4.15: Mappa CRUSH

4.8 Visualizzazione dei moduli Manager

Fare clic su Cluster › Moduli Manager per visualizzare un elenco dei moduli Ceph Manager disponibili. Ogni riga contiene il nome del modulo e informazioni sul suo stato di abilitazione o disabilitazione.

Moduli Manager
Figura 4.16: Moduli Manager

Fare clic sulla freccia a discesa accanto a un modulo nella colonna Nome per visualizzare una tabella estesa con le impostazioni dettagliate nella tabella Dettagli di seguito. Modificarle facendo clic sul pulsante Modifica in alto a sinistra nell'intestazione della tabella. Confermare le modifiche con Aggiorna.

Fare clic sulla freccia a discesa accanto al pulsante Modifica in alto a sinistra nell'intestazione della tabella per abilitare o disabilitare un modulo.

4.9 Visualizzazione dei log

Fare clic su Cluster › Log per visualizzare un elenco delle voci di log recenti del cluster. Ogni riga contiene la registrazione dell'orario, il tipo di voce del log e il messaggio registrato.

Fare clic sulla scheda Log delle revisioni per visualizzare le voci di log del sottosistema di revisione. Fare riferimento alla Sezione 11.5, «Controllo delle richieste API» per i comandi di abilitazione o disabilitazione della revisione.

Log
Figura 4.17: Log

4.10 Visualizzazione del monitoraggio

Fare clic su Cluster › Monitoraggio per gestire e visualizzare i dettagli sugli avvisi di Prometheus.

Se Prometheus è attivo, nel relativo pannello dei contenuti è possibile visualizzare le informazioni dettagliate su Avvisi attivi, Tutti gli avvisi o Silenziamenti.

Nota
Nota

Se Prometheus non è stato distribuito, verranno visualizzati un'intestazione di informazioni e un collegamento alla documentazione pertinente.

5 Gestione dei pool

Suggerimento
Suggerimento: ulteriori informazioni sui pool

Per informazioni generali sui pool Ceph, fare riferimento a Capitolo 18, Gestione dei pool di memorizzazione. Per informazioni specifiche sui pool con codice di cancellazione, fare riferimento al Capitolo 19, Pool con codice di cancellazione.

Per elencare tutti i pool disponibili, fare clic su Pools (Pool) nel menu principale.

Nell'elenco sono visualizzati il nome, il tipo, l'applicazione correlata, lo stato del gruppo di posizionamento, le dimensioni della replica, l'ultima modifica, il profilo con codice di cancellazione, il set di regole crush, l'utilizzo e le statistiche di lettura/scrittura relativi a ciascun pool.

Elenco di pool
Figura 5.1: Elenco di pool

Fare clic sulla freccia a discesa accanto a un nome del pool nella colonna Nome per visualizzare una tabella estesa con informazioni dettagliate sul pool, come i dettagli generali, sulle prestazioni e la configurazione.

5.1 Aggiunta di un nuovo pool

Per aggiungere un nuovo pool, fare clic su Crea in alto a sinistra nella tabella dei pool. Nel modulo dei pool è possibile immettere il nome, il tipo, le applicazioni, la modalità di compressione e le quote relativi a un pool, incluso il numero massimo di byte e oggetti. Tale modulo calcola in anticipo il numero di gruppi di posizionamento più adatto per il pool specifico. Tale calcolo si basa sul numero di OSD nel cluster e sul tipo di pool selezionato con le relative impostazioni specifiche. Non appena viene impostato manualmente, il numero dei gruppi di posizionamento viene sostituito da un numero calcolato. Confermare con Crea pool.

Aggiunta di un nuovo pool
Figura 5.2: Aggiunta di un nuovo pool

5.2 Eliminazione di pool

Per eliminare un pool, selezionarlo nella riga della tabella. Fare clic sulla freccia a discesa accanto al pulsante Crea e fare clic su Elimina.

5.3 Modifica delle opzioni di un pool

Per modificare le opzioni di un pool, selezionare il pool nella riga della tabella e fare clic su Modifica in alto a sinistra nella tabella dei pool.

È possibile modificare il nome del pool, aumentare il numero di gruppi di posizionamento e modificare l'elenco delle applicazioni e delle impostazioni di compressione del pool. Confermare con Modifica pool.

6 Gestione del dispositivo di blocco RADOS (RADOS Block Device, RBD)

Per visualizzare un elenco di tutti i dispositivi di blocco RADOS (RBD) disponibili, fare clic su Blocco › Immagini nel menu principale.

L'elenco mostra brevi informazioni sul dispositivo come il nome, il nome pool correlato, lo spazio dei nomi, le dimensioni del dispositivo, il numero e la dimensione degli oggetti sul dispositivo, i dettagli sul provisioning e il dispositivo superiore.

Elenco delle immagini RBD
Figura 6.1: Elenco delle immagini RBD

6.1 Visualizzazione dei dettagli sugli RBD

Per visualizzare altri dettagli su un dispositivo, fare clic sulla relativa riga nella tabella:

Dettagli RBD
Figura 6.2: Dettagli RBD

6.2 Visualizzazione della configurazione dell'RBD

Per visualizzare la configurazione dettagliata di un dispositivo, fare clic sulla relativa riga nella tabella e sulla scheda Configurazione nella tabella inferiore:

Configurazione RBD
Figura 6.3: Configurazione RBD

6.3 Creazione di RBD

Per aggiungere un nuovo dispositivo, fare clic su Crea in alto a sinistra nell'intestazione della tabella ed eseguire quanto riportato di seguito nella schermata Crea RBD:

Aggiunta di un nuovo RBD
Figura 6.4: Aggiunta di un nuovo RBD
  1. Immettere il nome del nuovo dispositivo. Per le restrizioni di denominazione, fare riferimento a Book “Guida alla distribuzione”, Chapter 2 “Requisiti hardware e raccomandazioni”, Section 2.11 “Limitazioni di denominazione”.

  2. Selezionare il pool con l'applicazione rbd assegnata da cui verrà creato il nuovo dispositivo RBD.

  3. Specificare le dimensioni del nuovo dispositivo.

  4. Specificare le opzioni aggiuntive per il dispositivo. Per ottimizzare i parametri del dispositivo, fare clic su Avanzate e immettere i valori relativi alle dimensioni dell'oggetto, all'unità di striping o al numero di striping. Per immettere i limiti di qualità del servizio (QoS, Quality of Service), fare clic su Qualità di servizio.

  5. Confermare con Crea RBD.

6.4 Eliminazione di RBD

Per eliminare un dispositivo, selezionarlo nella riga della tabella. Fare clic sulla freccia a discesa accanto al pulsante Crea e fare clic su Elimina. Confermare l'eliminazione con Delete RBD (Elimina RBD).

Suggerimento
Suggerimento: spostamento degli RBD nel cestino

L'eliminazione di un RBD è un'azione irreversibile. Se invece si seleziona l'opzione Sposta nel cestino, è possibile ripristinare il dispositivo in un secondo momento selezionandolo nella scheda Cestino della tabella principale e facendo clic su Ripristina in alto a sinistra nell'intestazione della tabella.

6.5 Creazione di snapshot del dispositivo di blocco RADOS (RADOS Block Device, RBD)

Per creare uno snapshot del dispositivo di blocco RADOS (RADOS Block Device, RBD), selezionare il dispositivo nella riga della tabella per visualizzare il pannello dei contenuti relativo ai dettagli della configurazione. Selezionare la scheda Snapshot e fare clic su Crea in alto a sinistra nell'intestazione della tabella. Immettere il nome dello snapshot e confermare con Crea snapshot RBD.

Dopo aver selezionato una snapshot, è possibile eseguire ulteriori azioni sul dispositivo, ad esempio rinominarlo, proteggerlo, clonarlo, copiarlo o eliminarlo. L'opzione Rollback consente di ripristinare lo stato del dispositivo dallo snapshot attuale.

Snapshot RBD
Figura 6.5: Snapshot RBD

6.6 Copia speculare RBD

È possibile eseguire la copia speculare delle immagini del dispositivo di blocco RADOS (RADOS Block Device, RBD) in modo asincrono tra due cluster Ceph. È possibile utilizzare il Ceph Dashboard per configurare la replica delle immagini RBD tra due o più cluster. Questa funzionalità è disponibile in due modalità:

Basata sul journal

Questa modalità utilizza la funzione di journaling dell'immagine RBD per assicurare la replica temporizzata e con coerenza per arresto anomalo tra cluster.

Basata su snapshot

Questa modalità utilizza snapshot di copia speculare dell'immagine RBD pianificati periodicamente o creati manualmente per eseguire la replica delle immagini RBD con coerenza per arresto anomalo tra cluster.

La copia speculare è configurata su ogni singolo pool all'interno dei cluster peer ed è possibile configurarla su un sottoinsieme specifico di immagini all'interno del pool o per fare in modo che esegua automaticamente la copia speculare di tutte le immagini del pool quando è in uso soltanto la modalità basata sul journal.

Per la configurazione della copia speculare si utilizza il comando rbd, installato per default in SUSE Enterprise Storage 7. Il daemon rbd-mirror è responsabile del pull degli aggiornamenti delle immagini dal cluster peer remote e della loro applicazione all'immagine nel cluster local. Vedere la Sezione 6.6.2, «Abilitazione del daemon rbd-mirror» per maggiori informazioni sull'abilitazione del daemon rbd-mirror.

A seconda delle necessità di replica, è possibile configurare la copia speculare del dispositivo di blocco RADOS (RADOS Block Device, RBD) sulla replica a una o due vie:

Replica a una via

Quando la copia speculare dei dati avviene soltanto da un cluster primario a uno secondario, il daemon rbd-mirror viene eseguito solo sul cluster secondario.

Replica a due vie

Quando la copia speculare dei dati avviene dalle immagini primarie su un cluster alle immagini non primarie su un altro cluster (e viceversa), il daemon rbd-mirror viene eseguito su entrambi i cluster.

Importante
Importante

Ogni istanza del daemon rbd-mirror deve essere in grado di connettersi contemporaneamente al cluster Ceph local e remote, ad esempio a tutti i monitor e agli host OSD. Inoltre, la larghezza di banda della rete tra i due data center deve essere sufficiente per gestire il workload della copia speculare.

Suggerimento
Suggerimento: informazioni generali

Per informazioni generali e sull'approccio della riga di comando alla copia speculare del dispositivo di blocco RADOS, fare riferimento alla Sezione 20.4, «Copie speculari delle immagini RBD».

6.6.1 Configurazione dei cluster primario e secondario

Nel cluster primario viene creato il pool originale con le immagini. Nel cluster secondario vengono replicati il pool o le immagini dal cluster primario.

Nota
Nota: denominazione relativa

I termini primario e secondario possono essere relativi nel contesto della replica, perché fanno riferimento più ai singoli pool che ai cluster. Ad esempio, nella replica bidirezionale, è possibile eseguire la copia speculare di un pool dal cluster primario a quello secondario mentre è in corso la copia speculare di un altro pool dal cluster secondario a quello primario.

6.6.2 Abilitazione del daemon rbd-mirror

Nelle procedure seguenti è illustrato come eseguire task amministrativi di base per configurare la copia speculare tramite il comando rbd. La copia speculare è configurata per ogni singolo pool nei cluster Ceph.

I passaggi di configurazione del pool devono essere eseguiti su entrambi i cluster peer. Per maggior chiarezza, in queste procedure si presuppone che due cluster, denominati "primary" e "secondary", siano accessibili da un singolo host.

Il daemon rbd-mirror esegue la replica effettiva dei dati del cluster.

  1. Rinominare ceph.conf e i file di portachiavi e copiarli dall'host primario all'host secondario:

    cephuser@secondary > cp /etc/ceph/ceph.conf /etc/ceph/primary.conf
    cephuser@secondary > cp /etc/ceph/ceph.admin.client.keyring \
     /etc/ceph/primary.client.admin.keyring
    cephuser@secondary > scp PRIMARY_HOST:/etc/ceph/ceph.conf \
     /etc/ceph/secondary.conf
    cephuser@secondary > scp  PRIMARY_HOST:/etc/ceph/ceph.client.admin.keyring \
     /etc/ceph/secondary.client.admin.keyring
  2. Per abilitare la copia speculare su un pool con rbd, specificare il comando mirror pool enable, il nome del pool e la modalità di copia speculare:

    cephuser@adm > rbd mirror pool enable POOL_NAME MODE
    Nota
    Nota

    La modalità di copia speculare può essere image o pool. Esempio:

    cephuser@secondary > rbd --cluster primary mirror pool enable image-pool image
    cephuser@secondary > rbd --cluster secondary mirror pool enable image-pool image
  3. Nel Ceph Dashboard, andare a Blocco › Esecuzione di copia speculare. Nella tabella Daemon a sinistra vengono mostrati i daemon rbd-mirror in esecuzione e il relativo stato.

    Esecuzione dei daemon rbd-mirror
    Figura 6.6: Esecuzione dei daemon rbd-mirror

6.6.3 Disabilitazione della copia speculare

Per disabilitare la copia speculare con rbd, specificare il comando mirror pool disable e il nome del pool:

cephuser@adm > rbd mirror pool disable POOL_NAME

Quando si disabilita la copia speculare su un pool in questo modo, questa verrà disabilitata anche su qualsiasi immagine (nel pool) per la quale è stata abilitata esplicitamente la copia speculare.

6.6.4 Esecuzione del bootstrap dei peer

Affinché rbd-mirror rilevi il rispettivo cluster peer, è necessario registrare il peer nel pool e creare un account utente. Questo processo può essere automatizzato con rbd tramite i comandi mirror pool peer bootstrap create e mirror pool peer bootstrap import.

Per creare manualmente un nuovo token di bootstrap con rbd, specificare il comando mirror pool peer bootstrap create, il nome del pool e un nome del sito facoltativo per la descrizione del cluster local:

cephuser@adm > rbd mirror pool peer bootstrap create [--site-name local-site-name] pool-name

L'output di mirror pool peer bootstrap create sarà un token che dovrà essere fornito al comando mirror pool peer bootstrap import. Ad esempio, sul cluster primario:

cephuser@adm > rbd --cluster primary mirror pool peer bootstrap create --site-name primary
  image-pool eyJmc2lkIjoiOWY1MjgyZGItYjg5OS00NTk2LTgwOTgtMzIwYzFmYzM5NmYzIiwiY2xpZW50X2lkIjoicmJkL \
  W1pcnJvci1wZWVyIiwia2V5IjoiQVFBUnczOWQwdkhvQmhBQVlMM1I4RmR5dHNJQU50bkFTZ0lOTVE9PSIsIm1 \
  vbl9ob3N0IjoiW3YyOjE5Mi4xNjguMS4zOjY4MjAsdjE6MTkyLjE2OC4xLjM6NjgyMV0ifQ==

Per importare manualmente il token di bootstrap creato da un altro cluster con il comando rbd, specificare il comando mirror pool peer bootstrap import, il nome del pool, il percorso del file al token creato (oppure "-" per leggere dall'input standard), insieme al nome del sito facoltativo per la descrizione del cluster local e a una direzione di copia speculare (l'impostazione di default è rx-tx per la copia speculare bidirezionale, ma è possibile configurare questa impostazione anche su rx-only per la copia speculare unidirezionale):

cephuser@adm > rbd mirror pool peer bootstrap import [--site-name local-site-name] \
[--direction rx-only or rx-tx] pool-name token-path

Ad esempio, sul cluster secondario:

cephuser@adm > cat >>EOF < token
eyJmc2lkIjoiOWY1MjgyZGItYjg5OS00NTk2LTgwOTgtMzIwYzFmYzM5NmYzIiwiY2xpZW50X2lkIjoicmJkLW \
1pcnJvci1wZWVyIiwia2V5IjoiQVFBUnczOWQwdkhvQmhBQVlMM1I4RmR5dHNJQU50bkFTZ0lOTVE9PSIsIm1v \
bl9ob3N0IjoiW3YyOjE5Mi4xNjguMS4zOjY4MjAsdjE6MTkyLjE2OC4xLjM6NjgyMV0ifQ==
EOF
cephuser@adm > rbd --cluster secondary mirror pool peer bootstrap import --site-name secondary image-pool token

6.6.5 Rimozione di un peer del cluster

Per rimuovere un cluster Ceph peer in copia speculare con il comando rbd, specificare il comando mirror pool peer remove, il nome del pool e l'UUID del peer (disponibile dal comando rbd mirror pool info):

cephuser@adm > rbd mirror pool peer remove pool-name peer-uuid

6.6.6 Configurazione della replica del pool nel Ceph Dashboard

Il daemon rbd-mirror deve disporre dell'accesso al cluster primario per poter eseguire la copia speculare delle immagini RBD. Assicurarsi di aver seguito la procedura descritta nella Sezione 6.6.4, «Esecuzione del bootstrap dei peer» prima di continuare.

  1. Nel cluster primario e secondario, creare pool con un nome identico e assegnarvi l'applicazione rbd. Per ulteriori dettagli sulla creazione di un nuovo pool, fare riferimento alla Sezione 5.1, «Aggiunta di un nuovo pool».

    Creazione di un pool con l'applicazione RBD
    Figura 6.7: Creazione di un pool con l'applicazione RBD
  2. Nei dashboard del cluster primario e secondario, andare a Blocco › Esecuzione della copia speculare. Nella tabella Pool a destra, fare clic sul nome del pool da replicare e, dopo aver fatto clic su Modalità di modifica, selezionare la modalità di replica. In questo esempio, verrà utilizzata la modalità di replica pool, che indica che verranno replicate tutte le immagini all'interno di un determinato pool. Confermare con Aggiorna.

    Configurazione della modalità di replica
    Figura 6.8: Configurazione della modalità di replica
    Importante
    Importante: errore o avviso nel cluster primario

    In seguito all'aggiornamento della modalità di replica, verrà visualizzato un errore o un flag di avviso nella colonna destra corrispondente. Ciò si verifica perché al pool non è stato ancora assegnato nessun utente peer per la replica. Ignorare questo flag per il cluster primario poiché l'utente peer viene assegnato soltanto al cluster secondario.

  3. Nel dashboard del cluster secondario, andare a Blocco › Esecuzione della copia speculare. Aggiungere il peer di copia speculare del pool selezionando Aggiungi peer. Specificare i dettagli del cluster primario:

    Aggiunta delle credenziali del peer
    Figura 6.9: Aggiunta delle credenziali del peer
    Nome cluster

    Stringa univoca arbitraria che identifica il cluster primario come "primary". Il nome del cluster deve essere diverso dal nome reale del cluster secondario.

    ID CephX

    ID utente Ceph creato come peer in copia speculare. In questo esempio è "rbd-mirror-peer".

    Indirizzi dei monitor

    Elenco separato da virgole degli indirizzi IP dei nodi Ceph Monitor del cluster primario.

    Chiave CephX

    Chiave correlata all'ID utente peer. È possibile recuperarla eseguendo sul cluster primario il comando di esempio seguente:

    cephuser@adm > ceph auth print_key pool-mirror-peer-name

    Confermare con Invia.

    Elenco dei pool replicati
    Figura 6.10: Elenco dei pool replicati

6.6.7 Verifica del funzionamento della replica dell'immagine RBD

Una volta che il daemon rbd-mirror è in esecuzione e la replica dell'immagine RBD è configurata nel Ceph Dashboard, è il momento di verificare il funzionamento della replica:

  1. Nel Ceph Dashboard del cluster primario, creare un'immagine RBD per fare in modo che il relativo pool superiore sia quello già creato per scopi di replica. Abilitare le funzioni Blocco esclusivo e Journaling per l'immagine. Per i dettagli sulla creazione delle immagini RBD, fare riferimento alla Sezione 6.3, «Creazione di RBD».

    Nuova immagine RBD
    Figura 6.11: Nuova immagine RBD
  2. Dopo aver creato l'immagine che si desidera replicare, aprire il Ceph Dashboard del cluster secondario e andare a Blocco › Esecuzione della copia speculare. La tabella Pool a destra rifletterà la modifica del numero di immagini # Remoto e sincronizzerà il numero di immagini # Locale.

    Nuova immagine RBD sincronizzata
    Figura 6.12: Nuova immagine RBD sincronizzata
    Suggerimento
    Suggerimento: avanzamento della replica

    Nella tabella Immagini in basso nella pagina viene mostrato lo stato della replica delle immagini RBD. La scheda Problemi include i possibili problemi, la scheda Sincronizzazione in corso visualizza l'avanzamento della replica dell'immagine e la scheda Pronto elenca tutte le immagini di cui è riuscita la replica.

    Stato della replica delle immagini RBD
    Figura 6.13: Stato della replica delle immagini RBD
  3. Nel cluster primario, scrivere i dati nell'immagine RBD. Nel Ceph Dashboard del cluster secondario, andare a Blocco › Immagini e controllare se le dimensioni dell'immagine corrispondente aumentano via via che i dati vengono scritti nel cluster primario.

6.7 Gestione di iSCSI Gateway

Suggerimento
Suggerimento: ulteriori informazioni sugli iSCSI Gateway

Per ulteriori informazioni generali sugli iSCSI Gateway, fare riferimento al Capitolo 22, Ceph iSCSI Gateway.

Per visualizzare un elenco di tutti i gateway e le immagini mappate disponibili, fare clic su Blocco › iSCSI nel menu principale. Si apre la scheda Panoramica, in cui vengono elencati gli iSCSI Gateway attualmente configurati e le immagini RBD mappate.

Nella tabella dei gateway sono elencati lo stato, il numero di destinazioni iSCSI e il numero di sessioni di ogni gateway. Nella tabella Immagini sono elencati il nome, il nome del pool correlato, il tipo di backstore e altri dettagli statistici di ciascuna immagine mappata.

Nella scheda Destinazioni sono elencate le destinazioni iSCSI attualmente configurate.

Elenco delle destinazioni iSCSI
Figura 6.14: Elenco delle destinazioni iSCSI

Per visualizzare ulteriori informazioni dettagliate su una destinazione, fare clic sulla freccia a discesa nella riga della tabella delle destinazioni. Si apre uno schema con struttura ad albero in cui sono elencati i dischi, i portali, gli iniziatori e i gruppi. Fare clic su un elemento per espanderlo e visualizzare i relativi contenuti dettagliati, facoltativamente insieme alla configurazione correlata, nella tabella a destra.

Dettagli sulla destinazione iSCSI
Figura 6.15: Dettagli sulla destinazione iSCSI

6.7.1 Aggiunta di destinazioni iSCSI

Per aggiungere una nuova destinazione iSCSI, fare clic su Crea in alto a sinistra nella tabella Destinazioni e immettere le informazioni richieste.

Aggiunta di una nuova destinazione
Figura 6.16: Aggiunta di una nuova destinazione
  1. Immettere l'indirizzo di destinazione del nuovo gateway.

  2. Fare clic su Aggiungi portale e selezionare uno o più portali iSCSI dall'elenco.

  3. Fare clic su Aggiungi immagine e selezionare una o più immagini RBD per il gateway.

  4. Se è necessario utilizzare l'autenticazione per accedere al gateway, attivare la casella di controllo Autenticazione ACL e immettere le credenziali. Ulteriori opzioni di autenticazione avanzata sono disponibili dopo l'attivazione di Mutual authentication (Autenticazione reciproca) e Discovery authentication (Autenticazione rilevazione).

  5. Confermare con Create Target (Crea destinazione).

6.7.2 Modifica delle destinazioni iSCSI

Per modificare una destinazione iSCSI esistente, fare clic sulla relativa riga nella tabella Destinazioni, quindi su Modifica in alto a sinistra nella tabella.

È quindi possibile modificare la destinazione iSCSI, aggiungere o eliminare portali e aggiungere o eliminare immagini RBD correlate. È inoltre possibile regolare le informazioni di autenticazione per il gateway.

6.7.3 Eliminazione delle destinazioni iSCSI

Per eliminare una destinazione iSCSI, selezionare la riga della tabella e fare clic sulla freccia a discesa accanto al pulsante Modifica, quindi selezionare Elimina. Attivare la casella e confermare con Elimina destinazione iSCSI.

6.8 Qualità di servizio (QoS) RBD

Suggerimento
Suggerimento: ulteriori informazioni

Per ulteriori informazioni generali e per una descrizione delle opzioni di configurazione QoS RBD, fare riferimento alla Sezione 20.6, «Impostazioni QoS».

È possibile configurare le opzioni QoS a livelli diversi.

  • Globalmente

  • Per ogni singolo pool

  • Per ogni singola immagine

La configurazione globale si trova in cima all'elenco e verrà utilizzata per tutte le immagini RBD di nuova creazione e per quelle immagini che non ignorano tali valori sul livello di pool o di immagine RBD. Un valore di opzione specificato globalmente può essere ignorato per ogni singolo pool o per ogni singola immagine. Le opzioni specificate in un pool verranno applicate a tutte le immagini RBD di tale pool a meno che non siano sostituite da un'opzione di configurazione impostata in un'immagine. Le opzioni specificate in un'immagine sostituiranno quelle specificate globalmente e quelle specificate in un pool.

In questo modo, è possibile definire i valori di default globalmente, adattarli a tutte le immagini RBD di un pool specifico e sostituire la configurazione del pool per le singole immagini RBD.

6.8.1 Configurazione delle opzioni a livello globale

Per configurare le opzioni del dispositivo di blocco RADOS (RADOS Block Device, RBD) a livello globale, selezionare Cluster › Configurazione dal menu principale.

  1. Per elencare tutte le opzioni di configurazione globale disponibili, accanto a Livello, selezionare Avanzate dal menu a discesa.

  2. Filtrare i risultati della tabella applicando il filtro rbd_qos nel campo di ricerca per visualizzare un elenco di tutte le opzioni di configurazione disponibili per QoS.

  3. Per modificare un valore, fare clic sulla relativa riga di tabella e selezionare Modifica in alto a sinistra nella tabella. La finestra di dialogo Modifica contiene sei campi diversi tramite cui è possibile specificare i valori. I valori dell'opzione di configurazione RBD sono obbligatori nella casella di testo mgr.

    Nota
    Nota

    A differenza di altre finestre di dialogo, questa non consente di specificare il valore nelle unità adeguate. È necessario impostare tali valori in byte o IOPS, a seconda dell'opzione che si sta modificando.

6.8.2 Configurazione delle opzioni in un nuovo pool

Per creare un nuovo pool e configurarvi le opzioni di configurazione RBD, fare clic su Pool › Crea. Selezionare replicated (replicato) come tipo di pool. Sarà quindi necessario aggiungere il tag applicazione rbd al pool per poter configurare le opzioni QoS RBD.

Nota
Nota

Non è possibile configurare le opzioni di configurazione QoS RBD sui pool con codice di cancellazione. A questo scopo, è necessario modificare il pool dei metadati replicato di un'immagine RBD. La configurazione verrà quindi applicata al pool di dati con codice di cancellazione di tale immagine.

6.8.3 Configurazione delle opzioni in un pool esistente

Per configurare le opzioni QoS RBD in un pool esistente, fare clic su Pool, quindi sulla riga di tabella corrispondente al pool e selezionare Modifica in alto a sinistra nella tabella.

Dovrebbe aprirsi la sezione Configurazione RBD nella finestra di dialogo, seguita dalla sezione Qualità di servizio.

Nota
Nota

Se le sezioni Configurazione RBD o Qualità di servizio non vengono visualizzate, è possibile che si stia modificando un pool con codice di cancellazione (erasure coded), il quale non può essere utilizzato per impostare le opzioni di configurazione RBD, o che il pool non sia configurato per l'utilizzo da parte delle immagini RBD. Nell'ultimo caso, assegnare il tag applicazione rbd al pool per visualizzare le sezioni di configurazione corrispondenti.

6.8.4 Opzioni di configurazione

Fare clic su Qualità di servizio + per espandere le opzioni di configurazione. Verrà visualizzato un elenco di tutte le opzioni disponibili. Le unità delle opzioni di configurazione sono già visualizzate nelle caselle di testo. Se si seleziona l'opzione dei byte per secondo (BPS), è possibile utilizzare scorciatoie come "1M" o "5G". Tali valori verranno convertiti automaticamente in "1 MB/s" e "5 GB/s" rispettivamente.

Se si fa clic sul pulsante di reimpostazione a destra di ciascuna casella di testo, i valori impostati nel pool verranno rimossi. Questa azione non rimuove i valori di configurazione delle opzioni configurate a livello globale o in un'immagine RBD.

6.8.5 Creazione delle opzioni QoS RBD con una nuova immagine RBD

Per creare un'immagine RBD con le opzioni QoS RBD impostate in quest'ultima, selezionare Blocco › Immagini e fare clic su Crea. Fare clic su Avanzate... per espandere la sezione di configurazione avanzata. Fare clic su Qualità di servizio + per aprire tutte le opzioni di configurazione disponibili.

6.8.6 Modifica delle opzioni QoS RBD sulle immagini esistenti

Per modificare le opzioni QoS RBD in un'immagine esistente, selezionare Blocco › Immagini, fare clic sulla riga di tabella corrispondente al pool e quindi su Modifica. Verrà visualizzata la finestra di dialogo per la modifica. Fare clic su Avanzate... per espandere la sezione di configurazione avanzata. Fare clic su Qualità di servizio + per aprire tutte le opzioni di configurazione disponibili.

6.8.7 Modifica delle opzioni di configurazione durante la copia o la clonazione delle immagini

Se un'immagine RBD viene clonata o copiata, per default verranno copiati anche i valori impostati in tale immagine. Se si desidera modificarli durante la copia o la clonazione, specificare i valori di configurazione aggiornati nella finestra di dialogo di copia/clonazione seguendo gli stessi passaggi della procedura di creazione o modifica di un'immagine RBD. Questa operazione consente di impostare (o reimpostare) soltanto i valori dell'immagine RBD copiata o clonata e non influisce sulla configurazione dell'immagine RBD di origine o sulla configurazione globale.

Se si sceglie di reimpostare il valore di opzione durante la procedura di copia/clonazione, nell'immagine non verrà impostato alcun valore per tale opzione. Ciò vuol dire che verrà utilizzato il valore di tale opzione specificato per il pool superiore se in quest'ultimo è stato configurato tale valore. In caso contrario, verrà utilizzata l'impostazione di default globale.

7 Gestione di NFS Ganesha

Suggerimento
Suggerimento: ulteriori informazioni su NFS Ganesha

Per informazioni generali su NFS Ganesha, fare riferimento a Capitolo 25, NFS Ganesha.

Per elencare tutte le esportazioni NFS disponibili, fare clic su NFS nel menu principale.

Nell'elenco sono visualizzati la directory, il nome host del daemon, il tipo di back-end di storage e il tipo di accesso di ciascuna esportazione.

Elenco di esportazioni NFS
Figura 7.1: Elenco di esportazioni NFS

Per visualizzare altri dettagli su un'esportazione NFS, fare clic sulla relativa riga di tabella.

Dettagli esportazione NFS
Figura 7.2: Dettagli esportazione NFS

7.1 Creazione di esportazioni NFS

Per aggiungere una nuova esportazione NFS, fare clic su Crea in alto a sinistra nella tabella delle esportazioni e immettere le informazioni richieste.

Aggiunta di una nuova esportazione NFS
Figura 7.3: Aggiunta di una nuova esportazione NFS
  1. Selezionare uno o più daemon NFS Ganesha che eseguiranno l'esportazione.

  2. Selezionare un back-end di storage.

    Importante
    Importante

    Attualmente, sono supportate soltanto le esportazioni NFS supportate da CephFS.

  3. Selezionare un ID utente e altre opzioni di back-end.

  4. Immettere il percorso della directory per l'esportazione NFS. Se la directory non esiste sul server, questa verrà creata.

  5. Specificare altre opzioni correlate a NFS, come la versione del protocollo NFS supportata, l'opzione pseudo, il tipo di accesso, il tipo di squash o il protocollo di trasporto.

  6. Se è necessario limitare l'accesso solo a client specifici, fare clic su Aggiungi client e aggiungere i rispettivi indirizzi IP insieme alle opzioni del tipo di accesso e di squashing.

  7. Confermare con il pulsante Crea esportazione NFS.

7.2 Eliminazione di esportazioni NFS

Per eliminare un'esportazione, selezionarla ed evidenziarla nella riga della tabella. Fare clic sulla freccia a discesa accanto al pulsante Modifica e selezionare Elimina. Attivare la casella di controllo e confermare con Elimina esportazione NFS.

7.3 Modifica di esportazioni NFS

Per modificare un'esportazione esistente, selezionare ed evidenziare l'esportazione nella riga della tabella e fare clic su Modifica in alto a sinistra nella tabella delle esportazioni.

Quindi, è possibile regolare tutti i dettagli dell'esportazione NFS.

Modifica di un'esportazione NFS
Figura 7.4: Modifica di un'esportazione NFS

8 Gestione di CephFS

Suggerimento
Suggerimento: ulteriori informazioni

Per informazioni dettagliate su CephFS, fare riferimento al Capitolo 23, File system in cluster.

8.1 Visualizzazione della panoramica su CephFS

Fare clic su File system nel menu principale per visualizzare la panoramica dei file system configurati. Nella tabella principale viene mostrato il nome e la data di creazione di ciascun file system e informazioni sul relativo stato di abilitazione o disabilitazione.

Facendo clic sulla riga di tabella corrispondente a un file system, sarà possibile visualizzare i dettagli sulla classificazione e sui pool aggiunti a quest'ultimo.

Dettagli CephFS
Figura 8.1: Dettagli CephFS

Nella parte inferiore della schermata, è possibile visualizzare le statistiche con il numero in tempo reale degli inode MDS e delle richieste client correlati.

Dettagli CephFS
Figura 8.2: Dettagli CephFS

9 Gestione di Object Gateway

Importante
Importante

Prima di iniziare, quando si tenta di accedere al front-end di Object Gateway sul Ceph Dashboard, potrebbe essere visualizzata la notifica seguente:

Information
No RGW credentials found, please consult the documentation on how to enable RGW for the dashboard.
Please consult the documentation on how to configure and enable the Object Gateway management functionality.

Questa notifica viene visualizzata perché Object Gateway non è stato configurato automaticamente da cephadm per il Ceph Dashboard. Se viene visualizzata questa notifica, seguire le istruzioni descritte nella Sezione 10.4, «Abilitazione del front-end di gestione di Object Gateway» per abilitare manualmente il front-end di Object Gateway per il Ceph Dashboard.

Suggerimento
Suggerimento: ulteriori informazioni su Object Gateway

Per ulteriori informazioni generali su Object Gateway, fare riferimento al Capitolo 21, Ceph Object Gateway.

9.1 Visualizzazione degli Object Gateway

Fare clic su Object Gateway › Daemon per visualizzare un elenco degli Object Gateway configurati. L'elenco include l'ID del gateway, il nome host del nodo del cluster su cui è in esecuzione il daemon del gateway e il numero di versione del gateway.

Fare clic sulla freccia a discesa accanto al nome del gateway per visualizzare le relative informazioni dettagliate. Nella scheda Contatori delle prestazioni vengono mostrati i dettagli delle operazioni di lettura/scrittura e le statistiche sulla cache.

Dettagli Gateway
Figura 9.1: Dettagli Gateway

9.2 Gestione degli utenti di Object Gateway

Fare clic su Object Gateway › Utenti per visualizzare un elenco degli utenti di Object Gateway esistenti.

Fare clic sulla freccia a discesa accanto al nome utente per visualizzare i dettagli sull'account utente, come le informazioni sullo stato o i dettagli sulla quota utenti o compartimenti.

Utenti Gateway
Figura 9.2: Utenti Gateway

9.2.1 Aggiunta di un nuovo utente Gateway

Per aggiungere un nuovo utente Gateway, fare clic su Crea in alto a sinistra nell'intestazione della tabella. Inserire le credenziali, i dettagli della chiave S3 e delle quote utenti e compartimenti, quindi confermare con Crea utente.

Aggiunta di un nuovo utente Gateway
Figura 9.3: Aggiunta di un nuovo utente Gateway

9.2.2 Eliminazione di utenti Gateway

Per eliminare un utente Gateway, selezionarlo ed evidenziarlo. Fare clic sul pulsante a discesa accanto a Modifica e selezionare Elimina dall'elenco per eliminare l'account utente. Attivare la casella di controllo e confermare con Elimina utente.

9.2.3 Modifica dei dettagli di un utente Gateway

Per modificare i dettagli di un utente Gateway, selezionare ed evidenziare tale utente. Fare clic su Modifica in alto a sinistra nell'intestazione della tabella.

Modificare le informazioni di base o aggiuntive dell'utente, come le informazioni su capacità, chiavi, sottoutenti e quota. Confermare con Modifica utente.

Nella scheda Chiavi è incluso un elenco di sola lettura degli utenti Gateway e delle relative chiavi segrete e di accesso. Per visualizzare le chiavi, fare clic su un nome utente nell'elenco e selezionare Mostra in alto a sinistra nell'intestazione della tabella. Nella finestra di dialogo Chiave S3, fare clic sull'icona a forma di occhio per rendere visibili le chiavi oppure sull'icona degli appunti per copiare la chiave correlata negli appunti.

9.3 Gestione dei compartimenti Object Gateway

I compartimenti Object Gateway (OGW) implementano la funzionalità dei container di OpenStack Swift e fungono da container per la memorizzazione degli oggetti dati.

Fare clic su Object Gateway › Compartimenti per visualizzare un elenco dei compartimenti Object Gateway.

9.3.1 Aggiunta di un nuovo compartimento

Per aggiungere un nuovo compartimento Object Gateway, fare clic su Crea in alto a sinistra nell'intestazione della tabella. Immettere il nome del compartimento, selezionare il proprietario e impostare la destinazione di posizionamento. Confermare con Crea compartimento.

Nota
Nota

In questa fase è possibile inoltre abilitare il blocco selezionando Abilitato; a ogni modo, si tratta di un'impostazione che può essere configurata in seguito alla creazione. Consultare Sezione 9.3.3, «Modifica del compartimento» per maggiori informazioni.

9.3.2 Visualizzazione dei dettagli del compartimento

Per visualizzare informazioni dettagliate su un compartimento Object Gateway, fare clic sulla freccia a discesa accanto al nome del compartimento.

Dettagli compartimento Gateway
Figura 9.4: Dettagli compartimento Gateway
Suggerimento
Suggerimento: quota compartimento

Sotto la tabella Dettagli, è possibile trovare i dettagli delle impostazioni relative al blocco e alla quota compartimenti.

9.3.3 Modifica del compartimento

Selezionare ed evidenziare un compartimento, quindi fare clic su Modifica in alto a sinistra nell'intestazione della tabella.

È possibile aggiornare il proprietario del compartimento o abilitare il controllo versioni, l'autenticazione a più fattori o il blocco. Confermare le modifiche con Modifica compartimento.

Modifica dei dettagli del compartimento
Figura 9.5: Modifica dei dettagli del compartimento

9.3.4 Eliminazione di un compartimento

Per eliminare un compartimento Object Gateway, selezionarlo ed evidenziarlo. Fare clic sul pulsante a discesa accanto a Modifica e selezionare Elimina dall'elenco per eliminare il compartimento. Attivare la casella di controllo e confermare con Elimina compartimento.

10 Configurazione manuale

Questa sezione fornisce informazioni avanzate per gli utenti che preferiscono configurare manualmente le impostazioni del dashboard nella riga di comando.

10.1 Configurazione del supporto TLS/SSL

Per default, tutte le connessioni HTTP al dashboard sono protette da TLS/SSL. Per la connessione sicura è necessario un certificato SSL. È possibile utilizzare un certificato firmato da se stessi o generarne uno e farlo firmare da un'autorità di certificazione (CA) nota.

Suggerimento
Suggerimento: disabilitazione di SSL

In alcune situazioni, potrebbe essere opportuno disabilitare il supporto SSL. Ad esempio, se il dashboard è in esecuzione dietro un proxy che non supporta SSL.

Prestare attenzione quando si disabilita SSL poiché i nomi utente e le password verranno inviati al dashboard senza cifratura.

Per disabilitare SSL eseguire:

cephuser@adm > ceph config set mgr mgr/dashboard/ssl false
Suggerimento
Suggerimento: riavvio dei processi del Ceph Manager

In seguito alla modifica del certificato e della chiave SSL, è necessario riavviare manualmente i processi di Ceph Manager. Per farlo, eseguire

cephuser@adm > ceph mgr fail ACTIVE-MANAGER-NAME

o disabilitare e riabilitare il modulo del dashboard (questa azione comporta inoltre la rigenerazione del manager):

cephuser@adm > ceph mgr module disable dashboard
cephuser@adm > ceph mgr module enable dashboard

10.1.1 Creazione di certificati autofirmati

La procedura di creazione di un certificato firmato da se stessi per la comunicazione sicura è semplice. In questo modo è possibile rendere operativo il dashboard più rapidamente.

Nota
Nota: complain del browser Web

La maggior parte dei browser Web creerà un complain relativo al certificato firmato da se stessi e richiederà una conferma esplicita prima di stabilire una connessione sicura al dashboard.

Per generare e installare un certificato firmato da se stessi, utilizzare il seguente comando integrato:

cephuser@adm > ceph dashboard create-self-signed-cert

10.1.2 Utilizzo dei certificati firmati dall'autorità di certificazione

Per proteggere correttamente la connessione al dashboard ed eliminare i complain del browser Web per i certificati firmati da se stessi, si consiglia di utilizzare un certificato firmato da una CA.

È possibile generare una coppia di chiavi di certificato con un comando simile al seguente:

root # openssl req -new -nodes -x509 \
  -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 \
  -keyout dashboard.key -out dashboard.crt -extensions v3_ca

Il comando riportato sopra consente di generare i file dashboard.key e dashboard.crt. Dopo aver ottenuto il file dashboard.crt firmato dalla CA, abilitarlo per tutte le istanze di Ceph Manager eseguendo i comandi seguenti:

cephuser@adm > ceph config-key set mgr/dashboard/crt -i dashboard.crt
cephuser@adm > ceph config-key set mgr/dashboard/key -i dashboard.key
Suggerimento
Suggerimento: certificati diversi per ogni istanza del Manager

Se sono richiesti certificati diversi per ogni istanza di Ceph Manager, modificare i comandi e includere il nome dell'istanza come segue. Sostituire NAME con il nome dell'istanza di Ceph Manager (in genere il nome host correlato):

cephuser@adm > ceph config-key set mgr/dashboard/NAME/crt -i dashboard.crt
cephuser@adm > ceph config-key set mgr/dashboard/NAME/key -i dashboard.key

10.2 Modifica del nome host e del numero di porta

Il Ceph Dashboard è associato a un indirizzo TCP/IP e a una porta TCP specifici. Per default, il Ceph Manager attualmente attivo che ospita il dashboard è associato alla porta TCP 8443 (o alla porta 8080 se SSL è disabilitato).

Nota
Nota

Se sugli host che eseguono Ceph Manager (e di conseguenza il Ceph Dashboard) è abilitato un firewall, potrebbe essere necessario modificare la configurazione per abilitare l'accesso a queste porte. Per ulteriori informazioni sulle impostazioni del firewall per Ceph, vedere Book “Troubleshooting Guide”, Chapter 13 “Hints and tips”, Section 13.7 “Firewall settings for Ceph”.

Per default, il Ceph Dashboard è associato a "::", corrispondente a tutti gli indirizzi IPv4 e IPv6 disponibili. È possibile modificare l'indirizzo IP e il numero di porta dell'applicazione Web per fare in modo che vengano applicati a tutte le istanze di Ceph Manager utilizzando i comandi seguenti:

cephuser@adm > ceph config set mgr mgr/dashboard/server_addr IP_ADDRESS
cephuser@adm > ceph config set mgr mgr/dashboard/server_port PORT_NUMBER
Suggerimento
Suggerimento: configurazione delle istanze di Ceph Manager separatamente

Dal momento che ogni daemon ceph-mgr ospita la propria istanza del dashboard, potrebbe essere necessario configurare separatamente tali istanze. Modificare l'indirizzo IP e il numero di porta di un'istanza del Manager specifica utilizzando i comandi seguenti (sostituire NAME con l'ID dell'istanza ceph-mgr):

cephuser@adm > ceph config set mgr mgr/dashboard/NAME/server_addr IP_ADDRESS
cephuser@adm > ceph config set mgr mgr/dashboard/NAME/server_port PORT_NUMBER
Suggerimento
Suggerimento: elenco degli endpoint configurati

Il comando ceph mgr services consente di visualizzare tutti gli endpoint attualmente configurati. Cercare la chiave dashboard per ottenere l'URL per l'accesso al dashboard.

10.3 Regolazione dei nomi utente e delle password

Se non si desidera utilizzare l'account amministratore di default, creare un account utente diverso e associarlo almeno a un ruolo. Viene fornito un set di ruoli di sistema predefiniti che è possibile utilizzare. Per ulteriori informazioni, fare riferimento a Capitolo 11, Gestione di utenti e ruoli sulla riga di comando.

Per creare un utente con privilegi di amministratore, utilizzare il comando seguente:

cephuser@adm > ceph dashboard ac-user-create USER_NAME PASSWORD administrator

10.4 Abilitazione del front-end di gestione di Object Gateway

Per utilizzare la funzionalità di gestione di Object Gateway del dashboard, è necessario immettere le credenziali di login di un utente con il flag system abilitato:

  1. Se non si dispone di un utente con il flag system, crearne uno:

    cephuser@adm > radosgw-admin user create --uid=USER_ID --display-name=DISPLAY_NAME --system

    Annotare le chiavi access_key e secret_key nell'output del comando.

  2. È possibile inoltre ottenere le credenziali di un utente esistente utilizzando il comando radosgw-admin:

    cephuser@adm > radosgw-admin user info --uid=USER_ID
  3. Immettere le credenziali ricevute sul dashboard:

    cephuser@adm > ceph dashboard set-rgw-api-access-key ACCESS_KEY
    cephuser@adm > ceph dashboard set-rgw-api-secret-key SECRET_KEY
Nota
Nota

Per default, il firewall è abilitato in SUSE Linux Enterprise Server 15 SP2. Per ulteriori informazioni sulla configurazione del firewall, vedere Book “Troubleshooting Guide”, Chapter 13 “Hints and tips”, Section 13.7 “Firewall settings for Ceph”.

Vi sono diversi aspetti da considerare:

  • Il nome host e il numero di porta di Object Gateway vengono determinati automaticamente.

  • Se sono utilizzate più zone, l'host all'interno del gruppo di zone master e della zona master verrà determinato automaticamente. Queste impostazioni sono sufficienti per la maggior parte delle configurazioni, ma in alcuni casi è consigliabile impostare manualmente il nome host e la porta:

    cephuser@adm > ceph dashboard set-rgw-api-host HOST
    cephuser@adm > ceph dashboard set-rgw-api-port PORT
  • Potrebbero essere necessarie queste impostazioni aggiuntive:

    cephuser@adm > ceph dashboard set-rgw-api-scheme SCHEME  # http or https
    cephuser@adm > ceph dashboard set-rgw-api-admin-resource ADMIN_RESOURCE
    cephuser@adm > ceph dashboard set-rgw-api-user-id USER_ID
  • Se si utilizza un certificato firmato da se stessi (Sezione 10.1, «Configurazione del supporto TLS/SSL») nella configurazione Object Gateway, disabilitare la verifica del certificato nel dashboard per evitare connessioni rifiutate a causa di certificati firmati da una CA sconosciuta o non corrispondenti al nome host:

    cephuser@adm > ceph dashboard set-rgw-api-ssl-verify False
  • Se Object Gateway impiega troppo tempo per elaborare le richieste e si verificano timeout sul dashboard, è possibile modificare il valore di timeout (impostato per default su 45 secondi):

    cephuser@adm > ceph dashboard set-rest-requests-timeout SECONDS

10.5 Abilitazione della gestione iSCSI

Il Ceph Dashboard gestisce le destinazioni iSCSI tramite l'API REST fornita dal servizio rbd-target-api di Ceph iSCSI Gateway. Assicurarsi che sia installata e abilitata sugli iSCSI Gateway.

Nota
Nota

La funzionalità di gestione di iSCSI del Ceph Dashboard dipende dalla versione 3 più recente del progetto ceph-iscsi. Assicurarsi che il sistema operativo fornisca la versione corretta, altrimenti il Ceph Dashboard non abiliterà le funzioni di gestione.

Se l'API REST ceph-iscsi è configurata in modalità HTTPS e utilizza un certificato autofirmato, configurare il dashboard in modo che eviti la verifica del certificato SSL durante l'accesso all'API ceph-iscsi.

Disabilitare la verifica SSL dell'API:

cephuser@adm > ceph dashboard set-iscsi-api-ssl-verification false

Definire i gateway iSCSI disponibili:

cephuser@adm > ceph dashboard iscsi-gateway-list
cephuser@adm > ceph dashboard iscsi-gateway-add scheme://username:password@host[:port]
cephuser@adm > ceph dashboard iscsi-gateway-rm gateway_name

10.6 Abilitazione del Single Sign-On (SSO)

Single Sign-On (SSO) è un metodo di controllo dell'accesso che consente agli utenti di eseguire contemporaneamente il login su più applicazioni utilizzando un solo ID e una sola password.

Il Ceph Dashboard supporta l'autenticazione esterna degli utenti tramite il protocollo SAML 2.0. Dal momento che l'autorizzazione viene comunque eseguita dal dashboard, è necessario innanzitutto creare gli account utente e associarli ai ruoli desiderati. Tuttavia, il processo di autenticazione può essere eseguito da un provider di identità (IdP) esistente.

Per configurare Single Sign-On, utilizzare il comando seguente:

cephuser@adm > ceph dashboard sso setup saml2 CEPH_DASHBOARD_BASE_URL \
 IDP_METADATA IDP_USERNAME_ATTRIBUTE \
 IDP_ENTITY_ID SP_X_509_CERT \
 SP_PRIVATE_KEY

Parametri:

CEPH_DASHBOARD_BASE_URL

URL di base da cui è accessibile il Ceph Dashboard (ad esempio "https://cephdashboard.local").

IDP_METADATA

URL, percorso del file o contenuto del file XML dei metadati dell'IdP (ad esempio "https://myidp/metadata").

IDP_USERNAME_ATTRIBUTE

Opzionale. Attributo che verrà utilizzato per ottenere il nome utente dalla risposta di autenticazione. L'impostazione di default è "uid".

IDP_ENTITY_ID

Opzionale. Utilizzare quando è presente più di un'entità ID sui metadati dell'IdP.

SP_X_509_CERT / SP_PRIVATE_KEY

Opzionale. Percorso del file o contenuto del certificato che verrà utilizzato dal Ceph Dashboard (provider di servizi) per l'accesso e la cifratura.

Nota
Nota: richieste SAML

Il valore dell'autorità di certificazione delle richieste SAML seguirà questo modello:

CEPH_DASHBOARD_BASE_URL/auth/saml2/metadata

Per visualizzare la configurazione SAML 2.0 corrente, eseguire:

cephuser@adm > ceph dashboard sso show saml2

Per disabilitare Single Sign-On, eseguire:

cephuser@adm > ceph dashboard sso disable

Per verificare se SSO è abilitato, eseguire:

cephuser@adm > ceph dashboard sso status

Per abilitare SSO eseguire:

cephuser@adm > ceph dashboard sso enable saml2

11 Gestione di utenti e ruoli sulla riga di comando

Questa sezione descrive come gestire gli account utente utilizzati dal Ceph Dashboard e fornisce informazioni sulla creazione o modifica degli account utente, nonché sull'impostazione dei ruoli dell'utente e delle autorizzazioni corretti.

11.1 Gestione della policy password

Per default, la funzione della policy password è abilitata insieme ai controlli seguenti:

  • La password supera N caratteri?

  • La nuova password è uguale a quella vecchia?

La funzione della policy password può essere attivata o disattivata:

cephuser@adm > ceph dashboard set-pwd-policy-enabled true|false

I singoli controlli seguenti possono essere attivati o disattivati:

cephuser@adm > ceph dashboard set-pwd-policy-check-length-enabled true|false
cephuser@adm > ceph dashboard set-pwd-policy-check-oldpwd-enabled true|false
cephuser@adm > ceph dashboard set-pwd-policy-check-username-enabled true|false
cephuser@adm > ceph dashboard set-pwd-policy-check-exclusion-list-enabled true|false
cephuser@adm > ceph dashboard set-pwd-policy-check-complexity-enabled true|false
cephuser@adm > ceph dashboard set-pwd-policy-check-sequential-chars-enabled true|false
cephuser@adm > ceph dashboard set-pwd-policy-check-repetitive-chars-enabled true|false

Inoltre, sono disponibili le opzioni seguenti per configurare il comportamento della policy password.

  • La lunghezza minima della password (il valore di default è 8):

    cephuser@adm > ceph dashboard set-pwd-policy-min-length N
  • La complessità minima della password (il valore di default è 10):

    cephuser@adm > ceph dashboard set-pwd-policy-min-complexity N

    La complessità della password è calcolata tramite la classificazione di ciascun carattere da cui è composta.

  • Un elenco di parole separate da virgole che non è possibile utilizzare nella password:

    cephuser@adm > ceph dashboard set-pwd-policy-exclusion-list word[,...]

11.2 Gestione degli account utente

Il Ceph Dashboard supporta la gestione di più account utente. Ogni account utente include un nome utente, una password (memorizzata in formato cifrato tramite il comando bcrypt), un nome facoltativo e un indirizzo e-mail facoltativo.

Gli account utente sono memorizzati nel database di configurazione di Ceph Monitor e sono condivisi a livello globale su tutte le istanze di Ceph Manager.

Utilizzare i comandi seguenti per gestire gli account utente:

Per mostrare gli utenti esistenti:
cephuser@adm > ceph dashboard ac-user-show [USERNAME]
Per creare un nuovo utente:
cephuser@adm > ceph dashboard ac-user-create USERNAME [PASSWORD] [ROLENAME] [NAME] [EMAIL]
Per eliminare un utente:
cephuser@adm > ceph dashboard ac-user-delete USERNAME
Per modificare la password di un utente:
cephuser@adm > ceph dashboard ac-user-set-password USERNAME PASSWORD
Per modificare il nome e l'e-mail di un utente:
cephuser@adm > ceph dashboard ac-user-set-info USERNAME NAME EMAIL
Per disabilitare un utente
cephuser@adm > ceph dashboard ac-user-disable USERNAME
Per abilitare un utente
cephuser@adm > ceph dashboard ac-user-enable USERNAME

11.3 Ruoli e autorizzazioni dell'utente

Questa sezione descrive gli ambiti di sicurezza che è possibile assegnare a un ruolo dell'utente e come gestire i ruoli dell'utente e assegnarli agli account utente.

11.3.1 Definizione degli ambiti di sicurezza

Gli account utente sono associati a un set di ruoli che definiscono le parti del dashboard accessibili dall'utente. Le parti del dashboard sono raggruppate all'interno di un ambito di sicurezza. Gli ambiti di sicurezza sono predefiniti e statici. Attualmente sono disponibili gli ambiti di sicurezza seguenti:

hosts

Include tutte le funzioni relative alla voce di menu Host.

config-opt

Include tutte le funzioni relative alla gestione delle opzioni di configurazione di Ceph.

pool

Include tutte le funzioni relative alla gestione del pool.

osd

Include tutte le funzioni relative alla gestione di Ceph OSD.

monitor

Include tutte le funzioni relative alla gestione di Ceph Monitor.

rbd-image

Include tutte le funzioni relative alla gestione delle immagini del dispositivo di blocco RADOS.

rbd-mirroring

Include tutte le funzioni relative alla gestione della copia speculare del dispositivo di blocco RADOS.

iscsi

Include tutte le funzioni relative alla gestione di iSCSI.

rgw

Include tutte le funzioni relative alla gestione di Object Gateway.

cephfs

Include tutte le funzioni relative alla gestione di CephFS.

manager

Include tutte le funzioni relative alla gestione di Ceph Manager.

log

Include tutte le funzioni relative alla gestione dei log di Ceph.

grafana

Include tutte le funzioni relative al proxy Grafana.

prometheus

Include tutte le funzioni relative alla gestione degli avvisi di Prometheus.

dashboard-settings

Modifica le impostazioni del dashboard.

11.3.2 Specifica dei ruoli dell'utente

Un ruolo consente di specificare un set di mappature tra un ambito di sicurezza e un set di autorizzazioni. Vi sono quattro tipi di autorizzazioni: "read" (lettura), "create" (creazione), "update" (aggiornamento) e "delete" (eliminazione).

Nell'esempio seguente viene specificato un ruolo in cui l'utente dispone delle autorizzazioni "read" e "create" per le funzioni relative alla gestione del pool e delle autorizzazioni complete per le funzioni relative alla gestione delle immagini RBD:

{
  'role': 'my_new_role',
  'description': 'My new role',
  'scopes_permissions': {
    'pool': ['read', 'create'],
    'rbd-image': ['read', 'create', 'update', 'delete']
  }
}

Nel dashboard è già fornito un set di ruoli predefiniti denominati ruoli di sistema. È possibile utilizzarli immediatamente dopo l'installazione da zero del Ceph Dashboard:

amministratore

Fornisce le autorizzazioni complete per tutti gli ambiti di sicurezza.

sola lettura

Fornisce l'autorizzazione in lettura per tutti gli ambiti di sicurezza a eccezione delle impostazioni del dashboard.

block-manager

Fornisce le autorizzazioni complete per gli ambiti "rbd-image", "rbd-mirroring" e "iscsi".

rgw-manager

Fornisce le autorizzazioni complete per l'ambito "rgw".

cluster-manager

Fornisce le autorizzazioni complete per gli ambiti "hosts", "osd", "monitor", "manager" e "config-opt".

pool-manager

Fornisce le autorizzazioni complete per l'ambito "pool".

cephfs-manager

Fornisce le autorizzazioni complete per l'ambito "cephfs".

11.3.2.1 Gestione dei ruoli personalizzati

È possibile creare nuovi ruoli dell'utente utilizzando i comandi seguenti:

Per creare un nuovo ruolo:
cephuser@adm > ceph dashboard ac-role-create ROLENAME [DESCRIPTION]
Per eliminare un ruolo:
cephuser@adm > ceph dashboard ac-role-delete ROLENAME
Per aggiungere autorizzazioni di ambito a un ruolo:
cephuser@adm > ceph dashboard ac-role-add-scope-perms ROLENAME SCOPENAME PERMISSION [PERMISSION...]
Per eliminare le autorizzazioni di ambito da un ruolo:
cephuser@adm > ceph dashboard ac-role-del-perms ROLENAME SCOPENAME

11.3.2.2 Assegnazione dei ruoli agli account utente

Utilizzare i comandi seguenti per assegnare i ruoli agli utenti:

Per impostare i ruoli dell'utente:
cephuser@adm > ceph dashboard ac-user-set-roles USERNAME ROLENAME [ROLENAME ...]
Per aggiungere ulteriori ruoli a un utente:
cephuser@adm > ceph dashboard ac-user-add-roles USERNAME ROLENAME [ROLENAME ...]
Per eliminare i ruoli da un utente:
cephuser@adm > ceph dashboard ac-user-del-roles USERNAME ROLENAME [ROLENAME ...]
Suggerimento
Suggerimento: eliminazione definitiva dei ruoli personalizzati

Se si creano ruoli dell'utente personalizzati e si intende rimuovere il cluster Ceph con lo strumento di esecuzione ceph.purge in un secondo momento, è necessario innanzitutto eliminare definitivamente i ruoli personalizzati. Ulteriori dettagli sono disponibili nella Sezione 13.9, «Rimozione dell'intero cluster Ceph».

11.3.2.3 Esempio: creazione di un utente e di un ruolo personalizzato

Questa sezione illustra la procedura di creazione di un account utente in grado di gestire le immagini RBD, visualizzare e creare pool Ceph e con l'accesso in sola lettura a qualsiasi altro ambito.

  1. Creare un nuovo utente denominato tux:

     cephuser@adm > ceph dashboard ac-user-create tux PASSWORD
  2. Creare un ruolo e specificare le autorizzazioni di ambito:

    cephuser@adm > ceph dashboard ac-role-create rbd/pool-manager
    cephuser@adm > ceph dashboard ac-role-add-scope-perms rbd/pool-manager \
     rbd-image read create update delete
    cephuser@adm > ceph dashboard ac-role-add-scope-perms rbd/pool-manager pool read create
  3. Associare i ruoli all'utente tux:

    cephuser@adm > ceph dashboard ac-user-set-roles tux rbd/pool-manager read-only

11.4 Configurazione del proxy

Se si desidera stabilire un URL fisso per raggiungere il Ceph Dashboard o se non si desidera consentire connessioni dirette ai nodi del manager, è possibile configurare un proxy per l'inoltro automatico delle richieste in entrata all'istanza ceph-mgr attualmente attiva.

11.4.1 Accesso al dashboard con proxy inversi

Se si effettua l'accesso al dashboard tramite una configurazione di proxy inverso, potrebbe essere necessario fornirlo tramite un prefisso URL. Per fare in modo che il dashboard utilizzi i collegamenti ipertestuali che includono il prefisso specificato, è possibile configurare l'impostazione url_prefix:

  cephuser@adm > ceph config set mgr mgr/dashboard/url_prefix URL_PREFIX

Quindi, è possibile accedere al dashboard all'indirizzo http://HOST_NAME:PORT_NUMBER/URL_PREFIX/.

11.4.2 Disabilitazione dei reindirizzamenti

Se il Ceph Dashboard è protetto da un proxy per il bilanciamento del carico come HAProxy, disabilitare il comportamento di reindirizzamento per evitare situazioni in cui gli URL interni (non risolvibili) vengono pubblicati nel client di front-end. Utilizzare il comando seguente per fare in modo che il dashboard generi una risposta con un errore HTTP (500 per default) invece del reindirizzamento al dashboard attivo:

cephuser@adm > ceph config set mgr mgr/dashboard/standby_behaviour "error"

Per reimpostare l'impostazione sul comportamento di reindirizzamento di default, utilizzare il comando seguente:

cephuser@adm > ceph config set mgr mgr/dashboard/standby_behaviour "redirect"

11.4.3 Configurazione dei codici di stato di errore

Se il comportamento di reindirizzamento è disabilitato, è necessario personalizzare il codice di stato HTTP dei dashboard di standby. A questo scopo, eseguire il comando seguente:

cephuser@adm > ceph config set mgr mgr/dashboard/standby_error_status_code 503

11.4.4 Configurazione HAProxy di esempio

La configurazione di esempio seguente è da utilizzare per il pass-through TLS/SSL tramite HAProxy.

Nota
Nota

La configurazione è valida nelle condizioni seguenti: in caso di failover del dashboard, il client di front-end potrebbe ricevere una risposta di reindirizzamento HTTP (303) e verrà reindirizzato a un host non risolvibile.

Ciò avviene quando il failover si verifica durante due controlli di integrità di HAProxy. In questa situazione, il nodo del dashboard precedentemente attivo restituirà la risposta 303 che punta a un nuovo nodo attivo. Per evitare questa situazione, si consiglia di disabilitare il comportamento di reindirizzamento sui nodi di standby.

  defaults
    log global
    option log-health-checks
    timeout connect 5s
    timeout client 50s
    timeout server 450s

  frontend dashboard_front
    mode http
    bind *:80
    option httplog
    redirect scheme https code 301 if !{ ssl_fc }

  frontend dashboard_front_ssl
    mode tcp
    bind *:443
    option tcplog
    default_backend dashboard_back_ssl

  backend dashboard_back_ssl
    mode tcp
    option httpchk GET /
    http-check expect status 200
    server x HOST:PORT ssl check verify none
    server y HOST:PORT ssl check verify none
    server z HOST:PORT ssl check verify none

11.5 Controllo delle richieste API

L'API REST del Ceph Dashboard è in grado di registrare le richieste PUT, POST e DELETE sul log di revisione di Ceph. La funzione di registrazione è disabilita per default, ma è possibile abilitarla con il comando seguente:

cephuser@adm > ceph dashboard set-audit-api-enabled true

Se abilitata, per ciascuna richiesta vengono registrati i parametri seguenti:

from

Origine della richiesta, ad esempio "https://[::1]:44410".

percorso

Percorso dell'API REST, ad esempio /api/auth.

method

"PUT", "POST" o "DELETE".

utente

Nome dell'utente (o "None").

Una voce di log di esempio ha il seguente aspetto:

2019-02-06 10:33:01.302514 mgr.x [INF] [DASHBOARD] \
 from='https://[::ffff:127.0.0.1]:37022' path='/api/rgw/user/exu' method='PUT' \
 user='admin' params='{"max_buckets": "1000", "display_name": "Example User", "uid": "exu", "suspended": "0", "email": "user@example.com"}'
Suggerimento
Suggerimento: disabilitazione della registrazione del payload della richiesta

La registrazione del payload della richiesta (l'elenco degli argomenti e dei relativi valori) è abilitata per default. È possibile disabilitarla nel modo seguente:

cephuser@adm > ceph dashboard set-audit-api-log-payload false

11.6 Configurazione di NFS Ganesha nel Ceph Dashboard

Il Ceph Dashboard è in grado di gestire le esportazioni NFS Ganesha che utilizzano CephFS oppure Object Gateway come backstore. Il dashboard gestisce i file di configurazione di NFS Ganesha memorizzati negli oggetti RADOS sul cluster CephFS. NFS Ganesha deve memorizzare parte della loro configurazione nel cluster Ceph.

Eseguire il comando seguente per configurare l'ubicazione dell'oggetto di configurazione di NFS Ganesha.

cephuser@adm > ceph dashboard set-ganesha-clusters-rados-pool-namespace pool_name[/namespace]

Adesso, è possibile gestire le esportazioni di NFS Ganesha tramite il Ceph Dashboard.

11.6.1 Configurazione di più cluster NFS Ganesha

Il Ceph Dashboard supporta la gestione delle esportazioni di NFS Ganesha appartenenti a diversi cluster NFS Ganesha. Per isolare le singole configurazioni, è consigliabile che ogni cluster NFS Ganesha memorizzi i rispettivi oggetti di configurazione in uno spazio dei nomi/pool RADOS diverso.

Utilizzare il comando seguente per specificare l'ubicazione della configurazione di ciascun cluster NFS Ganesha:

cephuser@adm > ceph dashboard set-ganesha-clusters-rados-pool-namespace cluster_id:pool_name[/namespace](,cluster_id:pool_name[/namespace])*

cluster_id è una stringa arbitraria che identifica in modo univoco il cluster NFS Ganesha.

Se il Ceph Dashboard viene configurato su più cluster NFS Ganesha, l'interfaccia utente Web consente automaticamente di selezionare il cluster a cui appartiene un'esportazione.

11.7 Plug-in di debug

I plug-in del Ceph Dashboard estendono la funzionalità del dashboard. Il plug-in di debug consente la personalizzazione del comportamento del dashboard in base alla modalità di debug. È possibile abilitarlo, disabilitarlo o selezionarlo con il comando seguente:

cephuser@adm > ceph dashboard debug status
Debug: 'disabled'
cephuser@adm > ceph dashboard debug enable
Debug: 'enabled'
cephuser@adm > dashboard debug disable
Debug: 'disabled'

Per default, è disabilitato. Si tratta dell'impostazione consigliata per le distribuzioni di produzione. Se necessario, è possibile abilitare la modalità di debug senza dover riavviare.

Parte II Funzionamento del cluster

  • 12 Determinazione dello stato del cluster
  • Quando un cluster è in esecuzione, è possibile utilizzare lo strumento ceph per monitorarlo. Per determinare lo stato del cluster, in genere occorre verificare lo stato dei Ceph OSD, di Ceph Monitor, dei gruppi di posizionamento e dei server di metadati.

  • 13 Task operativi
  • Per modificare la configurazione di un cluster Ceph esistente, seguire la procedura indicata di seguito:

  • 14 Funzionamento dei servizi Ceph
  • È possibile utilizzare i servizi Ceph a livello di daemon, nodo o cluster. A seconda dell'approccio richiesto, utilizzare cephadm o il comando systemctl.

  • 15 Backup e ripristino
  • Questo capitolo illustra quali parti del cluster Ceph sottoporre a backup per il ripristino della funzionalità.

  • 16 Monitoraggio e creazione di avvisi
  • In SUSE Enterprise Storage 7, cephadm esegue la distribuzione di uno stack di monitoraggio e creazione di avvisi. Gli utenti devono definire i servizi (ad esempio Prometheus, Alertmanager e Grafana) da distribuire con cephadm in un file di configurazione YAML oppure distribuirli tramite l'interfacci…

12 Determinazione dello stato del cluster

Quando un cluster è in esecuzione, è possibile utilizzare lo strumento ceph per monitorarlo. Per determinare lo stato del cluster, in genere occorre verificare lo stato dei Ceph OSD, di Ceph Monitor, dei gruppi di posizionamento e dei server di metadati.

Suggerimento
Suggerimento: modalità interattiva

Per eseguire lo strumento ceph in modalità interattiva, digitare ceph nella riga di comando senza argomenti. La modalità interattiva è più pratica se si devono immettere più comandi ceph in una riga. Esempio:

cephuser@adm > ceph
ceph> health
ceph> status
ceph> quorum_status
ceph> mon stat

12.1 Verifica dello stato di un cluster

È possibile individuare lo stato immediato del cluster mediante ceph status o ceph -s:

cephuser@adm > ceph -s
cluster:
    id:     b4b30c6e-9681-11ea-ac39-525400d7702d
    health: HEALTH_OK

  services:
    mon: 5 daemons, quorum ses-min1,ses-master,ses-min2,ses-min4,ses-min3 (age 2m)
    mgr: ses-min1.gpijpm(active, since 3d), standbys: ses-min2.oopvyh
    mds: my_cephfs:1 {0=my_cephfs.ses-min1.oterul=up:active}
    osd: 3 osds: 3 up (since 3d), 3 in (since 11d)
    rgw: 2 daemons active (myrealm.myzone.ses-min1.kwwazo, myrealm.myzone.ses-min2.jngabw)

  task status:
    scrub status:
        mds.my_cephfs.ses-min1.oterul: idle

  data:
    pools:   7 pools, 169 pgs
    objects: 250 objects, 10 KiB
    usage:   3.1 GiB used, 27 GiB / 30 GiB avail
    pgs:     169 active+clean

L'output fornisce le seguenti informazioni:

  • ID cluster

  • Stato di integrità del cluster

  • Epoca della mappa di monitoraggio e stato del quorum del monitoraggio

  • Epoca della mappa OSD e stato degli OSD

  • Stato di Ceph Manager

  • Stato di Object Gateway

  • Versione della mappa del gruppo di posizionamento

  • Numero di gruppi di posizionamento e pool

  • Quantità nozionale di dati memorizzati e numero di oggetti memorizzati

  • Quantità totale di dati memorizzati.

Suggerimento
Suggerimento: calcolo dell'utilizzo dei dati da parte di Ceph

Il valore used riflette la quantità effettiva di spazio di memorizzazione non elaborato utilizzato. Il valore xxx GB / xxx GB indica la quantità disponibile (il numero inferiore) della capacità di memorizzazione complessiva del cluster. Il numero nozionale riflette le dimensioni dei dati memorizzati prima che vengano replicati, clonati o che ne venga eseguito lo snapshot. Pertanto, di norma la quantità di dati effettivamente memorizzata supera la quantità nozionale memorizzata, poiché Ceph crea repliche dei dati e può anche utilizzare capacità di memorizzazione per la clonazione e gli snapshot.

Altri comandi che consentono di visualizzare informazioni immediate sullo stato sono:

  • ceph pg stat

  • ceph osd pool stats

  • ceph df

  • ceph df detail

Per ottenere le informazioni aggiornate in tempo reale, inserire uno di questi comandi (incluso ceph -s) come argomento del comando watch:

root # watch -n 10 'ceph -s'

Premere CtrlC quando non si desidera più visualizzare le informazioni.

12.2 Verifica dell'integrità del cluster

Dopo l'avvio del cluster e prima della lettura e/o scrittura dei dati, verificare lo stato di integrità del cluster:

cephuser@adm > ceph health
HEALTH_WARN 10 pgs degraded; 100 pgs stuck unclean; 1 mons down, quorum 0,2 \
node-1,node-2,node-3
Suggerimento
Suggerimento

Se sono state specificate ubicazioni non di default per la configurazione o il portachiavi, è possibile specificarne le ubicazioni:

cephuser@adm > ceph -c /path/to/conf -k /path/to/keyring health

Il cluster Ceph restituisce uno dei seguenti codici di stato di integrità:

OSD_DOWN

Uno o più OSD sono contrassegnati. È possibile che il daemon OSD sia stato interrotto o gli OSD peer potrebbero non essere in grado di raggiungere l'OSD nella rete. Tra le cause comuni sono inclusi un'interruzione o crash del daemon, un host inattivo o un'interruzione della rete.

Verificare che l'host sia integro, il daemon avviato e la rete funzionante. Se ha avuto luogo un crash del daemon, è possibile che il file di log del daemon (/var/log/ceph/ceph-osd.*) contenga informazioni di debug.

OSD_crush type_DOWN, ad esempio OSD_HOST_DOWN

Tutti gli OSD in un determinato sottoalbero CRUSH vengono contrassegnati, ad esempio tutti gli OSD in un host.

OSD_ORPHAN

Un OSD è un riferimento nella gerarchia della mappa CRUSH, ma non esiste. È possibile rimuovere l'OSD dalla gerarchia CRUSH con:

cephuser@adm > ceph osd crush rm osd.ID
OSD_OUT_OF_ORDER_FULL

Le soglie di utilizzo per backfillfull (il valore di default è 0,90), nearfull (il valore di default è 0,85), full (il valore di default è 0,95) e/o failsafe_full non sono crescenti. In particolare, ci si aspetta backfillfull < nearfull, nearfull < full e full < failsafe_full.

Per leggere i valori attuali, eseguire:

cephuser@adm > ceph health detail
HEALTH_ERR 1 full osd(s); 1 backfillfull osd(s); 1 nearfull osd(s)
osd.3 is full at 97%
osd.4 is backfill full at 91%
osd.2 is near full at 87%

È possibile modificare le soglie con i comandi seguenti:

cephuser@adm > ceph osd set-backfillfull-ratio ratio
cephuser@adm > ceph osd set-nearfull-ratio ratio
cephuser@adm > ceph osd set-full-ratio ratio
OSD_FULL

Uno o più OSD hanno superato la soglia full e impediscono al cluster di fornire servizi di scrittura. È possibile verificare l'utilizzo da parte del pool con:

cephuser@adm > ceph df

È possibile visualizzare il rapporto full attualmente definito con:

cephuser@adm > ceph osd dump | grep full_ratio

Una soluzione immediata per ripristinare la disponibilità di scrittura consiste nell'aumentare leggermente la soglia completa (full):

cephuser@adm > ceph osd set-full-ratio ratio

Aggiungere un nuovo spazio di memorizzazione al cluster installando più OSD, o eliminare i dati esistenti per liberare spazio.

OSD_BACKFILLFULL

Uno o più OSD hanno superato la soglia backfillfull, impedendo il ribilanciamento dei dati nel dispositivo. Questo è un avviso preliminare che informa l'utente sull'impossibilità di completare il ribilanciamento e che il cluster è quasi pieno. È possibile verificare l'utilizzo da parte del pool con:

cephuser@adm > ceph df
OSD_NEARFULL

Uno o più OSD hanno superato la soglia nearfull. Questo è un avviso preliminare che informa l'utente che il cluster è quasi pieno. È possibile verificare l'utilizzo da parte del pool con:

cephuser@adm > ceph df
OSDMAP_FLAGS

Sono stati impostati uno o più flag del cluster interessato. Ad eccezione di full, è possibile impostare o eliminare i flag con:

cephuser@adm > ceph osd set flag
cephuser@adm > ceph osd unset flag

Tali flag includono:

full

Il cluster è contrassegnato come full (pieno) e non può fornire servizi di scrittura.

pauserd, pausewr

Letture o scritture in pausa

noup

Viene impedito l'avvio degli OSD.

nodown

I rapporti sugli errori degli OSD vengono ignorati, ad esempio quando i monitoraggi non contrassegnano gli OSD come down (inattivi).

noin

Gli OSD contrassegnati precedentemente come out non verranno contrassegnati di nuovo come in all'avvio.

noout

Gli OSD down (inattivi) non verranno contrassegnati automaticamente come out dopo l'intervallo configurato.

nobackfill, norecover, norebalance

Il recupero o il ribilanciamento dei dati è sospeso.

noscrub, nodeep_scrub

La pulitura (vedere Sezione 17.6, «Pulitura dei gruppi di posizionamento») è disabilitata.

notieragent

L'attività di suddivisione in livelli di cache è sospesa.

OSD_FLAGS

Uno o più OSD presentano un flag per OSD del set di interesse. Tali flag includono:

noup

All'OSD non è consentito l'avvio.

nodown

I rapporti di errore per l'OSD specificato verranno ignorati.

noin

Se precedentemente questo OSD è stato contrassegnato automaticamente come out in seguito a un errore, non verrà contrassegnato come in al suo avvio.

noout

Se l'OSD è inattivo, non verrà contrassegnato automaticamente come out dopo l'intervallo configurato.

È possibile impostare ed eliminare i flag per OSD con:

cephuser@adm > ceph osd add-flag osd-ID
cephuser@adm > ceph osd rm-flag osd-ID
OLD_CRUSH_TUNABLES

Nella mappa CRUSH vengono utilizzate impostazioni molto obsolete e deve essere aggiornata. Gli elementi ottimizzabili più obsoleti (vale a dire la versione client più vecchia in grado di connettersi al cluster) che è possibile utilizzare senza attivare questo avviso di stato di integrità vengono determinati dall'opzione di configurazione mon_crush_min_required_version.

OLD_CRUSH_STRAW_CALC_VERSION

Nella mappa CRUSH viene utilizzato un metodo precedente, non ottimale per calcolare i valori del peso intermedio per i compartimenti straw. La mappa CRUSH deve essere aggiornata per utilizzare il metodo più recente (straw_calc_version=1).

CACHE_POOL_NO_HIT_SET

Uno o più pool di cache non sono configurati con un set di accessi per controllare l'utilizzo, impedendo all'agente di suddivisione in livelli di identificare gli oggetti a caldo di essere svuotati o rimossi dalla cache. È possibile configurare i set di accessi nel pool di cache con:

cephuser@adm > ceph osd pool set poolname hit_set_type type
cephuser@adm > ceph osd pool set poolname hit_set_period period-in-seconds
cephuser@adm > ceph osd pool set poolname hit_set_count number-of-hitsets
cephuser@adm > ceph osd pool set poolname hit_set_fpp target-false-positive-rate
OSD_NO_SORTBITWISE

Nessun OSD di versione precedente a Luminous v12 in esecuzione, ma il flag sortbitwise non è stato impostato. È necessario impostare il flag sortbitwise prima di poter avviare gli OSD Luminous v12 o versione più recente:

cephuser@adm > ceph osd set sortbitwise
POOL_FULL

Uno o più pool hanno raggiunto la rispettiva quota e non consentono più le scritture. È possibile impostare le quote dei pool e l'utilizzo con:

cephuser@adm > ceph df detail

È possibile aumentare la quota del pool con

cephuser@adm > ceph osd pool set-quota poolname max_objects num-objects
cephuser@adm > ceph osd pool set-quota poolname max_bytes num-bytes

o eliminare alcuni dati esistenti per ridurre l'utilizzo.

PG_AVAILABILITY

La disponibilità dei dati è ridotta, vale a dire che il cluster non è in grado di fornire servizi di richieste di potenziali letture o scritture per alcuni dati nel cluster. Nello specifico, è impossibile fornire servizi a uno o più gruppi di posizionamento il cui stato non consente richieste I/O. Gli stati dei gruppi di posizionamento problematici includono peering, stale (inattivo), incomplete (incompleto) e la mancanza di active (attivo) (se tali condizioni non vengono annullate rapidamente). Informazioni dettagliate sui gruppi di posizionamento interessati sono recuperabili da:

cephuser@adm > ceph health detail

Nella maggior parte dei casi, la causa radice risiede nell'attuale stato di inattività di uno o più OSD. È possibile interrogare lo stato di specifici gruppi di posizionamento problematici con:

cephuser@adm > ceph tell pgid query
PG_DEGRADED

La ridondanza dei dati è ridotta per alcuni dati, vale a dire che il cluster non dispone del numero desiderato di repliche per tutti i dati (per pool replicati) o di frammenti di codice di cancellazione (per pool con codice di cancellazione). Nello specifico, per uno o più gruppi di posizionamento è impostato il flag degraded o undersized (le istanze di tale gruppo di posizionamento nel cluster non sono sufficienti) oppure non è impostato il flag clean per un periodo di tempo. Informazioni dettagliate sui gruppi di posizionamento interessati sono recuperabili da:

cephuser@adm > ceph health detail

Nella maggior parte dei casi, la causa radice risiede nell'attuale stato di inattività di uno o più OSD. È possibile interrogare lo stato di specifici gruppi di posizionamento problematici con:

cephuser@adm > ceph tell pgid query
PG_DEGRADED_FULL

È possibile che la ridondanza dei dati può sia ridotta o a rischio per alcuni dati a causa della mancanza di spazio libero nel cluster. Nello specifico, per uno o più gruppi di posizionamento è impostato il flag backfill_toofull o recovery_toofull, vale a dire che il cluster non è in grado di eseguire la migrazione o recuperare i dati perché uno o più OSD superano la soglia backfillfull.

PG_DAMAGED

In seguito alla pulitura dei dati (vedere Sezione 17.6, «Pulitura dei gruppi di posizionamento»), nel cluster sono stati rilevati alcuni problemi di incoerenza dei dati. Nello specifico, in uno o più gruppi di posizionamento è impostato il flag inconsistent o snaptrim_error, a indicare che a seguito di un'operazione di pulitura precedente è stato individuato un problema, oppure è impostato il flag repair, a indicare che attualmente è in corso una riparazione per tale incoerenza.

OSD_SCRUB_ERRORS

Dalle puliture dell'OSD sono state rilevate incoerenze.

CACHE_POOL_NEAR_FULL

Un pool di livelli di cache è quasi pieno. "Pieno" in questo contesto è determinato dalla proprietà target_max_bytes e target_max_objects nel pool di cache. Quando il pool raggiunge la soglia di destinazione, è possibile che le richieste di scrittura nel pool si blocchino quando i dati vengono svuotati e rimossi dalla cache, uno stato che di norma comporta latenze molto elevate e prestazioni scarse. È possibile regolare le dimensioni di destinazione del pool di cache con:

cephuser@adm > ceph osd pool set cache-pool-name target_max_bytes bytes
cephuser@adm > ceph osd pool set cache-pool-name target_max_objects objects

È inoltre possibile che le attività di svuotamento e rimozione siano bloccate a causa della disponibilità ridotta, delle prestazioni del livello base o a causa del carico complessivo del cluster.

TOO_FEW_PGS

Il numero di gruppi di posizionamento in uso è sotto la soglia configurabile dei gruppi di posizionamento per OSD mon_pg_warn_min_per_osd. Ciò può comportare una distribuzione e bilanciamento dei dati non ottimali negli OSD del cluster, riducendo le prestazioni complessive.

TOO_MANY_PGS

Il numero di gruppi di posizionamento in uso supera la soglia configurabile di gruppi di posizionamento per OSD mon_pg_warn_max_per_osd. Ciò comporta un utilizzo della memoria maggiore per i daemon OSD, un peering più lento dopo le modifiche allo stato del cluster (ad esempio, riavvii, aggiunte o rimozioni di OSD) e un carico più elevato nei Ceph Manager e Ceph Monitor.

È possibile ridurre il valore pgp_num, ma non il valore pg_num per i pool esistenti. Ciò colloca effettivamente alcuni gruppi di posizionamento sugli stessi set di OSD, mitigando alcuni impatti negativi descritti sopra. È possibile regolare il valore pgp_num con:

cephuser@adm > ceph osd pool set pool pgp_num value
SMALLER_PGP_NUM

Il valore pgp_num di uno o più pool è inferiore a pg_num. Di norma ciò indica che il numero di gruppi di posizionamento è stato incrementato senza incrementare anche comportamento del posizionamento. Di norma questo problema viene risolto impostando pgp_num in modo che corrisponda a pg_num, attivando la migrazione dei dati, con:

cephuser@adm > ceph osd pool set pool pgp_num pg_num_value
MANY_OBJECTS_PER_PG

Uno o più pool presentano un numero medio di oggetti per gruppo di posizionamento che è significativamente più elevato della media complessiva del cluster. La soglia specifica è controllata dal valore di configurazione mon_pg_warn_max_object_skew. Di norma ciò indica che i pool che contengono la maggior parte dei dati nel cluster hanno un numero di gruppi di posizionamento insufficiente e/o che altri pool che non contengono una tale quantità di dati hanno troppi gruppi di posizionamento. È possibile aumentare la soglia per annullare l'avviso di stato di integrità regolando l'opzione di configurazione mon_pg_warn_max_object_skew nei monitoraggi.

POOL_APP_NOT_ENABLED

Un pool contiene uno o più oggetti, ma non è stato contrassegnato per l'utilizzo da parte di un'applicazione particolare. Risolvere questo avviso etichettando il pool per l'utilizzo da parte di un'applicazione. Ad esempio, se il pool viene utilizzato da RBD:

cephuser@adm > rbd pool init pool_name

Se il pool viene utilizzato da un'applicazione personalizzata "foo", è inoltre possibile etichettarla con il comando di livello basso:

cephuser@adm > ceph osd pool application enable foo
POOL_FULL

Uno o più pool hanno raggiunto (o sono prossimi a raggiungere) la rispettiva quota. La soglia per attivare questa condizione di errore è controllata dall'opzione di configurazione mon_pool_quota_crit_threshold. È possibile regolare verso l'alto o verso il basso (o rimuovere) le quote dei pool con:

cephuser@adm > ceph osd pool set-quota pool max_bytes bytes
cephuser@adm > ceph osd pool set-quota pool max_objects objects

Impostando il valore di quota a 0, questa verrà disabilitata.

POOL_NEAR_FULL

Uno o più pool stanno per raggiungere la rispettiva quota. La soglia per attivare questa condizione di avviso è controllata dall'opzione di configurazione mon_pool_quota_warn_threshold. È possibile regolare verso l'alto o verso il basso (o rimuovere) le quote dei pool con:

cephuser@adm > ceph osd osd pool set-quota pool max_bytes bytes
cephuser@adm > ceph osd osd pool set-quota pool max_objects objects

Impostando il valore di quota a 0, questa verrà disabilitata.

OBJECT_MISPLACED

Uno o più oggetti nel cluster non vengono memorizzati nel nodo specificato dal cluster. Ciò indica che la migrazione dei dati causata da una modifica recente del cluster non è stata ancora completata. La posizione errata dei dati non rappresenta una condizione pericolosa. La coerenza dei dati non è mai a rischio e le copie precedenti degli oggetti non vengono mai rimosse finché è presente il numero di copie nuove desiderato (nelle ubicazioni desiderate).

OBJECT_UNFOUND

Impossibile individuare uno o più oggetti nel cluster. Nello specifico, gli OSD sanno che deve esistere una copia nuova o aggiornata di un oggetto, ma negli OSD attualmente attivi non è stata trovata una copia di tale versione dell'oggetto. Le richieste di lettura o scrittura negli oggetti "non trovati" verranno bloccate. Idealmente, è possibile riattivare l'OSD inattivo in cui è presente la copia più recente dell'oggetto non trovato. È possibile identificare gli OSD candidati in stato di peering per i gruppi di posizionamento responsabili dell'oggetto non trovato:

cephuser@adm > ceph tell pgid query
REQUEST_SLOW

Una o più richieste OSD impiegano molto tempo per l'elaborazione. Ciò può essere un'indicazione di carico estremo, dispositivo di memorizzazione lento o bug del software. È possibile interrogare la coda delle richieste sugli OSD in questione mediante l'esecuzione del seguente comando dall'host OSD:

cephuser@adm > ceph daemon osd.id ops

È possibile visualizzare un riepilogo delle richieste recenti più lente:

cephuser@adm > ceph daemon osd.id dump_historic_ops

È possibile individuare l'ubicazione di un OSD con:

cephuser@adm > ceph osd find osd.id
REQUEST_STUCK

Una o più richieste OSD sono state bloccate per un intervallo di tempo relativamente lungo, ad esempio 4.096 secondi. Ciò indica che lo stato del cluster non è integro da un periodo di tempo prolungato (ad esempio il numero di OSD in esecuzione o di gruppi di posizionamento inattivi non è sufficiente) o che sono presenti alcuni problemi interni dell'OSD.

PG_NOT_SCRUBBED

Di recente non è stata eseguita la pulitura di uno o più gruppi di posizionamento (vedere la Sezione 17.6, «Pulitura dei gruppi di posizionamento»). Di norma la pulitura dei gruppi di posizionamento viene eseguita ogni mon_scrub_interval secondi e questo avviso si attiva quando sono trascorsi mon_warn_not_scrubbed secondi senza che abbia avuto luogo una pulitura. La pulitura dei gruppi di posizionamento non verrà eseguita se questi non sono contrassegnati come puliti, il che può verificarsi se sono posizionati male o sono danneggiati (vedere PG_AVAILABILITY e PG_DEGRADED di cui sopra). È possibile avviare manualmente la pulitura di un gruppo di posizionamento pulito con:

cephuser@adm > ceph pg scrub pgid
PG_NOT_DEEP_SCRUBBED

Di recente non è stata eseguita la pulitura approfondita di uno o più gruppi di posizionamento (vedere Sezione 17.6, «Pulitura dei gruppi di posizionamento»). Di norma la pulitura dei gruppi di posizionamento viene eseguita ogni osd_deep_mon_scrub_interval secondi e questo avviso si attiva quando sono trascorsi mon_warn_not_deep_scrubbed secondi senza che abbia avuto luogo una pulitura. La pulitura (approfondita) dei gruppi di posizionamento non verrà eseguita se questi non sono contrassegnati come puliti, il che può verificarsi se sono posizionati male o sono danneggiati (vedere PG_AVAILABILITY e PG_DEGRADED di cui sopra). È possibile avviare manualmente la pulitura di un gruppo di posizionamento pulito con:

cephuser@adm > ceph pg deep-scrub pgid
Suggerimento
Suggerimento

Se sono state specificate ubicazioni non di default per la configurazione o il portachiavi, è possibile specificarne le ubicazioni:

root # ceph -c /path/to/conf -k /path/to/keyring health

12.3 Verifica delle statistiche sull'utilizzo di un cluster

Per verificare l'utilizzo e la distribuzione dei dati del cluster nei diversi pool, utilizzare il comando ceph df. Per ottenere ulteriori dettagli, utilizzare ceph df detail.

cephuser@adm > ceph df
--- RAW STORAGE ---
CLASS  SIZE    AVAIL   USED     RAW USED  %RAW USED
hdd    30 GiB  27 GiB  121 MiB   3.1 GiB      10.40
TOTAL  30 GiB  27 GiB  121 MiB   3.1 GiB      10.40

--- POOLS ---
POOL                   ID  STORED   OBJECTS  USED     %USED  MAX AVAIL
device_health_metrics   1      0 B        0      0 B      0    8.5 GiB
cephfs.my_cephfs.meta   2  1.0 MiB       22  4.5 MiB   0.02    8.5 GiB
cephfs.my_cephfs.data   3      0 B        0      0 B      0    8.5 GiB
.rgw.root               4  1.9 KiB       13  2.2 MiB      0    8.5 GiB
myzone.rgw.log          5  3.4 KiB      207    6 MiB   0.02    8.5 GiB
myzone.rgw.control      6      0 B        8      0 B      0    8.5 GiB
myzone.rgw.meta         7      0 B        0      0 B      0    8.5 GiB

Nella sezione RAW STORAGE dell'output è fornita una panoramica dello spazio di storage utilizzato dal cluster per i dati.

  • CLASS: classe di storage del dispositivo. Per ulteriori dettagli sulle classi di dispositivi, fare riferimento alla Sezione 17.1.1, «Classi di dispositivi».

  • SIZE: capacità di memorizzazione complessiva del cluster.

  • AVAIL: quantità di spazio libero disponibile nel cluster.

  • USED: spazio (accumulato su tutti gli OSD) allocato esclusivamente per gli oggetti dati conservati nel dispositivo di blocco.

  • RAW USED: somma tra lo spazio utilizzato ("USED") e quello allocato/riservato sul dispositivo di blocco per Ceph, ad esempio la parte BlueFS per BlueStore.

  • % RAW USED: percentuale di spazio di memorizzazione di dati non elaborati utilizzato. Utilizzare questo numero insieme a full ratio e near full ratio per assicurarsi che non si stia raggiungendo la capacità del cluster. Per ulteriori dettagli, vedere la Sezione 12.8, «Capacità di memorizzazione».

    Nota
    Nota: livello di riempimento del cluster

    Quando il livello di riempimento dello spazio di storage nominale si avvicina al 100%, è necessario aggiungere ulteriore spazio di storage al cluster. Un utilizzo più elevato può comportare a singoli OSD pieni e a problemi di integrità del cluster.

    Utilizzare il comando ceph osd df tree per elencare il livello di riempimento di tutti gli OSD.

Nella sezione POOLS dell'output è fornito un elenco di pool e l'utilizzo nozionale di ciascuno di essi. L'output di questa sezione non riflette repliche, cloni o snapshot. Ad esempio, se si memorizza un oggetto con 1 MB di dati, l'utilizzo nozionale sarà 1 MB, ma quello effettivo può essere di 2 MB o più a seconda del numero di repliche, cloni e snapshot.

  • POOL: nome del pool.

  • ID: ID del pool.

  • STORED: quantità di dati memorizzati dall'utente.

  • OBJECTS: numero nozionale di oggetti memorizzati per pool.

  • USED: quantità di spazio allocato esclusivamente ai dati da tutti i nodi OSD, indicato in KB.

  • %USED: percentuale nozionale di spazio di memorizzazione utilizzato per ciascun pool.

  • MAX AVAIL: spazio massimo disponibile nel pool specificato.

Nota
Nota

I numeri nella sezione POOLS sono nozionali. Non includono il numero di repliche, snapshot o cloni. Ne risulta che la somma delle quantità USED e %USED non verrà aggiunta alle quantità RAW USED e %RAW USED nella sezione RAW STORAGE dell'output.

12.4 Verifica dello stato degli OSD

È possibile verificare lo stato degli OSD per assicurarsi che siano attivi e funzionanti eseguendo:

cephuser@adm > ceph osd stat

oppure

cephuser@adm > ceph osd dump

È inoltre possibile visualizzare gli OSD in base alla rispettiva posizione nella mappa CRUSH.

ceph osd tree eseguirà la stampa di un albero CRUSH con un host, i rispettivi OSD, se attivi, e il relativo peso:

   cephuser@adm > ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME              STATUS  REWEIGHT  PRI-AFF
-1      3  0.02939  root default
-3      3  0.00980    rack mainrack
-2      3  0.00980            host osd-host
0       1  0.00980                    osd.0   up   1.00000   1.00000
1       1  0.00980                    osd.1   up   1.00000   1.00000
2       1  0.00980                    osd.2   up   1.00000   1.00000

12.5 Verifica degli OSD pieni

Ceph impedisce la scrittura in un OSD pieno in modo da evitare perdite di dati. In un cluster operativo, quando questo è prossimo al rispettivo rapporto di riempimento si riceve un avviso. L'impostazione di default di mon osd full ratio è 0,95 o 95% della capacità, prima che venga interrotta la scrittura dei dati da parte dei client. L'impostazione di default di mon osd nearfull ratio è 0,85 o 85% della capacità, quando viene generato avviso sullo stato di integrità.

I nodi OSD pieni verranno segnalati da ceph health:

cephuser@adm > ceph health
  HEALTH_WARN 1 nearfull osds
  osd.2 is near full at 85%

oppure

cephuser@adm > ceph health
  HEALTH_ERR 1 nearfull osds, 1 full osds
  osd.2 is near full at 85%
  osd.3 is full at 97%

Il modo migliore per gestire un cluster pieno consiste nell'aggiungere nuovi host/dischi OSD che consentano al cluster di ridistribuire dati nello spazio di storage che si è appena reso disponibile.

Suggerimento
Suggerimento: esclusione degli OSD pieni

Quando un OSD si riempie (utilizza il 100% del rispettivo spazio su disco), di norma questo si blocca rapidamente senza alcun avviso. Di seguito sono riportati alcuni suggerimenti utili per l'amministrazione dei nodi OSD.

  • È necessario posizionare lo spazio su disco di ciascun OSD (di norma montato in /var/lib/ceph/osd/osd-{1,2..}) su un disco o una partizione dedicati sottostanti.

  • Controllare i file di configurazione Ceph e assicurarsi che il log file Ceph non venga memorizzato nei dischi o nelle partizioni dedicati all'uso da parte degli OSD.

  • Assicurarsi che la scrittura nei dischi o nelle partizioni dedicati all'uso da parte degli OSD non venga eseguita da altri processi.

12.6 Verifica dello stato del monitor

Dopo aver avviato il cluster e precedentemente alla prima lettura e/o scrittura dei dati, verificare lo stato del quorum dei Ceph Monitor. Se il cluster sta già provvedendo alle richieste, controllare periodicamente lo stato dei Ceph Monitor per assicurarsi che siano in esecuzione.

Per visualizzare la mappa del monitoraggio, eseguire quanto riportato di seguito:

cephuser@adm > ceph mon stat

oppure

cephuser@adm > ceph mon dump

Per verificare lo stato del quorum per il cluster di monitoraggio, eseguire quanto riportato di seguito:

cephuser@adm > ceph quorum_status

Ceph restituirà lo stato del quorum. Ad esempio, un cluster Ceph costituito da tre monitoraggi può restituire quanto riportato di seguito:

{ "election_epoch": 10,
  "quorum": [
        0,
        1,
        2],
  "monmap": { "epoch": 1,
      "fsid": "444b489c-4f16-4b75-83f0-cb8097468898",
      "modified": "2011-12-12 13:28:27.505520",
      "created": "2011-12-12 13:28:27.505520",
      "mons": [
            { "rank": 0,
              "name": "a",
              "addr": "192.168.1.10:6789\/0"},
            { "rank": 1,
              "name": "b",
              "addr": "192.168.1.11:6789\/0"},
            { "rank": 2,
              "name": "c",
              "addr": "192.168.1.12:6789\/0"}
           ]
    }
}

12.7 Verifica degli stati dei gruppi di posizionamento

Oggetti della mappa dei gruppi di posizionamento negli OSD. Quando si monitorano i gruppi di posizionamento, questi dovranno essere active e clean. Per una discussione dettagliata, fare riferimento alla Sezione 12.9, «Monitoraggio di OSD e gruppi di posizionamento».

12.8 Capacità di memorizzazione

Quando un cluster di memorizzazione Ceph si avvicina alla capacità massima, Ceph impedisce la scrittura o la lettura dai Ceph OSD come misura di sicurezza per evitare perdite di dati. Pertanto, non è consigliabile far avvicinare un cluster di produzione al rapporto di riempimento. Questa situazione andrebbe infatti a discapito dell'elevata disponibilità. Per default il rapporto di riempimento è impostato su 0,95, ovvero il 95% della capacità. Si tratta di un valore molto aggressivo per un cluster di test contenente un numero ridotto di OSD.

Suggerimento
Suggerimento: aumento della capacità di storage

Durante il monitoraggio del cluster, prestare attenzione agli avvisi relativi alla percentuale nearfull. Ciò indica che nel caso di errori su alcuni OSD, potrebbe verificarsi una temporanea interruzione del servizio. Valutare la possibilità di aggiungere altri OSD per aumentare la capacità di storage.

In uno scenario comune per i cluster di prova, l'amministratore di sistema rimuove un Ceph OSD dal cluster di memorizzazione Ceph per osservare il ribilanciamento del cluster. Quindi, rimuove un altro Ceph OSD e così via fin quando il cluster non raggiunge il rapporto di riempimento e si blocca. Si consiglia di eseguire la pianificazione della capacità anche per il cluster di prova. In questo modo, sarà possibile calcolare la capacità di riserva necessaria per mantenere un'elevata disponibilità. Idealmente, è consigliabile pianificare una serie di errori dei Ceph OSD durante cui sia possibile recuperare il cluster e ripristinarlo allo stato active + clean senza sostituire immediatamente i Ceph OSD con errori. Anche se è possibile eseguire un cluster nello stato active + degraded, non è l'ideale per un normale funzionamento.

Nel diagramma seguente viene illustrato un cluster di memorizzazione Ceph semplificato che contiene 33 nodi Ceph e un Ceph OSD per host, ciascuno in grado di eseguire operazioni di lettura e scrittura su un'unità da 3 TB. La capacità effettiva di questo cluster di esempio è di 99 TB. L'opzione mon osd full ratio è impostata a 0,95. Se il cluster raggiunge i 5 TB di capacità rimanente, non consentirà ai client di leggere e scrivere dati. Di conseguenza, la capacità operativa del cluster di memorizzazione è 95 TB, non 99 TB.

Cluster Ceph
Figura 12.1: Cluster Ceph

In tale cluster, è normale che si verifichino errori su uno o due OSD. In uno scenario meno frequente ma possibile, può verificarsi un errore del router o dell'alimentazione del rack che causa la disattivazione simultanea di più OSD (ad esempio degli OSD da 7 a 12). In tale scenario, è consigliabile comunque puntare ad avere un cluster in grado di restare operativo e raggiungere lo stato active + clean, anche se ciò comporta l'aggiunta di alcuni host con ulteriori OSD in tempi brevi. Se l'utilizzo della capacità è troppo elevato, potrebbero verificarsi perdite di dati. Tuttavia, se l'utilizzo della capacità del cluster supera il rapporto di riempimento, è comunque preferibile scendere a compromessi sulla disponibilità dei dati per risolvere un'interruzione all'interno di un dominio di errore. Per questo motivo, si consiglia di effettuare una pianificazione seppur approssimativa della capacità.

Identificare due numeri per il cluster:

  1. Il numero di OSD.

  2. La capacità complessiva del cluster.

Se si divide la capacità totale del cluster per il numero di OSD contenuti, è possibile individuare la capacità media di un OSD del cluster. Moltiplicare questo numero per il numero di OSD su cui si prevede che si verificheranno errori in simultanea durante il normale funzionamento (un numero relativamente ridotto). Moltiplicare poi la capacità del cluster per il rapporto di riempimento fino a raggiungere la capacità operativa massima. Infine, sottrarre la quantità di dati degli OSD su cui si prevede che si verificheranno errori fino a raggiungere un rapporto di riempimento ragionevole. Ripetere la procedura indicata con un numero più elevato di errori sugli OSD (un rack di OSD) fino a ottenere un numero ragionevole per un rapporto di riempimento quasi completo.

Le impostazioni seguenti si applicano soltanto durante la creazione del cluster e vengono quindi memorizzate nella mappa OSD:

[global]
 mon osd full ratio = .80
 mon osd backfillfull ratio = .75
 mon osd nearfull ratio = .70
Suggerimento
Suggerimento

Queste impostazioni si applicano soltanto durante alla creazione del cluster. In seguito, è necessario modificarle nella mappa OSD utilizzando i comandi ceph osd set-nearfull-ratio e ceph osd set-full-ratio.

mon osd full ratio

Percentuale di spazio su disco utilizzata prima che un OSD venga considerato pieno (full). Il valore di default è 0,95

mon osd backfillfull ratio

Percentuale di spazio su disco utilizzata prima che un OSD venga considerato troppo pieno (full) per il backfill. Il valore di default è 0,90

mon osd nearfull ratio

Percentuale di spazio su disco utilizzata prima che un OSD venga considerato quasi pieno (nearfull). Il valore di default è 0,85

Suggerimento
Suggerimento: verifica del peso dell'OSD

Se alcuni OSD sono nearfull, ma in altri è invece disponibile una capacità elevata, potrebbero verificarsi dei problemi con il peso CRUSH per gli OSD nearfull.

12.9 Monitoraggio di OSD e gruppi di posizionamento

Per ottenere un'elevata disponibilità e un'alta affidabilità occorre adottare un approccio a tolleranza di errore nella gestione dei problemi hardware e software. Ceph non dispone di un single point of failure ed è in grado di provvedere alle richieste di dati nella modalità "degraded" (danneggiata). Il posizionamento dei dati di Ceph introduce un livello di riferimento indiretto per fare in modo che i dati non vengano direttamente associati a specifici indirizzi OSD. Vale a dire che per il controllo degli errori di sistema occorre individuare il gruppo di posizionamento e gli OSD sottostanti alla radice del problema.

Suggerimento
Suggerimento: accesso in caso di errore

Gli errori che si verificano in una parte del cluster possono impedire l'accesso a un determinato oggetto, ma non ad altri oggetti. Quando si verifica un errore, seguire la procedura di monitoraggio degli OSD e dei gruppi di posizionamento. Quindi, procedere con la risoluzione dei problemi.

Ceph in genere esegue il ripristino automatico. Tuttavia, se i problemi continuano a verificarsi, il monitoraggio degli OSD e dei gruppi di posizionamento consentirà di identificare il problema.

12.9.1 Monitoraggio degli OSD

Un OSD può essere nello stato "in" (dentro il cluster) o nello stato "out" (fuori dal cluster). Contemporaneamente, può essere "up" (attivo e in esecuzione) o "down" (disattivato e non in esecuzione). Se un OSD è nello stato "up", può trovarsi dentro il cluster (sarà possibile leggere e scrivere i dati) o al di fuori di esso. Se si trovava all'interno del cluster e di recente è stato spostato al di fuori, Ceph eseguirà la migrazione dei gruppi di posizionamento in altri OSD. Se un OSD si trova fuori dal cluster, CRUSH non gli assegnerà alcun gruppo di posizionamento. Se un OSD è nello stato "down", deve essere anche "out".

Nota
Nota: stato non integro

Se un OSD è "down" e "in", è presente un problema e il cluster si trova nello stato non integro.

Se si esegue un comando come ceph health ceph -s o ceph -w, è possibile notare che il cluster non rimanda sempre lo stato HEALTH OK. Per quanto riguarda gli OSD, è prevedibile che il cluster non rimanderà lo stato HEALTH OK se:

  • Il cluster non è stato ancora avviato (non risponderà).

  • Il cluster è stato avviato o riavviato e non è ancora pronto, poiché è in corso la creazione dei gruppi di posizionamento e gli OSD sono in fase di peering.

  • Un OSD è stato aggiunto o rimosso.

  • La mappa del cluster è stata modificata.

Un aspetto importante del monitoraggio degli OSD consiste nell'assicurarsi che tutti gli OSD dentro il cluster siano attivi e in esecuzione quando lo è il cluster. Per verificare se tutti gli OSD sono in esecuzione, eseguire:

root # ceph osd stat
x osds: y up, z in; epoch: eNNNN

Il risultato dovrebbe indicare il numero totale di OSD (x), quanti di questi sono nello stato "up" (y) e nello stato "in" (z) e l'epoca della mappa (eNNNN). Se il numero di OSD dentro il cluster ("in") superiore al numero di OSD attivi ("up"), eseguire il comando seguente per individuare i daemon ceph-osd non in esecuzione:

root # ceph osd tree
#ID CLASS WEIGHT  TYPE NAME             STATUS REWEIGHT PRI-AFF
-1       2.00000 pool openstack
-3       2.00000 rack dell-2950-rack-A
-2       2.00000 host dell-2950-A1
0   ssd 1.00000      osd.0                up  1.00000 1.00000
1   ssd 1.00000      osd.1              down  1.00000 1.00000

Ad esempio, se un OSD con ID 1 è inattivo, avviarlo:

cephuser@osd > sudo systemctl start ceph-CLUSTER_ID@osd.0.service

Per informazioni sui problemi associati agli OSD interrotti o che non verranno riavviati, vedere il Book “Troubleshooting Guide”, Chapter 4 “Troubleshooting OSDs”, Section 4.3 “OSDs not running”.

12.9.2 Assegnazione di insiemi di gruppi di posizionamento

Quando CRUSH assegna i gruppi di posizionamento agli OSD, osserva il numero di repliche del pool e assegna il gruppo di posizionamento agli OSD in modo che ogni replica di tale gruppo venga assegnata a un OSD diverso. Ad esempio, se il pool richiede tre repliche di un gruppo di posizionamento, CRUSH potrebbe assegnarle rispettivamente a osd.1, osd.2 e osd.3. CRUSH in realtà individua un posizionamento pseudo-casuale che tiene conto dei domini di errore impostati nella mappa CRUSH. Di conseguenza, in un cluster di grandi dimensioni sarà raro vedere gruppi di posizionamento assegnati agli OSD più vicini. Il set di OSD che deve contenere le repliche di un determinato gruppo di posizionamento viene chiamato acting set. In alcuni casi, un OSD dell'acting set è disattivato oppure non è in grado di provvedere alle richieste relative agli oggetti nel gruppo di posizionamento. In queste situazioni, gli scenari potrebbero essere i seguenti:

  • Un OSD è stato aggiunto o rimosso. Quindi, CRUSH ha riassegnato il gruppo di posizionamento agli altri OSD e ha pertanto modificato la composizione dell'acting set, causando la migrazione dei dati con una procedura di "backfill".

  • Un OSD era nello stato "down", è stato riavviato ed è in corso di recupero.

  • Un OSD nell'acting set si trova nello stato "down" o non è in grado di provvedere alle richieste e un altro OSD ne assume provvisoriamente i compiti.

    Ceph elabora una richiesta client tramite l'up set, ovvero il set degli OSD che provvederanno effettivamente alle richieste. Nella maggior parte dei casi, l'up set e l'acting set sono praticamente identici. Se differiscono, potrebbe significare che Ceph sta eseguendo la migrazione dei dati, che è in corso il recupero di un OSD o che si è verificato un problema (ad esempio, in tali scenari generalmente Ceph rimanda uno stato HEALTH WARN con il messaggio "stuck stale").

Per recuperare un elenco dei gruppi di posizionamento, eseguire:

cephuser@adm > ceph pg dump

Per visualizzare gli OSD che si trovano all'interno dell'acting set o dell'up set per un determinato gruppo di posizionamento, eseguire:

cephuser@adm > ceph pg map PG_NUM
osdmap eNNN pg RAW_PG_NUM (PG_NUM) -> up [0,1,2] acting [0,1,2]

Il risultato dovrebbe indicare l'epoca di osdmap (eNNN), il numero di gruppi di posizionamento (PG_NUM), gli OSD nell'up set ("up") e quelli nell'acting set ("acting"):

Suggerimento
Suggerimento: indicatore di problemi nel cluster

Una mancata corrispondenza tra l'up set e l'acting set potrebbe indicare che è in corso il ribilanciamento del cluster o un suo potenziale problema.

12.9.3 Peering

Prima che sia possibile scrivere dati su un gruppo di posizionamento, quest'ultimo deve essere negli stati active e clean. Affinché Ceph possa determinare lo stato corrente di un gruppo di posizionamento, l'OSD primario di tale gruppo (il primo OSD nell'acting set) esegue il peering con gli OSD secondario e terziario per accordarsi sullo stato corrente del gruppo di posizionamento (presupponendo che si tratti di un pool con tre repliche del gruppo di posizionamento).

Schema di peering
Figura 12.2: Schema di peering

12.9.4 Monitoraggio degli stati del gruppo di posizionamento

Se si esegue un comando come ceph health, ceph -s o ceph -w, è possibile notare che il cluster non rimanda sempre il messaggio HEALTH OK. Dopo aver verificato che tutti gli OSD siano in esecuzione, controllare anche gli stati del gruppo di posizionamento.

È prevedibile che il cluster non rimanderà lo stato HEALTH OK in alcune circostanze correlate al peering del gruppo di posizionamento:

  • È stato creato un pool e non è stato ancora eseguito il peering dei gruppi di posizionamento.

  • È in corso il recupero dei gruppi di posizionamento.

  • Un OSD è stato aggiunto al cluster o rimosso da quest'ultimo.

  • La mappa CRUSH è stata modificata ed è in corso la migrazione dei gruppi di posizionamento.

  • Sono presenti dati incoerenti in repliche diverse di un gruppo di posizionamento.

  • Ceph sta eseguendo la pulitura delle repliche di un gruppo di posizionamento.

  • Ceph non dispone di sufficiente capacità di storage per il completamento delle operazioni di backfill.

Se a causa di una di queste circostanze Ceph rimanda il messaggio HEALTH WARN, non preoccuparsi. In molti casi, il cluster si ripristinerà automaticamente. In alcuni casi, può essere necessario intervenire. Un aspetto importante del monitoraggio dei gruppi di posizionamento consiste nell'assicurarsi che quando un cluster è attivo e in esecuzione, tutti i gruppi di posizionamento siano nello stato "active" e preferibilmente anche in quello "clean state". Per visualizzare lo stato di tutti i gruppi di posizionamento, eseguire:

cephuser@adm > ceph pg stat
x pgs: y active+clean; z bytes data, aa MB used, bb GB / cc GB avail

Il risultato dovrebbe indicare il numero totale di gruppi di posizionamento (x), quanti di questi si trovano in un determinato stato, ad esempio "active+clean" (y), e la quantità di dati memorizzati (z).

Oltre agli stati del gruppo di posizionamento, Ceph rimanderà anche la capacità di storage utilizzata (aa), quella rimanente (bb) e la capacità di storage totale del gruppo di posizionamento. Tali valori possono essere importanti nei casi in cui:

  • Ci si sta avvicinando al valore impostato per near full ratio o full ratio.

  • I dati non vengono distribuiti nel cluster a causa di un errore nella configurazione CRUSH.

Suggerimento
Suggerimento: ID dei gruppi di posizionamento

Gli ID dei gruppi di posizionamento sono costituiti dal numero del pool (e non dal nome) seguito da un punto (.) e dall'ID del gruppo di posizionamento (un numero esadecimale). È possibile visualizzare il numero e il nome del pool dall'output di ceph osd lspools. Ad esempio, il pool di default rbd corrisponde al numero di pool 0. Un ID del gruppo di posizionamento completo è strutturato nel modo seguente:

POOL_NUM.PG_ID

E in genere ha il seguente aspetto:

0.1f

Per recuperare un elenco dei gruppi di posizionamento, eseguire quanto riportato di seguito:

cephuser@adm > ceph pg dump

È inoltre possibile formattare l'output in formato JSON e salvarlo in un file:

cephuser@adm > ceph pg dump -o FILE_NAME --format=json

Per interrogare un determinato gruppo di posizionamento, eseguire quanto riportato di seguito:

cephuser@adm > ceph pg POOL_NUM.PG_ID query

L'elenco seguente descrive in modo dettagliato gli stati dei gruppi di posizionamento più comuni.

CREATING

Quando si crea un pool, quest'ultimo creerà il numero di gruppi di posizionamento specificato. Ceph rimanderà lo stato "creating" durante la creazione di uno o più gruppi di posizionamento. In seguito alla creazione, verrà avviato il peering degli OSD che fanno parte dell'acting set del gruppo di posizionamento. Al completamento del peering, lo stato del gruppo di posizionamento deve essere "active+clean", per indicare che un client Ceph può avviare la scrittura su tale gruppo.

Stato dei gruppi di posizionamento
Figura 12.3: Stato dei gruppi di posizionamento
PEERING

Quando Ceph esegue il peering di un gruppo di posizionamento fa in modo che gli OSD che ne memorizzano le repliche concordino sullo stato degli oggetti e dei metadati contenuti nel gruppo. Quando Ceph completa il peering, vuol dire che gli OSD che memorizzano il gruppo di posizionamento concordano sullo stato corrente del gruppo di posizionamento. Tuttavia, il completamento del processo di peering non implica che in ogni replica siano presenti i contenuti più recenti.

Nota
Nota: cronologia autorevole

Ceph non riconoscerà le operazioni di scrittura su un client finché tutti gli OSD dell'acting set non le salvano in modo permanente. Questa pratica consente di assicurare che almeno un membro dell'acting set conterrà un record di tutte le operazioni di scrittura riconosciute dall'ultima operazione di peering riuscita.

Tramite un record accurato delle operazioni di scrittura riconosciute, Ceph è in grado di creare e ampliare una nuova cronologia autorevole del gruppo di posizionamento, un set di operazioni completo e in corretta sequenza che, se eseguito, consente di aggiornare la copia dell'OSD di un gruppo di posizionamento.

ACTIVE

Quando Ceph completa il processo di peering, il gruppo di posizionamento può passare allo stato active. Lo stato active indica che i dati nel gruppo di posizionamento sono di norma disponibili all'interno del gruppo di posizionamento primario e nelle repliche delle operazioni di lettura e scrittura.

CLEAN

Quando un gruppo di posizionamento si trova nello stato clean, l'OSD primario e gli OSD di replica hanno eseguito correttamente il peering e non sono presenti repliche residue relative al gruppo di posizionamento. Ceph ha eseguito la replica di tutti gli oggetti nel gruppo di posizionamento per il numero corretto di volte.

DEGRADED

Quando un client scrive un oggetto nell'OSD primario, questo è responsabile della scrittura delle repliche sugli OSD di replica. Quando l'OSD primario scrive l'oggetto nello storage, il gruppo di posizionamento rimane nello stato danneggiato ("degraded") finché gli OSD di replica non confermano all'OSD primario la riuscita della creazione degli oggetti di replica da parte di Ceph.

Il motivo per cui un gruppo di posizionamento può avere lo stato "active+degraded" è il fatto che un OSD può essere nello stato "active" anche se non contiene ancora tutti gli oggetti. Se un OSD diventa disattivato, Ceph contrassegna ciascun gruppo di posizionamento assegnato a tale OSD come "degraded". Quando l'OSD ritorna attivo, gli altri OSD devono ripetere il peering. Tuttavia, un client può comunque scrivere un nuovo oggetto in un gruppo di posizionamento danneggiato se si trova nello stato "active".

Se un OSD è nello stato "down" e la condizione "degraded" persiste, Ceph può contrassegnare l'OSD disattivato come esterno al cluster ("out") e rimappare i dati da questo OSD a un altro OSD. L'intervallo di tempo in cui un OSD viene contrassegnato dallo stato "down" a quello "out" è controllato dall'opzione mon osd down out interval, impostata per default su 600 secondi.

Inoltre, un gruppo di posizionamento può trovarsi nello stato "degraded" se Ceph non riesce a trovare uno o più oggetti al suo interno. Sebbene non sia possibile eseguire operazioni di lettura o scrittura sugli oggetti non trovati, sarà comunque possibile accedere a tutti gli altri oggetti nel gruppo di posizionamento nello stato "degraded".

RECOVERING

Ceph è stato progettato per garantire una tolleranza agli errori su vasta scala in caso di problemi hardware e software. Quando un OSD diventa disattivato, i relativi contenuti potrebbero non essere aggiornati rispetto allo stato corrente delle altre repliche nei gruppi di posizionamento. Quando l'OSD ritorna attivo, i contenuti dei gruppi di posizionamento devono essere aggiornati per riflettere lo stato corrente. Durante questo intervallo di tempo, l'OSD potrebbe riportare lo stato "recovering".

La procedura di recupero non è sempre semplice, perché errori dell'hardware potrebbero causare errori a cascata in più OSD. Ad esempio, potrebbero verificarsi errori su uno switch di rete di un rack o di uno schedario a causa dei quali l'aggiornamento degli OSD di più computer host rispetto allo stato corrente del cluster non va a buon fine. Quando l'errore viene risolto, è necessario recuperare tutti gli OSD.

Ceph fornisce diverse impostazioni per bilanciare il conflitto delle risorse tra le nuove richieste di servizio e la necessità di recuperare gli oggetti dati e ripristinare i gruppi di posizionamento allo stato corrente. L'impostazione osd recovery delay start consente a un OSD di riavviarsi, ripetere il peering e persino elaborare alcune richieste di riproduzione prima di avviare il processo di recupero. L'impostazione osd recovery thread timeout consente di impostare un timeout del thread, poiché più OSD potrebbero generare errori, riavviarsi e ripetere il peering a frequenza sfalsata. L'impostazione osd recovery max active consente di limitare il numero di richieste di recupero che verranno elaborate contemporaneamente da un OSD per impedire errori di gestione delle richieste su tale OSD. L'impostazione osd recovery max chunk consente di limitare le dimensioni delle porzioni di dati recuperate per evitare un traffico eccessivo sulla rete.

BACK FILLING

Se viene aggiunto un nuovo OSD al cluster, CRUSH riassegnerà i gruppi di posizionamento dagli OSD già nel cluster a quello appena aggiunto. Se si forza il nuovo OSD ad accettare immediatamente i gruppi di posizionamento riassegnati, si può generare un carico eccessivo su quest'ultimo. Tramite il backfill dell'OSD con i gruppi di posizionamento, è possibile avviare questa procedura in background. Al completamento del backfill, il nuovo OSD inizierà a provvedere alle richieste quando sarà pronto.

Durante le operazioni di backfill, potrebbero essere visualizzati diversi stati: "backfill_wait" indica che un'operazione di backfill è in sospeso, ma non ancora in corso; "backfill" indica che un'operazione di backfill è in corso; "backfill_too_full" indica che un'operazione di backfill è stata richiesta, ma non è stato possibile completarla perché la capacità di storage è insufficiente. Se non è possibile eseguire il backfill di un gruppo di posizionamento, questo potrebbe essere considerato come incompleto ("incomplete").

In Ceph sono disponibili diverse impostazioni per la gestione del carico associato alla riassegnazione dei gruppi di posizionamento a un OSD (soprattutto ai nuovi OSD). Per default, osd max backfills consente di impostare su 10 il numero massimo di operazioni di backfill simultanee verso o da un OSD. Con backfill full ratio un OSD può rifiutare una richiesta di backfill se sta raggiungendo la percentuale di riempimento (90% per default) e apportare modifiche con il comando ceph osd set-backfillfull-ratio. Se un OSD rifiuta una richiesta di backfill, tramite osd backfill retry interval l'OSD può ripetere la richiesta (per default dopo 10 secondi). Gli OSD possono inoltre impostare i valori osd backfill scan min e osd backfill scan max per gestire gli intervalli di scansione (impostati su 64 e 512 per default).

REMAPPED

Se l'acting set che gestisce un gruppo di posizionamento cambia, viene eseguita la migrazione dei dati dall'acting set precedente all'acting set nuovo. La gestione delle richieste da parte del nuovo OSD primario può richiedere del tempo. Il processo potrebbe quindi chiedere al precedente OSD primario di continuare a provvedere alle richieste fino al completamento della migrazione del gruppo di posizionamento. Al termine della migrazione dei dati, la mappatura utilizza l'OSD primario del nuovo acting set.

STALE

Mentre Ceph utilizza gli heartbeat per verificare che gli host e i daemon siano in esecuzione, i daemon ceph-osd possono passare anche allo stato "stuck" e non segnalare statistiche in modo puntuale (ad esempio, in caso di un errore di rete temporaneo). Per default, i daemon OSD segnalano il relativo gruppo di posizionamento e le statistiche di avvio ed errori ogni mezzo secondo (0,5), ovvero con maggiore frequenza rispetto alle soglie di heartbeat. Se l'OSD primario dell'acting set di un gruppo di posizionamento non riesce a inviare segnalazioni al monitor o se gli altri OSD hanno segnalato l'OSD primario come disattivato, i monitor contrassegneranno il gruppo di posizionamento come inattivo ("stale").

All'avvio del cluster, è normale visualizzare lo stato "stale" fino al completamento del processo di peering. Se il cluster è in esecuzione da un po' di tempo ma i gruppi di posizionamento continuano a essere nello stato "stale", vuol dire che l'OSD primario di tali gruppi di posizionamento è disattivato o non segnala al cluster monitoraggio le statistiche relative al gruppo.

12.9.5 Individuazione dell'ubicazione di un oggetto

Per memorizzare i dati oggetto nel Ceph Object Store, il client Ceph deve impostare un nome oggetto e specificare un pool correlato. Il client Ceph recupera la mappa del cluster più recente, mentre l'algoritmo CRUSH calcola in che modo mappare l'oggetto a un gruppo di posizionamento e in che modo assegnare tale gruppo in modo dinamico a un OSD. Per individuare l'ubicazione dell'oggetto, servono solo il nome dell'oggetto e quello del pool. Esempio:

cephuser@adm > ceph osd map POOL_NAME OBJECT_NAME [NAMESPACE]
Esempio 12.1: Individuazione di un oggetto

Procedere con la creazione di un oggetto di esempio. Specificare il nome oggetto "test-object-1", il percorso di un file di esempio "testfile.txt" contenente alcuni dati oggetto e il nome pool "data" tramite il comando rados put nella riga di comando:

cephuser@adm > rados put test-object-1 testfile.txt --pool=data

Per verificare che Ceph Object Store abbia memorizzato l'oggetto, eseguire quanto riportato di seguito:

cephuser@adm > rados -p data ls

Adesso, individuare l'ubicazione dell'oggetto. L'output restituito da Ceph sarà l'ubicazione dell'oggetto:

cephuser@adm > ceph osd map data test-object-1
osdmap e537 pool 'data' (0) object 'test-object-1' -> pg 0.d1743484 \
(0.4) -> up ([1,0], p0) acting ([1,0], p0)

Per rimuovere l'oggetto di esempio, basta eliminarlo tramite il comando rados rm:

cephuser@adm > rados rm test-object-1 --pool=data

13 Task operativi

13.1 Modifica della configurazione del cluster

Per modificare la configurazione di un cluster Ceph esistente, seguire la procedura indicata di seguito:

  1. Esportare la configurazione attuale del cluster in un file:

    cephuser@adm > ceph orch ls --export --format yaml > cluster.yaml
  2. Modificare il file con la configurazione e aggiornare le righe pertinenti. In Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.4 “Distribuzione di servizi e gateway” e nella Sezione 13.4.3, «Aggiunta di OSD tramite la specifica dei DriveGroups» sono disponibili esempi sulle specifiche.

  3. Applicare la nuova configurazione:

    cephuser@adm > ceph orch apply -i cluster.yaml

13.2 Aggiunta di nodi

Per aggiungere un nuovo nodo a un cluster Ceph, seguire la procedura indicata di seguito:

  1. Installare SUSE Linux Enterprise Server e SUSE Enterprise Storage sul nuovo host. Per ulteriori informazioni consultare Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.1 “Installazione e configurazione di SUSE Linux Enterprise Server”.

  2. Configurare l'host come Salt Minion di un Salt Master già esistente. Per ulteriori informazioni consultare Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.2 “Distribuzione Salt”.

  3. Aggiungere il nuovo host a ceph-salt e renderlo riconoscibile da cephadm, ad esempio:

    root@master # ceph-salt config /ceph_cluster/minions add ses-min5.example.com
    root@master # ceph-salt config /ceph_cluster/roles/cephadm add ses-min5.example.com

    Per ulteriori informazioni consultare Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.3.2.2 “Aggiunta di Salt Minion”.

  4. Verificare che il nodo sia stato aggiunto a ceph-salt:

    root@master # ceph-salt config /ceph_cluster/minions ls
    o- minions ................................................. [Minions: 5]
    [...]
      o- ses-min5.example.com .................................... [no roles]
  5. Applicare la configurazione al nuovo host del cluster:

    root@master # ceph-salt apply ses-min5.example.com
  6. Verificare che l'host appena aggiunto appartenga all'ambiente cephadm:

    cephuser@adm > ceph orch host ls
    HOST                   ADDR                    LABELS   STATUS
    [...]
    ses-min5.example.com   ses-min5.example.com

13.3 Rimozione di nodi

Suggerimento
Suggerimento: rimozione degli OSD

Se sul nodo da rimuovere sono in esecuzione degli OSD, rimuovere innanzitutto questi ultimi dal nodo e verificare che non ne siano rimasti altri in esecuzione. Per ulteriori dettagli sulla rimozione degli OSD, fare riferimento alla Sezione 13.4.4, «Rimozione degli OSD».

Per rimuovere un nodo da un cluster, procedere come segue:

  1. Per tutti i tipi di servizio Ceph, ad eccezione di node-exporter e crash, rimuovere il nome host del nodo dal file della specifica del posizionamento del cluster (ad esempio cluster.yml). Per ulteriori dettagli, fare riferimento al Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.4.2 “Specifica del servizio e del posizionamento”. Ad esempio, se si sta rimuovendo l'host denominato ses-min2, rimuovere tutte le occorrenze di ses-min-2 da tutte le sezioni placement::

    Aggiornare

    service_type: rgw
    service_id: EXAMPLE_NFS
    placement:
      hosts:
      - ses-min2
      - ses-min3

    in

    service_type: rgw
    service_id: EXAMPLE_NFS
    placement:
      hosts:
      - ses-min3

    Applicare le modifiche al file di configurazione:

    cephuser@adm > ceph orch apply -i rgw-example.yaml
  2. Rimuovere il nodo dall'ambiente cephadm:

    cephuser@adm > ceph orch host rm ses-min2
  3. Se sul nodo sono in esecuzione i servizi crash.osd.1 e crash.osd.2, rimuoverli eseguendo il comando seguente sull'host:

    root@minion > cephadm rm-daemon --fsid CLUSTER_ID --name SERVICE_NAME

    Esempio:

    root@minion > cephadm rm-daemon --fsid b4b30c6e... --name crash.osd.1
    root@minion > cephadm rm-daemon --fsid b4b30c6e... --name crash.osd.2
  4. Rimuovere tutti i ruoli dal minion che si desidera eliminare:

    cephuser@adm > ceph-salt config /ceph_cluster/roles/tuned/throughput remove ses-min2
    cephuser@adm > ceph-salt config /ceph_cluster/roles/tuned/latency remove ses-min2
    cephuser@adm > ceph-salt config /ceph_cluster/roles/cephadm remove ses-min2
    cephuser@adm > ceph-salt config /ceph_cluster/roles/admin remove ses-min2

    Se il minion che si desidera rimuovere è il minion di bootstrap, è necessario rimuovere anche il ruolo di bootstrap:

    cephuser@adm > ceph-salt config /ceph_cluster/roles/bootstrap reset
  5. In seguito alla rimozione di tutti gli OSD su un singolo host, rimuovere l'host dalla mappa CRUSH:

    cephuser@adm > ceph osd crush remove bucket-name
    Nota
    Nota

    Il nome del compartimento deve coincidere con il nome host.

  6. Adesso, è possibile rimuovere il minion dal cluster:

    cephuser@adm > ceph-salt config /ceph_cluster/minions remove ses-min2
Importante
Importante

In caso di errore e se il minion che si sta tentando di rimuovere è nello stato di disattivazione permanente, sarà necessario rimuovere il nodo dal Salt Master:

root@master # salt-key -d minion_id

Quindi, rimuovere manualmente il nodo da pillar_root/ceph-salt.sls. In genere, questo si trova in /srv/pillar/ceph-salt.sls.

13.4 Gestione degli OSD

Questa sezione descrive come aggiungere, cancellare o rimuovere gli OSD in un cluster Ceph.

13.4.1 Elenco dei dispositivi disco

Per identificare i dispositivi disco utilizzati e non utilizzati su tutti i nodi del cluster, elencarli eseguendo il comando seguente:

cephuser@adm > ceph orch device ls
HOST       PATH      TYPE SIZE  DEVICE  AVAIL REJECT REASONS
ses-master /dev/vda  hdd  42.0G         False locked
ses-min1   /dev/vda  hdd  42.0G         False locked
ses-min1   /dev/vdb  hdd  8192M  387836 False locked, LVM detected, Insufficient space (<5GB) on vgs
ses-min2   /dev/vdc  hdd  8192M  450575 True

13.4.2 Cancellazione dei dispositivi disco

Per riutilizzare un dispositivo disco, è necessario innanzitutto cancellarlo (o rimuoverlo con zap):

ceph orch device zap HOST_NAME DISK_DEVICE

Esempio:

cephuser@adm > ceph orch device zap ses-min2 /dev/vdc
Nota
Nota

Se in precedenza l'utente ha distribuito gli OSD tramite i DriveGroups o l'opzione --all-available-devices mentre il flag unmanaged non era impostato, cephadm distribuirà automaticamente questi OSD in seguito alla loro cancellazione.

13.4.3 Aggiunta di OSD tramite la specifica dei DriveGroups

I DriveGroups specificano i layout degli OSD nel cluster Ceph. Questi ultimi vengono definiti in un singolo file YAML. In questa sezione, verrà utilizzato drive_groups.yml come esempio.

L'amministratore deve specificare manualmente un gruppo di OSD correlati tra di loro (OSD ibridi distribuiti su unità HDD e SDD) o condividere le stesse opzioni di distribuzione (ad esempio lo stesso archivio dati, la stessa opzione di cifratura, gli stessi OSD stand-alone). Per evitare di elencare esplicitamente i dispositivi, i DriveGroups utilizzano un elenco di elementi di filtro che corrispondono ad alcuni campi selezionati dei rapporti di archivio di ceph-volume. In cephadm è fornito un codice che traduce tali DriveGroups in elenchi di dispositivi effettivi che l'utente potrà esaminare.

Il comando da eseguire per applicare la specifica OSD al cluster è:

cephuser@adm > ceph orch apply osd -i drive_groups.yml

Per visualizzare un'anteprima delle azioni e testare l'applicazione, è possibile utilizzare l'opzione --dry-run insieme al comando ceph orch apply osd. Esempio:

cephuser@adm > ceph orch apply osd -i drive_groups.yml --dry-run
...
+---------+------+------+----------+----+-----+
|SERVICE  |NAME  |HOST  |DATA      |DB  |WAL  |
+---------+------+------+----------+----+-----+
|osd      |test  |mgr0  |/dev/sda  |-   |-    |
|osd      |test  |mgr0  |/dev/sdb  |-   |-    |
+---------+------+------+----------+----+-----+

Se l'output di --dry-run soddisfa le aspettative, eseguire nuovamente il comando senza l'opzione --dry-run.

13.4.3.1 OSD non gestiti

Tutti i dispositivi disco puliti disponibili corrispondenti alla specifica dei DriveGroups verranno utilizzati automaticamente come OSD dopo essere stati aggiunti al cluster. Per descrivere questo comportamento si parla di modalità gestita.

Per disabilitare la modalità gestita, aggiungere la riga unmanaged: true alle specifiche pertinenti, ad esempio:

service_type: osd
service_id: example_drvgrp_name
placement:
 hosts:
 - ses-min2
 - ses-min3
encrypted: true
unmanaged: true
Suggerimento
Suggerimento

Per modificare gli OSD già distribuiti dalla modalità gestita a quella non gestita, aggiungere le righe unmanaged: true dove applicabile durante la procedura descritta nella Sezione 13.1, «Modifica della configurazione del cluster».

13.4.3.2 Specifica dei DriveGroups

Di seguito è riportato un file della specifica dei DriveGroups di esempio:

service_type: osd
service_id: example_drvgrp_name
placement:
  host_pattern: '*'
data_devices:
  drive_spec: DEVICE_SPECIFICATION
db_devices:
  drive_spec: DEVICE_SPECIFICATION
wal_devices:
  drive_spec: DEVICE_SPECIFICATION
block_wal_size: '5G'  # (optional, unit suffixes permitted)
block_db_size: '5G'   # (optional, unit suffixes permitted)
encrypted: true       # 'True' or 'False' (defaults to 'False')
Nota
Nota

L'opzione precedentemente chiamata "encryption" in DeepSea adesso si chiama "encrypted". Quando si applicano i DriveGroups in SUSE Enterprise Storage 7, assicurarsi di utilizzare questa nuova terminologia nella specifica del servizio, altrimenti ceph orch apply genererà un errore.

13.4.3.3 Creazione di corrispondenze dei dispositivi disco

È possibile descrivere la specifica tramite i filtri seguenti:

  • In base al modello di disco:

    model: DISK_MODEL_STRING
  • In base al produttore del disco:

    vendor: DISK_VENDOR_STRING
    Suggerimento
    Suggerimento

    Utilizzare sempre caratteri minuscoli quando si immette il valore DISK_VENDOR_STRING.

    Per ottenere dettagli sul produttore e il modello del disco, esaminare l'output del comando seguente:

    cephuser@adm > ceph orch device ls
    HOST     PATH     TYPE  SIZE DEVICE_ID                  MODEL            VENDOR
    ses-min1 /dev/sdb ssd  29.8G SATA_SSD_AF34075704240015  SATA SSD         ATA
    ses-min2 /dev/sda ssd   223G Micron_5200_MTFDDAK240TDN  Micron_5200_MTFD ATA
    [...]
  • Per indicare se si tratta di un disco rotativo o meno. Le unità SSD e NVME non sono rotative.

    rotational: 0
  • Per distribuire un nodo utilizzando tutte le unità disponibili per gli OSD:

    data_devices:
      all: true
  • Inoltre, tramite la limitazione del numero di dischi corrispondenti:

    limit: 10

13.4.3.4 Aggiunta di filtri ai dispositivi in base alle dimensioni

È possibile filtrare i dispositivi disco in base alle dimensioni (valore esatto o intervallo di dimensioni). Il parametro size: accetta gli argomenti nel formato seguente:

  • "10G" - include i dischi di dimensioni esatte.

  • "10G:40G" - include i dischi di dimensioni comprese nell'intervallo.

  • ":10G" - include i dischi di dimensioni inferiori o uguali a 10 GB.

  • "40G" - include i dischi di dimensioni uguali o superiori a 40 GB.

Esempio 13.1: Corrispondenza in base alle dimensioni del disco
service_type: osd
service_id: example_drvgrp_name
placement:
  host_pattern: '*'
data_devices:
  size: '40TB:'
db_devices:
  size: ':2TB'
Nota
Nota: virgolette obbligatorie

Quando si utilizza il delimitatore ":", occorre racchiudere le dimensioni tra virgolette altrimenti il simbolo ":" verrà interpretato come un nuovo hash di configurazione.

Suggerimento
Suggerimento: scorciatoie di unità

Al posto di Gigabyte (G), è possibile specificare le dimensioni in Megabyte (M) o Terabyte (T).

13.4.3.5 Esempi di DriveGroups

Questa sezione include esempi di diverse configurazioni OSD.

Esempio 13.2: Configurazione semplice

Questo esempio descrive due nodi con la stessa configurazione:

  • 20 HDD

    • Produttore: Intel

    • Modello: SSD-123-foo

    • Dimensioni: 4 TB

  • 2 SSD

    • Produttore: Micron

    • Modello: MC-55-44-ZX

    • Dimensioni: 512 GB

Il file drive_groups.yml corrispondente avrà l'aspetto seguente:

service_type: osd
service_id: example_drvgrp_name
placement:
  host_pattern: '*'
data_devices:
  model: SSD-123-foo
db_devices:
  model: MC-55-44-XZ

Tale configurazione è semplice e valida. Tuttavia, in futuro un amministratore può aggiungere dischi di altri produttori che non verranno inclusi. È possibile ovviare a questo problema riducendo i filtri sulle proprietà di base delle unità:

service_type: osd
service_id: example_drvgrp_name
placement:
  host_pattern: '*'
data_devices:
  rotational: 1
db_devices:
  rotational: 0

Nell'esempio precedente, viene forzata la dichiarazione di tutti i dispositivi a rotazione come "dispositivi di dati" e tutti i dispositivi non a rotazione verranno utilizzati come "dispositivi condivisi" (wal, db).

Presupponendo che le unità di più di 2 TB saranno sempre i dispositivi di dati più lenti, è possibile applicare dei filtri in base alle dimensioni:

service_type: osd
service_id: example_drvgrp_name
placement:
  host_pattern: '*'
data_devices:
  size: '2TB:'
db_devices:
  size: ':2TB'
Esempio 13.3: Configurazione avanzata

Questo esempio descrive due configurazioni diverse: 20 HDD devono condividere 2 SSD, mentre 10 SSD devono condividere 2 NVMe.

  • 20 HDD

    • Produttore: Intel

    • Modello: SSD-123-foo

    • Dimensioni: 4 TB

  • 12 SSD

    • Produttore: Micron

    • Modello: MC-55-44-ZX

    • Dimensioni: 512 GB

  • 2 NVMe

    • Produttore: Samsung

    • Modello: NVME-QQQQ-987

    • Dimensioni: 256 GB

È possibile definire tale configurazione con due layout come segue:

service_type: osd
service_id: example_drvgrp_name
placement:
  host_pattern: '*'
data_devices:
  rotational: 0
db_devices:
  model: MC-55-44-XZ
service_type: osd
service_id: example_drvgrp_name2
placement:
  host_pattern: '*'
data_devices:
  model: MC-55-44-XZ
db_devices:
  vendor: samsung
  size: 256GB
Esempio 13.4: Configurazione avanzata con nodi non uniformi

Gli esempi precedenti sono basati sul presupposto che tutti i nodi dispongano delle stesse unità. Tuttavia, non è sempre questo il caso:

Nodi da 1 a 5:

  • 20 HDD

    • Produttore: Intel

    • Modello: SSD-123-foo

    • Dimensioni: 4 TB

  • 2 SSD

    • Produttore: Micron

    • Modello: MC-55-44-ZX

    • Dimensioni: 512 GB

Nodi da 6 a 10:

  • 5 NVMe

    • Produttore: Intel

    • Modello: SSD-123-foo

    • Dimensioni: 4 TB

  • 20 SSD

    • Produttore: Micron

    • Modello: MC-55-44-ZX

    • Dimensioni: 512 GB

È possibile utilizzare la chiave "target" nel layout per indirizzare nodi specifici. La notazione della destinazione Salt consente di non complicare la configurazione:

service_type: osd
service_id: example_drvgrp_one2five
placement:
  host_pattern: 'node[1-5]'
data_devices:
  rotational: 1
db_devices:
  rotational: 0

seguito da

service_type: osd
service_id: example_drvgrp_rest
placement:
  host_pattern: 'node[6-10]'
data_devices:
  model: MC-55-44-XZ
db_devices:
  model: SSD-123-foo
Esempio 13.5: Configurazione esperta

In tutti i casi descritti in precedenza si presupponeva che i WAL e i DB utilizzassero lo stesso dispositivo. È tuttavia possibile anche distribuire i WAL su un dispositivo dedicato:

  • 20 HDD

    • Produttore: Intel

    • Modello: SSD-123-foo

    • Dimensioni: 4 TB

  • 2 SSD

    • Produttore: Micron

    • Modello: MC-55-44-ZX

    • Dimensioni: 512 GB

  • 2 NVMe

    • Produttore: Samsung

    • Modello: NVME-QQQQ-987

    • Dimensioni: 256 GB

service_type: osd
service_id: example_drvgrp_name
placement:
  host_pattern: '*'
data_devices:
  model: MC-55-44-XZ
db_devices:
  model: SSD-123-foo
wal_devices:
  model: NVME-QQQQ-987
Esempio 13.6: Configurazione complessa (e improbabile)

Nella configurazione seguente, si tenterà di definire:

  • 20 HDD supportati da 1 NVMe

  • 2 HDD supportati da 1 SSD (db) e 1 NVMe (wal)

  • 8 SSD supportati da 1 NVMe

  • 2 SSD stand-alone (cifrati)

  • 1 HDD è di riserva e non deve essere distribuito.

Di seguito è riportato il riepilogo delle unità utilizzate:

  • 23 HDD

    • Produttore: Intel

    • Modello: SSD-123-foo

    • Dimensioni: 4 TB

  • 10 SSD

    • Produttore: Micron

    • Modello: MC-55-44-ZX

    • Dimensioni: 512 GB

  • 1 NVMe

    • Produttore: Samsung

    • Modello: NVME-QQQQ-987

    • Dimensioni: 256 GB

La definizione dei DriveGroups sarà la seguente:

service_type: osd
service_id: example_drvgrp_hdd_nvme
placement:
  host_pattern: '*'
data_devices:
  rotational: 0
db_devices:
  model: NVME-QQQQ-987
service_type: osd
service_id: example_drvgrp_hdd_ssd_nvme
placement:
  host_pattern: '*'
data_devices:
  rotational: 0
db_devices:
  model: MC-55-44-XZ
wal_devices:
  model: NVME-QQQQ-987
service_type: osd
service_id: example_drvgrp_ssd_nvme
placement:
  host_pattern: '*'
data_devices:
  model: SSD-123-foo
db_devices:
  model: NVME-QQQQ-987
service_type: osd
service_id: example_drvgrp_standalone_encrypted
placement:
  host_pattern: '*'
data_devices:
  model: SSD-123-foo
encrypted: True

Rimarrà un'unità HDD, poiché il file viene analizzato dall'alto verso il basso.

13.4.4 Rimozione degli OSD

Prima di rimuovere un nodo OSD dal cluster, verificare che lo spazio su disco disponibile sul cluster sia maggiore del disco OSD che verrà rimosso. Tenere presente che la rimozione di un OSD comporta il ribilanciamento dell'intero cluster.

  1. Identificare l'OSD da rimuovere recuperandone l'ID:

    cephuser@adm > ceph orch ps --daemon_type osd
    NAME   HOST            STATUS        REFRESHED  AGE  VERSION
    osd.0  target-ses-090  running (3h)  7m ago     3h   15.2.7.689 ...
    osd.1  target-ses-090  running (3h)  7m ago     3h   15.2.7.689 ...
    osd.2  target-ses-090  running (3h)  7m ago     3h   15.2.7.689 ...
    osd.3  target-ses-090  running (3h)  7m ago     3h   15.2.7.689 ...
  2. Rimuovere uno o più OSD dal cluster:

    cephuser@adm > ceph orch osd rm OSD1_ID OSD2_ID ...

    Esempio:

    cephuser@adm > ceph orch osd rm 1 2
  3. È possibile interrogare lo stato dell'operazione di rimozione:

    cephuser@adm > ceph orch osd rm status
    OSD_ID  HOST         STATE                    PG_COUNT  REPLACE  FORCE  STARTED_AT
    2       cephadm-dev  done, waiting for purge  0         True     False  2020-07-17 13:01:43.147684
    3       cephadm-dev  draining                 17        False    True   2020-07-17 13:01:45.162158
    4       cephadm-dev  started                  42        False    True   2020-07-17 13:01:45.162158

13.4.4.1 Interruzione della rimozione dell'OSD

Se necessario, è possibile interrompere la rimozione di OSD dopo averla pianificata. Il comando seguente reimposterà lo stato iniziale dell'OSD e lo rimuoverà dalla coda:

cephuser@adm > ceph orch osd rm stop OSD_SERVICE_ID

13.4.5 Sostituzione degli OSD

Per sostituire un OSD conservandone l'ID, eseguire:

cephuser@adm > ceph orch osd rm OSD_SERVICE_ID --replace

Esempio:

cephuser@adm > ceph orch osd rm 4 --replace

La procedura per la sostituzione di un OSD è identica a quella per la rimozione (vedere la Sezione 13.4.4, «Rimozione degli OSD» per ulteriori dettagli) con l'eccezione che l'OSD non viene rimosso definitivamente dalla gerarchia CRUSH e gli viene invece assegnato un flag destroyed.

Il flag destroyed è utilizzato per determinare gli ID degli OSD che verranno riutilizzati durante la successiva distribuzione degli OSD. Ai dischi appena aggiunti corrispondenti alla specifica dei DriveGroups (vedere la Sezione 13.4.3, «Aggiunta di OSD tramite la specifica dei DriveGroups» per ulteriori dettagli) verranno assegnati gli ID degli OSD della controparte corrispondente sostituita.

Suggerimento
Suggerimento

Aggiungendo l'opzione --dry-run, non verrà eseguita la sostituzione effettiva, ma verrà visualizzata in anteprima la procedura prevista.

13.5 Trasferimento del Salt Master a un nuovo nodo

Se è necessario sostituire l'host del Salt Master con uno nuovo, seguire la procedura indicata di seguito:

  1. Esportare la configurazione del cluster ed eseguire il backup del file JSON esportato. Ulteriori dettagli sono disponibili nel Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.3.2.15 “Esportazione delle configurazioni del cluster”.

  2. Se il Salt Master precedente è anche l'unico nodo di amministrazione nel cluster, spostare manualmente /etc/ceph/ceph.client.admin.keyring e /etc/ceph/ceph.conf nel nuovo Salt Master.

  3. Interrompere e disabilitare il servizio systemd del Salt Master sul nodo del Salt Master precedente:

    root@master # systemctl stop salt-master.service
    root@master # systemctl disable salt-master.service
  4. Se il nodo del Salt Master precedente non è più presente nel cluster, interrompere e disabilitare anche il servizio systemd del Salt Minion:

    root@master # systemctl stop salt-minion.service
    root@master # systemctl disable salt-minion.service
    Avvertimento
    Avvertimento

    Non interrompere o disabilitare salt-minion.service se sul nodo del Salt Master precedente sono presenti daemon Ceph (MON, MGR, OSD, MDS, gateway, monitoraggio) in esecuzione.

  5. Installare SUSE Linux Enterprise Server 15 SP2 sul nuovo Salt Master seguendo la procedura descritta in Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.1 “Installazione e configurazione di SUSE Linux Enterprise Server”.

    Suggerimento
    Suggerimento: transizione del Salt Minion

    Per semplificare la transizione dei Salt Minion sul nuovo Salt Master, rimuovere la chiave pubblica originale del Salt Master da ciascuno di questi:

    root@minion > rm /etc/salt/pki/minion/minion_master.pub
    root@minion > systemctl restart salt-minion.service
  6. Installare il pacchetto salt-master e, se applicabile, il pacchetto salt-minion sul nuovo Salt Master.

  7. Installare ceph-salt sul nuovo nodo del Salt Master:

    root@master # zypper install ceph-salt
    root@master # systemctl restart salt-master.service
    root@master # salt '*' saltutil.sync_all
    Importante
    Importante

    Assicurarsi di eseguire tutti i tre comandi prima di continuare. I comandi sono idempotenti; non importa se vengono ripetuti.

  8. Includere il nuovo Salt Master nel cluster come descritto in Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.3.1 “Installazione di ceph-salt, Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.3.2.2 “Aggiunta di Salt Minion” e Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.3.2.4 “Specifica del nodo admin”.

  9. Importare la configurazione del cluster sottoposta a backup e applicarla:

    root@master # ceph-salt import CLUSTER_CONFIG.json
    root@master # ceph-salt apply
    Importante
    Importante

    Rinominare il minion id del Salt Master nel file CLUSTER_CONFIG.json esportato prima di importarlo.

13.6 Aggiornamento dei nodi del cluster

Mantenere i nodi del cluster Ceph aggiornati applicando regolarmente gli aggiornamenti in sequenza.

13.6.1 Archivi software

Prima di applicare le patch al cluster con i pacchetti software più recenti, verificare che tutti i nodi del cluster dispongano dell'accesso agli archivi pertinenti. Per un elenco completo degli archivi obbligatori, consultare questo riferimento: Book “Guida alla distribuzione”, Chapter 7 “Upgrade da una release precedente”, Section 7.1.5.1 “Archivi software”.

13.6.2 Gestione provvisoria dell'archivio

Se si utilizza uno strumento di gestione provvisoria, ad esempio SUSE Manager, Repository Management Tool o RMT, tramite cui implementare gli archivi software sui nodi del cluster, verificare che le fasi degli archivi "Updates" di SUSE Linux Enterprise Server e SUSE Enterprise Storage vengano create nello stesso momento.

Si consiglia di utilizzare uno strumento di gestione temporanea per l'applicazione di patch con livelli di patch frozen o staged. In questo modo, sarà possibile assicurarsi che i nuovi nodi uniti al cluster dispongano dello stesso livello di patch dei nodi già in esecuzione al suo interno. Questo evita di dover applicare le patch più recenti a tutti i nodi del cluster prima che i nuovi nodi possano unirsi a quest'ultimo.

13.6.3 Tempo di fermo dei servizi Ceph

A seconda della configurazione, i nodi del cluster potrebbero essere riavviati durante l'aggiornamento. Se è presente un single point of failure per servizi come Object Gateway, gateway Samba, NFS Ganesha o iSCSI, i computer del client potrebbero essere temporaneamente disconnessi dai servizi i cui nodi sono in corso di riavvio.

13.6.4 Esecuzione dell'aggiornamento

Per aggiornare i pacchetti software su tutti i nodi del cluster alla versione più recente, eseguire il comando seguente:

root@master # ceph-salt update

13.7 Aggiornamento di Ceph

È possibile inviare a cephadm l'istruzione di aggiornare Ceph da una release di correzione di bug all'altra. L'aggiornamento automatico dei servizi Ceph rispetta l'ordine consigliato: inizia con i Ceph Manager, i Ceph Monitor e quindi continua sugli altri servizi, come Ceph OSD, Metadata Server e Object Gateway. Ogni daemon viene riavviato solo dopo che Ceph indica che il cluster resterà disponibile.

Nota
Nota

Nel processo di aggiornamento riportato di seguito è utilizzato il comando ceph orch upgrade. Tenere presente che le istruzioni seguenti illustrano come aggiornare il cluster Ceph con una versione del prodotto (ad esempio, un aggiornamento di manutenzione) e non spiegano come eseguire l'upgrade del cluster da una versione del prodotto all'altra.

13.7.1 Avvio dell'aggiornamento

Prima di avviare l'aggiornamento, verificare che tutti i nodi siano online e che il cluster sia integro:

cephuser@adm > cephadm shell -- ceph -s

Per eseguire l'aggiornamento a una release Ceph specifica:

cephuser@adm > ceph orch upgrade start --image REGISTRY_URL

Esempio:

cephuser@adm > ceph orch upgrade start --image registry.suse.com/ses/7/ceph/ceph:latest

Eseguire l'upgrade dei pacchetti sugli host:

cephuser@adm > ceph-salt update

13.7.2 Monitoraggio dell'aggiornamento

Eseguire il comando seguente per determinare se è in corso un aggiornamento:

cephuser@adm > ceph orch upgrade status

Mentre l'aggiornamento è in corso, nell'output dello stato di Ceph verrà visualizzata una barra di avanzamento:

cephuser@adm > ceph -s
[...]
  progress:
    Upgrade to registry.suse.com/ses/7/ceph/ceph:latest (00h 20m 12s)
      [=======.....................] (time remaining: 01h 43m 31s)

È inoltre possibile visualizzare il log cephadm:

cephuser@adm > ceph -W cephadm

13.7.3 Annullamento dell'aggiornamento

È possibile interrompere il processo di aggiornamento in qualsiasi momento:

cephuser@adm > ceph orch upgrade stop

13.8 Interruzione o riavvio del cluster

In alcuni casi può essere necessario interrompere o riavviare l'intero cluster. Si consiglia di verificare attentamente le dipendenze dei servizi in esecuzione. Nei passaggi successivi è descritto come interrompere e avviare il cluster:

  1. Indicare al cluster Ceph di impostare il flag noout:

    cephuser@adm > ceph osd set noout
  2. Interrompere daemon e nodi nel seguente ordine:

    1. Client di memorizzazione

    2. Gateway, ad esempio NFS Ganesha o Object Gateway

    3. Metadata Server

    4. Ceph OSD

    5. Ceph Manager

    6. Ceph Monitor

  3. Se necessario, eseguire task di manutenzione.

  4. Avviare nodi e server in ordine inverso rispetto al processo di spegnimento:

    1. Ceph Monitor

    2. Ceph Manager

    3. Ceph OSD

    4. Metadata Server

    5. Gateway, ad esempio NFS Ganesha o Object Gateway

    6. Client di memorizzazione

  5. Rimuovere il flag noout:

    cephuser@adm > ceph osd unset noout

13.9 Rimozione dell'intero cluster Ceph

Il comando ceph-salt purge consente di rimuovere l'intero cluster Ceph. Se sono stati distribuiti altri cluster Ceph, viene eliminato definitivamente quello segnalato da ceph -s. In questo modo è possibile pulire l'ambiente del cluster durante il test di diverse configurazioni.

Per evitare eliminazioni involontarie, lo strumento di coordinamento controlla se le misure di sicurezza sono disattivate. È possibile disattivare le misure di sicurezza e rimuovere il cluster Ceph eseguendo:

root@master # ceph-salt disengage-safety
root@master # ceph-salt purge

14 Funzionamento dei servizi Ceph

È possibile utilizzare i servizi Ceph a livello di daemon, nodo o cluster. A seconda dell'approccio richiesto, utilizzare cephadm o il comando systemctl.

14.1 Attivazione dei servizi singoli

Se è necessario utilizzare un singolo servizio, per prima cosa individuarlo:

cephuser@adm > ceph orch ps
NAME                                HOST        STATUS         REFRESHED  [...]
mds.my_cephfs.ses-min1.oterul       ses-min1    running (5d)   8m ago
mgr.ses-min1.gpijpm                 ses-min1    running (5d)   8m ago
mgr.ses-min2.oopvyh                 ses-min2    running (5d)   8m ago
mon.ses-min1                        ses-min1    running (5d)   8m ago
mon.ses-min2                        ses-min2    running (5d)   8m ago
mon.ses-min4                        ses-min4    running (5d)   7m ago
osd.0                               ses-min2    running (61m)  8m ago
osd.1                               ses-min3    running (61m)  7m ago
osd.2                               ses-min4    running (61m)  7m ago
rgw.myrealm.myzone.ses-min1.kwwazo  ses-min1    running (5d)   8m ago
rgw.myrealm.myzone.ses-min2.jngabw  ses-min2    error          8m ago

Per identificare un servizio su un nodo specifico, eseguire:

ceph orch ps NODE_HOST_NAME

Esempio:

cephuser@adm > ceph orch ps ses-min2
NAME                                HOST      STATUS         REFRESHED
mgr.ses-min2.oopvyh                 ses-min2  running (5d)   3m ago
mon.ses-min2                        ses-min2  running (5d)   3m ago
osd.0                               ses-min2  running (67m)  3m ago
Suggerimento
Suggerimento

Il comando ceph orch ps supporta diversi formati di output. Per modificare il formato, aggiungere l'opzione --format FORMAT, dove FORMAT indica uno tra i formati json, json-pretty o yaml. Esempio:

cephuser@adm > ceph orch ps --format yaml

Una volta individuato il nome del servizio, è possibile avviarlo, riavviarlo o interromperlo:

ceph orch daemon COMMAND SERVICE_NAME

Ad esempio, per riavviare il servizio OSD con l'ID 0, eseguire:

cephuser@adm > ceph orch daemon restart osd.0

14.2 Attivazione dei tipi di servizio

Se è necessario utilizzare un tipo di servizio specifico nell'intero cluster Ceph, immettere il comando seguente:

ceph orch COMMAND SERVICE_TYPE

Sostituire COMMAND con start, stop o restart.

Ad esempio, il comando seguente riavvia tutti i MON nel cluster, a prescindere dai nodi su cui sono effettivamente in esecuzione:

cephuser@adm > ceph orch restart mon

14.3 Attivazione dei servizi su un singolo nodo

Tramite il comando systemctl, è possibile utilizzare le destinazioni e i servizi systemd correlati a Ceph su un singolo nodo.

14.3.1 Identificazione di servizi e destinazioni

Prima di utilizzare le destinazioni e i servizi systemd correlati a Ceph, individuare i nomi di file dei relativi file di unità. I nomi di file dei servizi seguono il modello seguente:

ceph-FSID@SERVICE_TYPE.ID.service

Esempio:

ceph-b4b30c6e-9681-11ea-ac39-525400d7702d@mon.doc-ses-min1.service
ceph-b4b30c6e-9681-11ea-ac39-525400d7702d@rgw.myrealm.myzone.doc-ses-min1.kwwazo.service
FSID

ID univoco del cluster Ceph. È possibile trovarlo nell'output del comando ceph fsid.

SERVICE_TYPE

Tipo di servizio, ad esempio osd, mon o rgw.

ID

Stringa identificativa del servizio. Per gli OSD, si tratta del numero di ID del servizio. Per gli altri servizi, può corrispondere al nome host del nodo o a stringhe aggiuntive rilevanti per il tipo di servizio.

Suggerimento
Suggerimento

La porzione SERVICE_TYPE.ID è identica al contenuto della colonna NAME nell'output del comando ceph orch ps.

14.3.2 Attivazione di tutti i servizi su un nodo

Tramite le destinazioni systemd di Ceph, è possibile utilizzare contemporaneamente tutti i servizi su un nodo oppure tutti i servizi appartenenti a un cluster identificato dal relativo FSID.

Ad esempio, per interrompere tutti i servizi Ceph su un nodo a prescindere dal cluster a cui appartengono, eseguire:

root@minion > systemctl stop ceph.target

Per riavviare tutti i servizi appartenenti a un cluster Ceph con ID b4b30c6e-9681-11ea-ac39-525400d7702d, eseguire:

root@minion > systemctl restart ceph-b4b30c6e-9681-11ea-ac39-525400d7702d.target

14.3.3 Attivazione di un singolo servizio su un nodo

Dopo aver identificato il nome di un servizio specifico, attivarlo come segue:

systemctl COMMAND SERVICE_NAME

Ad esempio, per riavviare un singolo servizio OSD con ID 1 su un cluster con ID b4b30c6e-9681-11ea-ac39-525400d7702d, eseguire:

root # systemctl restart ceph-b4b30c6e-9681-11ea-ac39-525400d7702d@osd.1.service

14.3.4 Interrogazione dello stato del servizio

È possibile interrogare systemd per lo stato dei servizi. Esempio:

root # systemctl status ceph-b4b30c6e-9681-11ea-ac39-525400d7702d@osd.0.service

14.4 Spegnimento e riavvio dell'intero cluster Ceph

Se è in programma un'interruzione di corrente, potrebbe essere necessario spegnere e riavviare il cluster. Per interrompere e riavviare senza problemi tutti i servizi correlati a Ceph, seguire la procedura indicata di seguito:

Procedura 14.1: Spegnimento dell'intero cluster Ceph
  1. Spegnere o disconnettere i client con accesso al cluster.

  2. Per impedire il ribilanciamento automatico del cluster da parte di CRUSH, impostare il cluster su noout:

    cephuser@adm > ceph osd set noout
  3. Interrompere tutti i servizi Ceph su tutti i nodi del cluster:

    root@master # ceph-salt stop
  4. Disattivare tutti i nodi del cluster:

    root@master # salt -G 'ceph-salt:member' cmd.run "shutdown -h"
Procedura 14.2: Avvio dell'intero cluster Ceph
  1. Attivare il nodo admin.

  2. Attivare i nodi Ceph Monitor.

  3. Attivare i nodi Ceph OSD.

  4. Annullare l'impostazione del flag noout configurata in precedenza:

    root@master # ceph osd unset noout
  5. Attivare tutti i gateway configurati.

  6. Attivare o connettere i client del cluster.

15 Backup e ripristino

Questo capitolo illustra quali parti del cluster Ceph sottoporre a backup per il ripristino della funzionalità.

15.1 Backup della configurazione e dei dati del cluster

15.1.1 Backup della configurazione ceph-salt

Esportare la configurazione del cluster. Per ulteriori informazioni, vedere Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.3.2.15 “Esportazione delle configurazioni del cluster”.

15.1.2 Backup della configurazione Ceph

Eseguire il backup della directory /etc/ceph contenente la configurazione fondamentale del cluster. Ad esempio, il backup di /etc/ceph sarà necessario quando occorre sostituire il nodo admin.

15.1.3 Backup della configurazione Salt

È necessario eseguire il backup della directory /etc/salt contenente i file di configurazione Salt, ad esempio la chiave del Salt Master e le chiavi del client accettate.

I file Salt non sono obbligatori per il backup del nodo admin, ma semplificano la ridistribuzione del cluster Salt. Se il backup di tali file non è presente, minion è necessario registrare nuovamente i Salt minion nel nuovo nodo admin.

Nota
Nota: sicurezza della chiave privata del Salt master

Verificare che il backup della chiave privata del Salt Master sia memorizzato in un'ubicazione sicura. La chiave del Salt Master può essere utilizzata per modificare tutti i nodi del cluster.

15.1.4 Backup delle configurazioni personalizzate

  • Dati e personalizzazione di Prometheus.

  • Personalizzazione di Grafana.

  • Modifiche manuali alla configurazione iSCSI.

  • Chiavi Ceph.

  • Mappa CRUSH e regole CRUSH. Salvare la mappa CRUSH non compilata, incluse le regole CRUSH, in crushmap-backup.txt eseguendo il comando seguente:

    cephuser@adm > ceph osd getcrushmap | crushtool -d - -o crushmap-backup.txt
  • Configurazione del gateway Samba. Se si utilizza un gateway singolo, eseguire il backup di /etc/samba/smb.conf. Se si utilizza una configurazione ad elevata disponibilità, eseguire il backup anche dei file di configurazione CTDB e Pacemaker. Fare riferimento al Capitolo 24, Esportazione dei dati Ceph tramite Samba per i dettagli sulla configurazione utilizzata dai gateway Samba.

  • Configurazione di NFS Ganesha. Necessaria soltanto se si utilizza una configurazione ad elevata disponibilità. Fare riferimento al Capitolo 25, NFS Ganesha per i dettagli sulla configurazione utilizzata da NFS Ganesha.

15.2 Ripristino di un nodo Ceph

Per recuperare un nodo dal backup reinstallare il nodo, sostituire i relativi file di configurazione e riorganizzare il cluster per fare in modo che venga nuovamente aggiunto il nodo di sostituzione.

Se è necessario ridistribuire il nodo admin, fare riferimento alla Sezione 13.5, «Trasferimento del Salt Master a un nuovo nodo».

Per i minion, è in genere più semplice eseguire una nuova ricompilazione e la ridistribuzione.

  1. Reinstallare il nodo. Per ulteriori informazioni, vedere Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.1 “Installazione e configurazione di SUSE Linux Enterprise Server”

  2. Installare Salt. Per ulteriori informazioni, vedere Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.2 “Distribuzione Salt”.

  3. In seguito al ripristino della directory /etc/salt dal backup, abilitare e riavviare i servizi Salt applicabili, ad esempio:

    root@master # systemctl enable salt-master
    root@master # systemctl start salt-master
    root@master # systemctl enable salt-minion
    root@master # systemctl start salt-minion
  4. Rimuovere la chiave master pubblica relativa al nodo Salt Master precedente da tutti i minion.

    root@master # rm /etc/salt/pki/minion/minion_master.pub
    root@master # systemctl restart salt-minion
  5. Ripristinare gli elementi locali nel nodo admin.

  6. Importare la configurazione del cluster dal file JSON esportato in precedenza. Per ulteriori dettagli, fare riferimento al Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.3.2.15 “Esportazione delle configurazioni del cluster”.

  7. Applicare la configurazione del cluster importata:

    root@master # ceph-salt apply

16 Monitoraggio e creazione di avvisi

In SUSE Enterprise Storage 7, cephadm esegue la distribuzione di uno stack di monitoraggio e creazione di avvisi. Gli utenti devono definire i servizi (ad esempio Prometheus, Alertmanager e Grafana) da distribuire con cephadm in un file di configurazione YAML oppure distribuirli tramite l'interfaccia riga di comando. Se sono distribuiti più servizi dello stesso tipo, viene eseguita una configurazione ad elevata disponibilità. L'utilità di esportazione dei nodi rappresenta un'eccezione a questa regola.

Tramite cephadm è possibile distribuire i servizi di monitoraggio seguenti:

  • Prometheus è il kit di strumenti per la creazione di avvisi e il monitoraggio. Raccoglie i dati forniti dalle utilità di esportazione di Prometheus e genera avvisi preconfigurati se vengono raggiunte delle soglie predefinite.

  • Alertmanager gestisce gli avvisi inviati dal server Prometheus. Deduplica, raggruppa e instrada gli avvisi al ricevitore corretto. Per default, il Ceph Dashboard sarà configurato automaticamente come ricevitore.

  • Grafana è il software di visualizzazione e creazione di avvisi. La funzionalità di creazione di avvisi di Grafana non è utilizzata da questo stack di monitoraggio. Per la creazione di avvisi, è utilizzato Alertmanager.

  • Node exporter è un'utilità di esportazione per Prometheus che fornisce i dati relativi al nodo su cui è installato. Si consiglia di installare questa utilità di esportazione dei nodi su tutti i nodi.

Il modulo Manager di Prometheus fornisce un'utilità di esportazione Prometheus da passare ai contatori delle prestazioni di Ceph dal punto di raccolta in ceph-mgr.

La configurazione di Prometheus, incluse le destinazioni di scrape (daemon che forniscono metriche), viene impostata automaticamente da cephadm. cephadm inoltre distribuisce un elenco di avvisi di default, ad esempio health error, 10% OSDs down o pgs inactive.

Per default, il traffico verso Grafana è cifrato tramite TLS. È possibile specificare un proprio certificato TLS o utilizzarne uno autofirmato. Se prima della distribuzione di Grafana non è stato configurato nessun certificato personalizzato, ne verrà creato e configurato automaticamente uno autofirmato per Grafana.

È possibile configurare i certificati personalizzati per Grafana utilizzando i comandi seguenti:

cephuser@adm >  ceph config-key set mgr/cephadm/grafana_key -i $PWD/key.pem
cephuser@adm >  ceph config-key set mgr/cephadm/grafana_crt -i $PWD/certificate.pem

Alertmanager gestisce gli avvisi inviati dal server Prometheus. Si occupa di deduplicarli, raggrupparli e instradarli al ricevitore corretto. È possibile silenziare gli eventi tramite Alertmanager, ma è possibile gestire i silenziamenti anche dal Ceph Dashboard.

Si consiglia di distribuire l'utilità Node Exporter su tutti i nodi. A questo scopo, utilizzare il file monitoring.yaml con il tipo di servizio node-exporter. Per ulteriori informazioni sulla distribuzione dei servizi, vedere Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.4.3.8 “Distribuzione dello stack di monitoraggio”.

16.1 Configurazione di immagini personalizzate o locali

Suggerimento
Suggerimento

Questa sezione descrive come modificare la configurazione delle immagini del container utilizzate durante la distribuzione o l'aggiornamento dei servizi. Non include i comandi da eseguire per la distribuzione o la ridistribuzione dei servizi.

Il metodo consigliato per la distribuzione dello stack di monitoraggio consiste nell'applicarne la specifica come descritto in Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.4.3.8 “Distribuzione dello stack di monitoraggio”.

Per distribuire le immagini del container personalizzate o locali, è necessario impostare tali immagini in cephadm. A questo scopo, è necessario eseguire il comando seguente:

cephuser@adm > ceph config set mgr mgr/cephadm/OPTION_NAME VALUE

Dove OPTION_NAME è uno dei nomi seguenti:

  • container_image_prometheus

  • container_image_node_exporter

  • container_image_alertmanager

  • container_image_grafana

Se non viene impostata alcuna opzione o se l'impostazione è stata rimossa, come VALUE vengono utilizzate le immagini seguenti:

  • registry.suse.com/caasp/v4.5/prometheus-server:2.18.0

  • registry.suse.com/caasp/v4.5/prometheus-node-exporter:0.18.1

  • registry.suse.com/caasp/v4.5/prometheus-alertmanager:0.16.2

  • registry.suse.com/ses/7/ceph/grafana:7.0.3

Esempio:

cephuser@adm > ceph config set mgr mgr/cephadm/container_image_prometheus prom/prometheus:v1.4.1
Nota
Nota

Se viene impostata un'immagine personalizzata, il valore di default verrà sostituito (ma non sovrascritto). Il valore di default cambia quando sono disponibili degli aggiornamenti. Se si imposta un'immagine personalizzata, non sarà possibile aggiornare automaticamente il componente per cui è stata impostata tale immagine. Sarà necessario aggiornare manualmente la configurazione (tag e nome immagine) per poter installare gli aggiornamenti.

Se si sceglie di seguire invece le raccomandazioni, sarà possibile reimpostare l'immagine personalizzata impostata in precedenza. Dopodiché, il valore di default verrà utilizzato nuovamente. Utilizzare ceph config rm per reimpostare l'opzione di configurazione:

cephuser@adm > ceph config rm mgr mgr/cephadm/OPTION_NAME

Esempio:

cephuser@adm > ceph config rm mgr mgr/cephadm/container_image_prometheus

16.2 Aggiornamento dei servizi di monitoraggio

Come accennato nella Sezione 16.1, «Configurazione di immagini personalizzate o locali», cephadm è fornito con gli URL delle immagini del container consigliate e testate, che sono utilizzate per default.

Con l'aggiornamento dei pacchetti Ceph, potrebbero essere disponibili nuove versioni di tali URL. Questo aggiornamento si applica solo alla posizione da cui viene eseguito il pull delle immagini del container e non vale per i servizi.

In seguito all'aggiornamento degli URL delle nuove immagini del container (manualmente come descritto nella Sezione 16.1, «Configurazione di immagini personalizzate o locali» o automaticamente tramite l'aggiornamento del pacchetto Ceph), è possibile aggiornare i servizi di monitoraggio.

A questo scopo, utilizzare ceph orch redeploy come segue:

cephuser@adm > ceph orch redeploy node-exporter
cephuser@adm > ceph orch redeploy prometheus
cephuser@adm > ceph orch redeploy alertmanager
cephuser@adm > ceph orch redeploy grafana

Al momento, non esiste nessun comando singolo che consenta di aggiornare tutti i servizi di monitoraggio. L'ordine in cui i servizi vengono aggiornati non ha importanza.

Nota
Nota

Se si utilizzano immagini del container personalizzate, gli URL specificati per i servizi di monitoraggio non cambieranno automaticamente se i pacchetti Ceph vengono aggiornati. Se sono state specificate immagini del container personalizzate, sarà necessario immettere manualmente gli URL delle nuove immagini del container. Ad esempio, ciò si applica nel caso in cui si utilizzi un registro del container locale.

Alla Sezione 16.1, «Configurazione di immagini personalizzate o locali», è possibile trovare gli URL delle immagini del container consigliate per l'utilizzo.

16.3 Disabilitazione del monitoraggio

Per disabilitare lo stack di monitoraggio, eseguire i comandi seguenti:

cephuser@adm > ceph orch rm grafana
cephuser@adm > ceph orch rm prometheus --force   # this will delete metrics data collected so far
cephuser@adm > ceph orch rm node-exporter
cephuser@adm > ceph orch rm alertmanager
cephuser@adm > ceph mgr module disable prometheus

16.4 Configurazione di Grafana

Per poter verificare la presenza dei dashboard di Grafana prima che questi vengano caricati dal front-end, il back-end del Ceph Dashboard richiede l'URL Grafana. A causa del metodo applicato per l'implementazione di Grafana nel Ceph Dashboard, ciò vuol dire che sono necessarie due connessioni attive per poter visualizzare i grafici di Grafana nel Ceph Dashboard:

  • Il back-end (modulo Ceph MGR) deve verificare l'esistenza del grafico richiesto. Se la richiesta va a buon fine, comunica al front-end che può accedere a Grafana in sicurezza.

  • Il front-end richiede quindi i grafici di Grafana direttamente dal browser dell'utente tramite un iframe. L'accesso all'istanza di Grafana viene eseguito direttamente dal Ceph Dashboard senza deviazioni.

A questo punto, l'ambiente potrebbe rendere difficile al browser dell'utente l'accesso diretto all'URL configurato nel Ceph Dashboard. Per risolvere questo problema, è possibile configurare un URL separato che verrà utilizzato esclusivamente per comunicare al front-end (il browser dell'utente) quale URL utilizzare per accedere a Grafana.

Per modificare l'URL restituito al front-end, immettere il comando seguente:

cephuser@adm > ceph dashboard set-grafana-frontend-api-url GRAFANA-SERVER-URL

Se per questa opzione non è impostato alcun valore, verrà semplicemente eseguito il fallback al valore dell'opzione GRAFANA_API_URL, impostato automaticamente e aggiornato su base periodica da cephadm. Se è presente un valore impostato, il browser riceverà l'istruzione di utilizzare questo URL per accedere a Grafana.

16.5 Configurazione del modulo Manager di Prometheus

Il modulo Manager di Prometheus è un modulo interno di Ceph che ne estende le funzionalità. Il modulo legge i (meta)dati di Ceph relativi allo stato e all'integrità e fornisce a Prometheus tali dati (sottoposti a scrape) in un formato utilizzabile.

Nota
Nota

Per applicare le modifiche alla configurazione, è necessario riavviare il modulo Manager di Prometheus.

16.5.1 Configurazione dell'interfaccia di rete

Per default, il modulo Manager di Prometheus accetta le richieste HTTP sulla porta 9283 su tutti gli indirizzi IPv4 e IPv6 sull'host. È possibile configurare la porta e l'indirizzo di ascolto con ceph config-key set, con le chiavi mgr/prometheus/server_addr e mgr/prometheus/server_port. Questa porta è registrata nel registro di Prometheus.

Per aggiornare il valore di server_addr, eseguire il comando seguente:

cephuser@adm > ceph config set mgr mgr/prometheus/server_addr 0.0.0.0

Per aggiornare il valore di server_port, eseguire il comando seguente:

cephuser@adm > ceph config set mgr mgr/prometheus/server_port 9283

16.5.2 Configurazione del valore di scrape_interval

Per default, il modulo Manager di Prometheus è configurato su un intervallo di scraping di 15 secondi. Si sconsiglia di utilizzare un intervallo di scraping inferiore a 10 secondi. Per impostare un diverso intervallo di scraping nel modulo di Prometheus, impostare scrape_interval sul valore desiderato:

Importante
Importante

Per garantire il corretto funzionamento del modulo, il relativo valore di scrape_interval impostato deve corrispondere sempre all'intervallo di scraping di Prometheus.

cephuser@adm > ceph config set mgr mgr/prometheus/scrape_interval 15

16.5.3 Configurazione della cache

Sui cluster di grandi dimensioni (più di 1000 OSD), può essere necessario molto tempo per completare il recupero delle metriche. Senza la cache, il modulo Manager di Prometheus potrebbe sovraccaricare il manager e causare l'arresto anomalo o il blocco delle istanze di Ceph Manager. Di conseguenza, la cache è abilitata per default e non è possibile disabilitarla, ma ciò implica che può diventare obsoleta. La cache è considerata obsoleta quando l'intervallo di tempo impiegato per il recupero delle metriche da Ceph supera il valore impostato per scrape_interval.

In questo caso, viene registrato un avviso e il modulo reagirà in uno dei modi seguenti:

  • Risponderà con un codice di stato 503 HTTP (servizio non disponibile).

  • Restituirà i contenuti della cache, anche se potrebbero essere obsoleti.

Questo comportamento può essere configurato con i comandi ceph config set.

Per inviare al modulo l'istruzione di rispondere con i dati verosimilmente obsoleti, impostarlo su return:

cephuser@adm > ceph config set mgr mgr/prometheus/stale_cache_strategy return

Per inviare al modulo l'istruzione di rispondere con l'errore service unavailable, impostarlo su fail:

cephuser@adm > ceph config set mgr mgr/prometheus/stale_cache_strategy fail

16.5.4 Abilitazione del monitoraggio dell'immagine RBD

Tramite l'abilitazione dei contatori delle prestazioni dinamiche dell'OSD, il modulo Manager di Prometheus può facoltativamente raccogliere le statistiche I/O per ogni singola immagine RBD. Tali statistiche vengono raccolte per tutte le immagini all'interno dei pool specificati nel parametro di configurazione mgr/prometheus/rbd_stats_pools.

Il parametro è un elenco di voci pool[/namespace] separate da virgole o spazi. Se lo spazio dei nomi non è specificato, vengono raccolte le statistiche relative a tutti gli spazi dei nomi nel pool.

Esempio:

cephuser@adm > ceph config set mgr mgr/prometheus/rbd_stats_pools "pool1,pool2,poolN"

Il modulo effettua la scansione dei pool e degli spazi dei nomi specificati e crea un elenco di tutte le immagini disponibili e lo aggiorna periodicamente. È possibile configurare l'intervallo tramite il parametro mgr/prometheus/rbd_stats_pools_refresh_interval (secondi), impostato per default su 300 secondi (cinque minuti).

Ad esempio, se l'intervallo di sincronizzazione è stato modificato in 10 minuti:

cephuser@adm > ceph config set mgr mgr/prometheus/rbd_stats_pools_refresh_interval 600

16.6 Modello di sicurezza di Prometheus

Il modello di sicurezza di Prometheus presume che utenti non attendibili dispongano dell'accesso ai log e all'endpoint HTTP di Prometheus. Gli utenti non attendibili dispongono dell'accesso a tutti i (meta)dati raccolti da Prometheus e contenuti nel database, oltre a una serie di informazioni operative e di debug.

Tuttavia l'API HTTP di Prometheus è limitata alle operazioni di sola lettura. Non è possibile modificare le configurazioni utilizzando l'API e i segreti non vengono esposti. Inoltre, Prometheus dispone di misure integrate per attenuare l'impatto degli attacchi Denial of Service.

16.7 Webhook SNMP di Prometheus Alertmanager

Se si desidera ricevere notifiche sugli avvisi di Prometheus tramite trap SNMP, è possibile installare il webhook SNMP di Prometheus Alertmanager tramite cephadm. A tale scopo, è necessario creare un file della specifica del posizionamento e del servizio con i contenuti seguenti:

Nota
Nota

Per ulteriori informazioni sui file del servizio e del posizionamento, vedere Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.4.2 “Specifica del servizio e del posizionamento”.

service_type: container
service_id: prometheus-webhook-snmp
placement:
    ADD_PLACEMENT_HERE
image: registry.suse.com/ses/7/prometheus-webhook-snmp:latest
args:
    - "--publish 9099:9099"
envs:
    - ARGS="--debug --snmp-host=ADD_HOST_GATEWAY_HERE"
    - RUN_ARGS="--metrics"
EOF

Utilizzare questa specifica del servizio per eseguire il servizio con le relative impostazioni di default.

Quando si esegue il servizio, è necessario pubblicare la porta di attesa del ricevitore Prometheus utilizzando l'argomento della riga di comando --publish HOST_PORT:CONTAINER_PORT, poiché tale porta non è esposta automaticamente dal container. È possibile eseguire questa operazione aggiungendo le righe seguenti alla specifica:

args:
    - "--publish 9099:9099"

In alternativa, connettere il container alla rete host tramite l'argomento della riga di comando --network=host.

args:
    - "--network=host"

Se il ricevitore di trap SNMP non è installato sullo stesso host del container, occorre specificare anche il nome di dominio completo (FQDN) dell'host SNMP. Utilizzare il gateway di rete del container per poter ricevere i trap SNMP al di fuori del container o dell'host.

envs:
    - ARGS="--debug --snmp-host=CONTAINER_GATEWAY"

16.7.1 Configurazione del servizio prometheus-webhook-snmp

È possibile configurare il container utilizzando le variabili di ambiente o un file di configurazione.

Per le variabili di ambiente, utilizzare ARGS per impostare le opzioni globali e RUN_ARGS per le opzioni del comando run. È necessario adattare la specifica del servizio come segue:

envs:
    - ARGS="--debug --snmp-host=CONTAINER_GATEWAY"
    - RUN_ARGS="--metrics --port=9101"

Per utilizzare un file di configurazione, la specifica del servizio deve essere adattata come segue:

files:
    etc/prometheus-webhook-snmp.conf:
        - "debug: True"
        - "snmp_host: ADD_HOST_GATEWAY_HERE"
        - "metrics: True"
volume_mounts:
    etc/prometheus-webhook-snmp.conf: /etc/prometheus-webhook-snmp.conf

Per procedere con la distribuzione, eseguire il comando seguente:

cephuser@adm > ceph orch apply -i SERVICE_SPEC_FILE

Consultare Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.4.3 “Distribuzione dei servizi Ceph” per maggiori informazioni.

16.7.2 Configurazione di Prometheus Alertmanager per SNMP

Infine, occorre configurare Prometheus Alertmanager specificamente per i trap SNMP. Se questo servizio non è già stato distribuito, creare un file della specifica del servizio. È necessario sostituire IP_OR_FQDN con l'indirizzo IP o con il nome di dominio completo dell'host su cui è stato installato il webhook SNMP di Prometheus Alertmanager. Esempio:

Nota
Nota

Se questo servizio è stato già distribuito, per assicurarsi che Alertmanager sia configurato correttamente per SNMP, ripetere la distribuzione con le impostazioni seguenti.

  service_type: alertmanager
  placement:
    hosts:
    - HOSTNAME
  webhook_configs:
    - 'http://IP_OR_FQDN:9099/'

Applicare la specifica del servizio con il comando seguente:

cephuser@adm > ceph orch apply -i SERVICE_SPEC_FILE

Parte III Memorizzazione dei dati in un cluster

  • 17 Gestione dei dati memorizzati
  • L'algoritmo CRUSH determina la modalità di storage e recupero dei dati mediante il calcolo delle ubicazioni di memorizzazione dati. CRUSH consente ai client Ceph di comunicare direttamente con gli OSD piuttosto che tramite un server centralizzato o un broker. Grazie ad un sistema per lo storage e il…

  • 18 Gestione dei pool di memorizzazione
  • Ceph memorizza i dati nei pool. I pool sono gruppi logici per la memorizzazione di oggetti. Quando inizialmente si installa un cluster senza creare un pool, Ceph utilizza i pool di default per la memorizzazione dei dati. Gli elementi di rilievo più importanti riportati di seguito sono relativi ai po…

  • 19 Pool con codice di cancellazione
  • Ceph fornisce un'alternativa alla replica normale dei dati nei pool denominata pool di cancellazione o con codice di cancellazione. I pool di cancellazione non forniscono le funzionalità complete dei pool replicati (ad esempio, non sono in grado di memorizzare i metadati dei pool RBD), ma richiedono…

  • 20 Dispositivo di blocco RADOS (RADOS Block Device, RBD)
  • Un blocco è una sequenza di byte, ad esempio un blocco di dati da 4 MB. Le interfacce di memorizzazione basate su blocchi rappresentano il modo più comune per memorizzare i dati con supporti rotanti, come dischi rigidi, CD, dischi floppy. L'ubiquità delle interfacce dei dispositivi di blocco rende u…

17 Gestione dei dati memorizzati

L'algoritmo CRUSH determina la modalità di storage e recupero dei dati mediante il calcolo delle ubicazioni di memorizzazione dati. CRUSH consente ai client Ceph di comunicare direttamente con gli OSD piuttosto che tramite un server centralizzato o un broker. Grazie ad un sistema per lo storage e il recupero dei dati basato su algoritmi, Ceph consente di evitare single point of failure, colli di bottiglia delle prestazioni e limiti fisici alla rispettiva scalabilità.

Per CRUSH è richiesta una mappa del cluster e viene utilizzata la mappa CRUSH per memorizzare e recuperare dati negli OSD in modo pressoché casuale, con una distribuzione uniforme dei dati nel cluster.

Le mappe CRUSH contengono: un elenco di OSD, un elenco di "compartimenti" per aggregare i dispositivi in ubicazioni fisiche e un elenco di regole che indicano a CRUSH come replicare i dati nei pool di un cluster Ceph. Riflettendo l'organizzazione fisica dell'installazione sottostante, CRUSH è in grado di modellare, e quindi di risolvere, potenziali origini di errori dei dispositivi correlati. Tra le origini tipiche sono incluse la prossimità fisica, un'alimentazione condivisa e una rete condivisa. Mediante la codifica di queste informazioni nella mappa del cluster, le policy di posizionamento di CRUSH possono separare le repliche di oggetti in vari domini di errore, continuando a mantenere la distribuzione desiderata. Ad esempio, per risolvere la possibilità di errori simultanei, può essere necessario assicurare che le repliche dei dati siano su dispositivi che utilizzano scaffali, rack, alimentatori, controller e/o ubicazioni fisiche.

Dopo aver distribuito un cluster Ceph cluster, viene generata una mappa CRUSH di default. Questa è adatta per l'ambiente sandbox Ceph. Quando tuttavia si distribuisce un cluster di dati su larga scala, considerare attentamente lo sviluppo di una mappa CRUSH personalizzata da utilizzare per gestire il cluster, migliorare le prestazioni e garantire la sicurezza dei dati.

Se ad esempio un OSD si interrompe, può essere utile una mappa CRUSH per individuare il data center fisico, la stanza, la fila e il rack dell'host con l'OSD non riuscito nel caso in cui sia necessario utilizzare un supporto on site o sostituire l'hardware.

In modo analogo, CRUSH può consentire di identificare gli errori più rapidamente. Ad esempio, se tutti gli OSD in un determinato rack si interrompono simultaneamente, è possibile che l'errore risieda in un interruttore di rete o nell'alimentazione del rack oppure nell'interruttore di rete piuttosto che negli OSD stessi.

Una mappa CRUSH personalizzata consente inoltre di identificare le ubicazioni fisiche in cui Ceph memorizza le copie ridondanti dei dati quando i gruppi di posizionamento (consultare Sezione 17.4, «Gruppi di posizionamento») associati a un host con errori si trovano in stato danneggiato.

In una mappa CRUSH sono presenti tre sezioni principali.

  • Dispositivi OSD: qualsiasi Object Storage Device corrispondente a un daemon ceph-osd.

  • Compartimenti: aggregazione gerarchica delle ubicazioni di memorizzazione (ad esempio file, rack, host e così via) e i rispettivi pesi assegnati.

  • Set di regole: modo in cui vengono selezionati i compartimenti.

17.1 Dispositivi OSD

Per mappare i gruppi di posizionamento negli OSD, per la mappa CRUSH è richiesto un elenco di dispositivi OSD (il nome del daemon OSD). L'elenco dei dispositivi viene visualizzato prima nella mappa CRUSH.

#devices
device NUM osd.OSD_NAME class CLASS_NAME

Esempio:

#devices
device 0 osd.0 class hdd
device 1 osd.1 class ssd
device 2 osd.2 class nvme
device 3 osd.3class ssd

Come regola generale, un daemon OSD viene mappato in un disco singolo.

17.1.1 Classi di dispositivi

La flessibilità della mappa CRUSH in termini di controllo del posizionamento dei dati è uno dei punti di forza di Ceph. È anche uno degli aspetti più complessi da gestire del cluster. Le classi di dispositivi automatizzano le modifiche più comuni apportate alle mappe CRUSH che l'amministratore in precedenza doveva eseguire manualmente.

17.1.1.1 Il problema della gestione CRUSH

Spesso, i cluster Ceph sono compilati con più tipi di dispositivi di memorizzazione: HDD, SSD, NVMe o persino con classi miste delle tipologie appena elencate. Questi diversi tipi di dispositivi di memorizzazione sono chiamati classi di dispositivi per evitare confusione tra la proprietà type dei compartimenti CRUSH (ad esempio host, rack, row; vedere la Sezione 17.2, «Compartimenti» per ulteriori dettagli). I Ceph OSD supportati dai dispositivi SSD sono molto più veloci di quelli supportati dai dischi a rotazione e sono pertanto più adatti per determinati carichi di lavoro. Ceph semplifica la creazione di pool RADOS per dataset o carichi di lavoro diversi e l'assegnazione di regole CRUSH differenti per il controllo del posizionamento dei dati per questi pool.

OSD con classi di dispositivi miste
Figura 17.1: OSD con classi di dispositivi miste

La configurazione delle regole CRUSH per il posizionamento dei dati soltanto su una determinata classe di dispositivi è tuttavia un'operazione lunga e noiosa. Le regole si basano sulla gerarchia CRUSH, ma se negli stessi host o rack sono presenti dispositivi di diversi tipi (come nella gerarchia di esempio riportata sopra), tali dispositivi verranno (per default) mescolati e visualizzati negli stessi sottoalberi della gerarchia. Nelle versioni precedenti di SUSE Enterprise Storage, la separazione manuale dei dispositivi in alberi diversi comportava la creazione di più versioni di ciascun nodo intermedio per ogni classe di dispositivi.

17.1.1.2 Classi di dispositivi

Una comoda soluzione offerta da Ceph è la possibilità di aggiungere una proprietà denominata device class a ciascun OSD. Per default, gli OSD impostano automaticamente le relative classi di dispositivi su "hdd", "ssd" o "nvme" in base alle proprietà hardware esposte dal kernel Linux. Queste classi di dispositivi sono indicate in una nuova colonna dell'output del comando ceph osd tree:

cephuser@adm > ceph osd tree
 ID CLASS WEIGHT   TYPE NAME      STATUS REWEIGHT PRI-AFF
 -1       83.17899 root default
 -4       23.86200     host cpach
 2   hdd  1.81898         osd.2      up  1.00000 1.00000
 3   hdd  1.81898         osd.3      up  1.00000 1.00000
 4   hdd  1.81898         osd.4      up  1.00000 1.00000
 5   hdd  1.81898         osd.5      up  1.00000 1.00000
 6   hdd  1.81898         osd.6      up  1.00000 1.00000
 7   hdd  1.81898         osd.7      up  1.00000 1.00000
 8   hdd  1.81898         osd.8      up  1.00000 1.00000
 15  hdd  1.81898         osd.15     up  1.00000 1.00000
 10  nvme 0.93100         osd.10     up  1.00000 1.00000
 0   ssd  0.93100         osd.0      up  1.00000 1.00000
 9   ssd  0.93100         osd.9      up  1.00000 1.00000

Se il rilevamento automatico della classe di dispositivi non riesce, ad esempio perché il driver del dispositivo non espone correttamente le informazioni sul dispositivo tramite sys/block, è possibile modificare le classi di dispositivi dalla riga di comando:

cephuser@adm > ceph osd crush rm-device-class osd.2 osd.3
done removing class of osd(s): 2,3
cephuser@adm > ceph osd crush set-device-class ssd osd.2 osd.3
set osd(s) 2,3 to class 'ssd'

17.1.1.3 Impostazione delle regole di posizionamento CRUSH

Tramite le regole CRUSH, è possibile limitare il posizionamento a una classe di dispositivi specifica. Ad esempio, è possibile creare un pool replicato "fast" per distribuire i dati soltanto sui dischi SSD tramite l'esecuzione del comando seguente:

cephuser@adm > ceph osd crush rule create-replicated RULE_NAME ROOT FAILURE_DOMAIN_TYPE DEVICE_CLASS

Esempio:

cephuser@adm > ceph osd crush rule create-replicated fast default host ssd

Creare un pool denominato "fast_pool" e assegnarlo alla regola "fast":

cephuser@adm > ceph osd pool create fast_pool 128 128 replicated fast

La procedura di creazione delle regole del codice di cancellazione è leggermente diversa. Innanzitutto, occorre creare un profilo con codice di cancellazione che includa una proprietà per la classe di dispositivi desiderata. Quindi, utilizzare tale profilo durante la creazione del pool con codice di cancellazione:

cephuser@adm > ceph osd erasure-code-profile set myprofile \
 k=4 m=2 crush-device-class=ssd crush-failure-domain=host
cephuser@adm > ceph osd pool create mypool 64 erasure myprofile

Se occorre modificare manualmente la mappa CRUSH per personalizzare la regola, è possibile specificare la classe di dispositivi tramite la sintassi estesa. Ad esempio, la regola CRUSH generata dai comandi riportati sopra è la seguente:

rule ecpool {
  id 2
  type erasure
  min_size 3
  max_size 6
  step set_chooseleaf_tries 5
  step set_choose_tries 100
  step take default class ssd
  step chooseleaf indep 0 type host
  step emit
}

La differenza fondamentale qui è che il comando "take" include il suffisso aggiuntivo "class CLASS_NAME".

17.1.1.4 Comandi aggiuntivi

Per visualizzare un elenco delle classi di dispositivi utilizzate in una mappa CRUSH, eseguire:

cephuser@adm > ceph osd crush class ls
[
  "hdd",
  "ssd"
]

Per visualizzare un elenco delle regole CRUSH esistenti, eseguire:

cephuser@adm > ceph osd crush rule ls
replicated_rule
fast

Per visualizzare i dettagli della regola CRUSH denominata "fast", eseguire:

cephuser@adm > ceph osd crush rule dump fast
{
		"rule_id": 1,
		"rule_name": "fast",
		"ruleset": 1,
		"type": 1,
		"min_size": 1,
		"max_size": 10,
		"steps": [
						{
										"op": "take",
										"item": -21,
										"item_name": "default~ssd"
						},
						{
										"op": "chooseleaf_firstn",
										"num": 0,
										"type": "host"
						},
						{
										"op": "emit"
						}
		]
}

Per visualizzare un elenco degli OSD appartenenti a una classe "ssd", eseguire:

cephuser@adm > ceph osd crush class ls-osd ssd
0
1

17.1.1.5 Esecuzione della migrazione da una regola SSD esistente alle classi di dispositivi

Nelle versioni di SUSE Enterprise Storage precedenti alla 5, occorreva modificare manualmente la mappa CRUSH e mantenere una gerarchia parallela per ogni tipo di dispositivo specializzato (ad esempio SSD) se si volevano scrivere le regole applicabili a tali dispositivi. Da SUSE Enterprise Storage 5 in poi, la funzione della classe di dispositivi ha reso possibile questa procedura in modo invisibile all'utente.

Tramite il comando crushtool, è possibile trasformare una regola e una gerarchia esistenti nelle nuove regole basate sulla classe. Sono possibili diversi tipi di trasformazione:

crushtool --reclassify-root ROOT_NAME DEVICE_CLASS

Questo comando include tutti gli elementi della gerarchia al di sotto di ROOT_NAME e modifica le regole che fanno riferimento a tale radice tramite

take ROOT_NAME

in

take ROOT_NAME class DEVICE_CLASS

Rinumera i compartimenti per fare in modo che gli ID obsoleti vengano utilizzati per lo "shadow tree" della classe specificata. Di conseguenza, non si verificano spostamenti di dati.

Esempio 17.1: crushtool --reclassify-root

Prendere in considerazione la seguente regola esistente:

rule replicated_ruleset {
   id 0
   type replicated
   min_size 1
   max_size 10
   step take default
   step chooseleaf firstn 0 type rack
   step emit
}

Se si riclassifica la radice "default" come classe "hdd", la regola diventerà

rule replicated_ruleset {
   id 0
   type replicated
   min_size 1
   max_size 10
   step take default class hdd
   step chooseleaf firstn 0 type rack
   step emit
}
crushtool --set-subtree-class BUCKET_NAME DEVICE_CLASS

Questo metodo contrassegna ogni dispositivo nel sottoalbero con radice BUCKET_NAME con la classe di dispositivi specificata.

L'opzione --set-subtree-class viene in genere utilizzata insieme all'opzione --reclassify-root per assicurarsi che tutti i dispositivi in tale radice siano etichettati con la classe corretta. Tuttavia, alcuni di questi dispositivi possono avere intenzionalmente una classe diversa e pertanto non è necessario etichettarli nuovamente. In questi casi, escludere l'opzione --set-subtree-class. Tenere presente che la nuova mappatura non sarà perfetta, perché la regola precedente è distribuita ai dispositivi di più classi, ma le regole modificate effettueranno la mappatura soltanto ai dispositivi della classe specificata.

crushtool --reclassify-bucket MATCH_PATTERN DEVICE_CLASS DEFAULT_PATTERN

Questo metodo consente di unire una gerarchia parallela specifica del tipo con la gerarchia normale. Ad esempio, molti utenti dispongono di mappe CRUSH simili alla seguente:

Esempio 17.2: crushtool --reclassify-bucket
host node1 {
   id -2           # do not change unnecessarily
   # weight 109.152
   alg straw
   hash 0  # rjenkins1
   item osd.0 weight 9.096
   item osd.1 weight 9.096
   item osd.2 weight 9.096
   item osd.3 weight 9.096
   item osd.4 weight 9.096
   item osd.5 weight 9.096
   [...]
}

host node1-ssd {
   id -10          # do not change unnecessarily
   # weight 2.000
   alg straw
   hash 0  # rjenkins1
   item osd.80 weight 2.000
   [...]
}

root default {
   id -1           # do not change unnecessarily
   alg straw
   hash 0  # rjenkins1
   item node1 weight 110.967
   [...]
}

root ssd {
   id -18          # do not change unnecessarily
   # weight 16.000
   alg straw
   hash 0  # rjenkins1
   item node1-ssd weight 2.000
   [...]
}

Questa funzione riclassifica ogni compartimento corrispondente a un modello specificato. Il modello può essere simile a %suffix o a prefix%. Nell'esempio riportato sopra, è utilizzato il modello %-ssd. Per ciascun compartimento corrispondente, la porzione rimanente del nome che corrisponde al carattere jolly "%" specifica il compartimento di base. Tutti i dispositivi nel compartimento corrispondente vengono etichettati con la classe di dispositivi specificata e quindi spostati nel compartimento di base. Se quest'ultimo non esiste (ad esempio se "node12-ss" esiste, ma "node12" non esiste), viene creato e collegato al di sotto del compartimento superiore di default specificato. Gli ID dei compartimenti obsoleti vengono conservati per i nuovi compartimenti replicati al fine di impedire il trasferimento dei dati. Le regole con i passaggi take che fanno riferimento ai compartimenti obsoleti vengono modificate.

crushtool --reclassify-bucket BUCKET_NAME DEVICE_CLASS BASE_BUCKET

È possibile utilizzare l'opzione --reclassify-bucket senza caratteri jolly per mappare un compartimento singolo. Nell'esempio precedente, si intende mappare il compartimento "ssd" al compartimento di default.

Il comando finale per la conversione della mappa, compresi i frammenti riportati sopra, è il seguente:

cephuser@adm > ceph osd getcrushmap -o original
cephuser@adm > crushtool -i original --reclassify \
  --set-subtree-class default hdd \
  --reclassify-root default hdd \
  --reclassify-bucket %-ssd ssd default \
  --reclassify-bucket ssd ssd default \
  -o adjusted

Per verificare la correttezza della conversione, è disponibile l'opzione --compare che consente di testare un ampio campione di input della mappa CRUSH e di verificare che vengano restituiti gli stessi risultati. Questi input sono controllati dalle stesse opzioni che si applicano all'opzione --test. Per l'esempio riportato sopra, il comando è il seguente:

cephuser@adm > crushtool -i original --compare adjusted
rule 0 had 0/10240 mismatched mappings (0)
rule 1 had 0/10240 mismatched mappings (0)
maps appear equivalent
Suggerimento
Suggerimento

In caso di differenze, tra parentesi viene indicata la percentuale degli input di cui è stata ripetuta la mappatura.

Dopo aver apportato tutte le modifiche desiderate alla mappa CRUSH, sarà possibile applicarla al cluster:

cephuser@adm > ceph osd setcrushmap -i adjusted

17.1.1.6 Ulteriori informazioni

Nella Sezione 17.5, «Modifica della mappa CRUSH» sono disponibili ulteriori dettagli sulle mappe CRUSH.

Nel Capitolo 18, Gestione dei pool di memorizzazione sono disponibili ulteriori informazioni generali sui pool Ceph.

Nel Capitolo 19, Pool con codice di cancellazione sono disponibili ulteriori dettagli sui pool con codice di cancellazione.

17.2 Compartimenti

Le mappe CRUSH contengono un elenco di OSD che è possibile organizzare in una struttura ad albero di compartimenti, in modo da aggregare i dispositivi in ubicazioni fisiche. I singoli OSD comprendono le foglie dell'albero.

0

osd

Un dispositivo specifico oppure OSD (osd.1, osd.2 ecc).

1

host

Nome di un host contenente uno o più OSD.

2

chassis

Identificatore dello chassis del rack contenente l'host.

3

rack

Un rack per computer. L'impostazione di default è unknownrack.

4

row

Una fila in una serie di rack.

5

pdu

Abbreviazione di "Power Distribution Unit" (unità di distribuzione di alimentazione).

6

pod

Abbreviazione di "Point of Delivery" (punto di consegna): in questo contesto, un gruppo di PDU o un gruppo di righe di rack.

7

room

Una stanza contenente righe di rack.

8

datacenter

Un data center fisico contenente uno o più stanze.

9

region

Area geografica del mondo (ad esempio, NAM, LAM, EMEA, APAC ecc).

10

root

Il nodo radice dell'albero dei compartimenti OSD (in genere impostato su default).

Suggerimento
Suggerimento

È possibile modificare i tipi di compartimenti esistenti e crearne altri personalizzati.

Gli strumenti di distribuzione di Ceph generano una mappa CRUSH contenente un compartimento per ciascun host e una radice denominata "default", utile per il pool rbd di default. I tipi di compartimenti rimanenti sono un mezzo per memorizzare le informazioni sull'ubicazione fisica di nodi/compartimenti, che rende l'amministrazione del cluster molto più semplice in caso di malfunzionamento degli OSD, degli host o dell'hardware di rete e l'amministratore deve accedere all'hardware fisico.

I compartimenti dispongono di un tipo, un nome univoco (stringa), un ID univoco espresso come numero intero negativo, un peso relativo alla capacità totale/capacità degli elementi corrispondenti, un algoritmo di compartimento (straw2 per default) e l'hash (0 per default, che riflette l'hash CRUSH rjenkins1). Un compartimento può contenere uno o più elementi. Gli elementi possono essere costituiti da altri compartimenti o OSD. Gli elementi possono avere un peso che riflette quello relativo dell'elemento.

[bucket-type] [bucket-name] {
  id [a unique negative numeric ID]
  weight [the relative capacity/capability of the item(s)]
  alg [the bucket type: uniform | list | tree | straw2 | straw ]
  hash [the hash type: 0 by default]
  item [item-name] weight [weight]
}

Nell'esempio seguenti è illustrato come utilizzare i compartimenti per aggregare un pool e ubicazioni fisiche come un data center, una stanza, un rack e una fila.

host ceph-osd-server-1 {
        id -17
        alg straw2
        hash 0
        item osd.0 weight 0.546
        item osd.1 weight 0.546
}

row rack-1-row-1 {
        id -16
        alg straw2
        hash 0
        item ceph-osd-server-1 weight 2.00
}

rack rack-3 {
        id -15
        alg straw2
        hash 0
        item rack-3-row-1 weight 2.00
        item rack-3-row-2 weight 2.00
        item rack-3-row-3 weight 2.00
        item rack-3-row-4 weight 2.00
        item rack-3-row-5 weight 2.00
}

rack rack-2 {
        id -14
        alg straw2
        hash 0
        item rack-2-row-1 weight 2.00
        item rack-2-row-2 weight 2.00
        item rack-2-row-3 weight 2.00
        item rack-2-row-4 weight 2.00
        item rack-2-row-5 weight 2.00
}

rack rack-1 {
        id -13
        alg straw2
        hash 0
        item rack-1-row-1 weight 2.00
        item rack-1-row-2 weight 2.00
        item rack-1-row-3 weight 2.00
        item rack-1-row-4 weight 2.00
        item rack-1-row-5 weight 2.00
}

room server-room-1 {
        id -12
        alg straw2
        hash 0
        item rack-1 weight 10.00
        item rack-2 weight 10.00
        item rack-3 weight 10.00
}

datacenter dc-1 {
        id -11
        alg straw2
        hash 0
        item server-room-1 weight 30.00
        item server-room-2 weight 30.00
}

root data {
        id -10
        alg straw2
        hash 0
        item dc-1 weight 60.00
        item dc-2 weight 60.00
}

17.3 Set di regole

Le mappe CRUSH supportano la nozione delle "regole CRUSH", che sono regole che determinano il posizionamento dei dati per un pool. Per i cluster di grandi dimensioni è probabile che vengano creati numerosi pool, ciascuno dei quali presenta set di regole e regole CRUSH propri. Per default, la mappa CRUSH dispone di una regola per la radice di default. Se sono necessarie più radici e più regole, occorre crearle in un secondo momento. In alternativa, queste verranno create automaticamente insieme ai nuovi pool.

Nota
Nota

Nella maggior parte dei casi non sarà necessario modificare le regole di default. Quando si crea un nuovo pool, il rispettivo set di regole di default è 0.

Una regola è strutturata nel modo seguente:

rule rulename {

        ruleset ruleset
        type type
        min_size min-size
        max_size max-size
        step step

}
ruleset

Un numero intero. Classifica una regola come appartenente a un set di regole. Attivato mediante l'impostazione del set di regole in un pool. Questa opzione è obbligatoria. Il valore di default è 0.

tipo

Stringa. Descrive una regola per un pool con codice "replicated" o "coded". Questa opzione è obbligatoria. L'impostazione di default è replicated.

min_size

Un numero intero. Se un gruppo di pool crea un numero di repliche inferiore a questo numero, CRUSH NON selezionerà questa regola. Questa opzione è obbligatoria. Il valore di default è 2.

max_size

Un numero intero. Se un gruppo di pool crea un numero di repliche superiore a questo numero, CRUSH NON selezionerà questa regola. Questa opzione è obbligatoria. Il valore di default è 10.

step take bucket

Prende un compartimento specificato tramite nome e avvia l'iterazione lungo l'albero. Questa opzione è obbligatoria. Per una spiegazione sull'iterazione nell'albero, vedere Sezione 17.3.1, «Iterazione dell'albero di nodi».

step targetmodenum type bucket-type

target può essere sia choose sia chooseleaf. Quando impostata su choose, viene selezionato un numero di compartimenti. chooseleaf seleziona direttamente gli OSD (nodi foglia) dal sottoalbero di ciascun compartimento nel set di compartimenti.

mode può essere sia firstn sia indep. Vedere Sezione 17.3.2, «firstn e indep».

Seleziona il numero di compartimenti di un determinato tipo. Dove N è il numero delle opzioni disponibili, se num > 0 && < N, scegliere tale numero di compartimenti; se num < 0, significa N - num; e se num == 0, scegliere N compartimenti (tutti disponibili). Segue step take o step choose.

step emit

Genera il valore corrente e svuota lo stack. Di norma utilizzata alla fine di una regola, ma può essere impiegata per formare alberi diversi nell'ambito della stessa regola. Segue step choose.

17.3.1 Iterazione dell'albero di nodi

È possibile visualizzare la struttura definita nei compartimenti sotto forma di albero di nodi. I compartimenti sono nodi e gli OSD sono foglie nell'albero.

Le regole nella mappa CRUSH definiscono il modo in cui gli OSD vengono selezionati dall'albero. Una regola inizia con un nodo, quindi effettua un'iterazione lungo l'albero per restituire un set di OSD. Non è possibile definire quale diramazione selezionare. L'algoritmo CRUSH assicura invece che il set di OSD soddisfi i requisiti di replica e distribuisca uniformemente i dati.

Con step take bucket l'iterazione nell'albero di noti inizia in un determinato compartimento (non in un tipo di compartimento). Se gli OSD provenienti da tutte le diramazioni nell'albero vengono restituiti, il compartimento deve essere il compartimento radice. Altrimenti per gli "step" seguenti l'iterazione ha luogo tramite un sottoalbero.

Dopo step take nella definizione della regola seguono una o più voci step choose. Ogni step choose sceglie un numero definito di nodi (o diramazioni) dal nodo superiore selezionato precedentemente.

Alla fine gli OSD selezionati vengono restituiti con step emit.

step chooseleaf è una pratica funzione che consente di selezionare direttamente gli OSD dalle diramazioni del compartimento specificato.

La Figura 17.2, «Albero di esempio» è un esempio di come viene utilizzato step per l'iterazione in un albero. Le frecce e i numeri arancioni corrispondono a example1a e example1b, mentre quelli blu corrispondono a example2 nelle seguenti definizioni delle regole.

Albero di esempio
Figura 17.2: Albero di esempio
# orange arrows
rule example1a {
        ruleset 0
        type replicated
        min_size 2
        max_size 10
        # orange (1)
        step take rack1
        # orange (2)
        step choose firstn 0 host
        # orange (3)
        step choose firstn 1 osd
        step emit
}

rule example1b {
        ruleset 0
        type replicated
        min_size 2
        max_size 10
        # orange (1)
        step take rack1
        # orange (2) + (3)
        step chooseleaf firstn 0 host
        step emit
}

# blue arrows
rule example2 {
        ruleset 0
        type replicated
        min_size 2
        max_size 10
        # blue (1)
        step take room1
        # blue (2)
        step chooseleaf firstn 0 rack
        step emit
}

17.3.2 firstn e indep

Una regola CRUSH definisce le sostituzioni per i nodi o gli OSD non riusciti (vedere Sezione 17.3, «Set di regole»). Per lo step della parola chiave è richiesto firstn o indep come parametro. Figura 17.3, «Metodi di sostituzione dei nodi» fornisce un esempio.

firstn aggiunge i nodi di sostituzione alla fine dell'elenco dei nodi attivi. Nel caso di un nodo non riuscito, i seguenti nodi integri vengono spostati a sinistra per colmare il vuoto lasciato dal nodo non riuscito. Questo è il metodo di default e desiderato per i pool replicati, perché un nodo secondario contiene già tutti i dati e può essere impiegato immediatamente per svolgere i compiti del nodo primario.

indep seleziona i nodi di sostituzione per ciascun nodo attivo. La sostituzione di un nodo non riuscito non cambia l'ordine dei nodi rimanenti. Ciò è adatto per i pool con codice di cancellazione. Nei pool con codice di cancellazione, i dati memorizzati in un nodo dipendono dalla rispettiva posizione nella selezione del nodo. Quando l'ordine dei nodi cambia, tutti i dati nei nodi interessati devono essere trasferiti.

Metodi di sostituzione dei nodi
Figura 17.3: Metodi di sostituzione dei nodi

17.4 Gruppi di posizionamento

Ceph mappa gli oggetti ai gruppi di posizionamento (PG). I gruppi di posizionamento sono partizionamenti o frammenti di un pool di oggetti logico che posizionano gli oggetti sotto forma di gruppi negli OSD. I gruppi di posizionamento riducono la quantità di metadati per oggetto quando Ceph memorizza i dati negli OSD. Più è alto il numero di gruppi di posizionamento (ad esempio 100 per OSD), migliore sarà il bilanciamento.

17.4.1 Utilizzo dei gruppi di posizionamento

Un gruppo di posizionamento (PG) aggrega gli oggetti all'interno di un pool. Il motivo principale risiede nel fatto che il controllo del posizionamento degli oggetti e dei metadati per i singoli oggetti è un'attività onerosa per le risorse di elaborazione. Ad esempio, un sistema con milioni di oggetti non è in grado di controllare direttamente il posizionamento di ciascuno di questi oggetti.

Gruppi di posizionamento in un pool
Figura 17.4: Gruppi di posizionamento in un pool

Il client Ceph calcola il gruppo di posizionamento a cui apparterrà un oggetto. Per farlo, esegue l'hashing dell'ID dell'oggetto e applica un'operazione basata sul numero di gruppi di posizionamento presenti nel pool specificato e sull'ID del pool.

I contenuti dell'oggetto all'interno di un gruppo di posizionamento sono memorizzati in un set di OSD. Ad esempio, in un pool replicato di dimensione due, ogni gruppo di posizionamento memorizzerà gli oggetti su due OSD:

Gruppi di posizionamento e OSD
Figura 17.5: Gruppi di posizionamento e OSD

Se sull'OSD num. 2 si verificano degli errori, un altro OSD verrà assegnato al gruppo di posizionamento num. 1 e verrà compilato con le copie di tutti gli oggetti nell'OSD num. 1. Se la dimensione del pool viene modificata da due a tre, al gruppo di posizionamento verrà assegnato un altro OSD che riceverà le copie di tutti gli oggetti nel gruppo di posizionamento.

I gruppi di posizionamento non possiedono l'OSD, ma lo condividono con altri gruppi di posizionamento dello stesso pool o persino di altri pool. Se si verificano degli errori sull'OSD num. 2, il gruppo di posizionamento num. 2 dovrà ripristinare le copie degli oggetti utilizzando l'OSD num. 3.

Se il numero di gruppi di posizionamento aumenta, i nuovi gruppi verranno assegnati agli OSD. Anche il risultato della funzione CRUSH cambierà e alcuni oggetti dei gruppi di posizionamento precedenti verranno copiati sui nuovi gruppi di posizionamento e rimossi da quelli precedenti.

17.4.2 Determinazione del valore di PG_NUM

Nota
Nota

A partire da Ceph Nautilus (v14.x), è possibile utilizzare il modulo pg_autoscaler di Ceph Manager per il dimensionamento automatico dei gruppi di posizionamento in base alle esigenze. Se si desidera abilitare questa funzione, fare riferimento a Book “Deploying and Administering SUSE Enterprise Storage with Rook”, Chapter 6 “Configuration”, Section 6.1.1.1 “Default PG and PGP counts”.

Durante la creazione di un nuovo pool, è comunque possibile impostare manualmente il valore di PG_NUM:

root # ceph osd pool create POOL_NAME PG_NUM

PG_NUM non può essere calcolato automaticamente. Di seguito sono elencati alcuni valori utilizzati di frequente, a seconda del numero di OSD nel cluster:

Meno di 5 OSD:

Impostare PG_NUM su 128.

Tra 5 e 10 OSD:

Impostare PG_NUM su 512.

Tra 10 e 50 OSD:

Impostare PG_NUM su 1024.

Via via che il numero di OSD aumenta, diventa sempre più importante scegliere un valore corretto per PG_NUM. PG_NUM influisce sul comportamento del cluster e sulla durata dei dati in caso di errore dell'OSD.

17.4.2.1 Calcolo dei gruppi di posizionamento per più di 50 OSD

Se si hanno meno di 50 OSD, utilizzare la preselezione descritta nella Sezione 17.4.2, «Determinazione del valore di PG_NUM». Se si hanno più di 50 OSD, si consiglia di utilizzare circa 50-100 gruppi di posizionamento per OSD per bilanciare l'uso delle risorse, la durata dei dati e la distribuzione. Per un pool di oggetti singolo, è possibile utilizzare la formula seguente per ottenere una linea di base:

total PGs = (OSDs * 100) / POOL_SIZE

Dove POOL_SIZE rappresenta il numero di repliche dei pool replicati o la somma "k"+"m" dei pool con codice di cancellazione restituita dal comando ceph osd erasure-code-profile get. Arrotondare il risultato alla potenza più vicina di 2. Si consiglia di arrotondare l'algoritmo CRUSH per bilanciare equamente il numero di oggetti tra i gruppi di posizionamento.

Ad esempio, per un cluster con 200 OSD e con una dimensione pool di 3 repliche, calcolare il numero di gruppi di posizionamento come segue:

          (200 * 100) / 3 = 6667

La potenza più vicina di 2 è 8192.

Se si utilizzano più pool di dati per la memorizzazione degli oggetti, occorre assicurarsi di bilanciare il numero di gruppi di posizionamento per ogni pool con il numero di gruppi di posizionamento per ogni OSD. Occorre raggiungere un numero totale di gruppi di posizionamento ragionevole che fornisca una varianza abbastanza ridotta per OSD senza gravare sulle risorse di sistema o rallentare troppo il processo di peering.

Ad esempio, un cluster di 10 pool, ciascuno con 512 gruppi di posizionamento in 10 OSD, ha un totale di 5120 gruppi di posizionamento suddivisi in più di 10 OSD, ovvero 512 gruppi di posizionamento per OSD. In una configurazione di questo tipo non viene utilizzato un numero elevato di risorse. Tuttavia, se venissero creati 1000 pool con 512 gruppi di posizionamento ciascuno, gli OSD gestirebbero circa 50.000 gruppi di posizionamento ciascuno e sarebbero necessari molte più risorse e molto più tempo per il peering.

17.4.3 Impostazione del numero di gruppi di posizionamento

Nota
Nota

A partire da Ceph Nautilus (v14.x), è possibile utilizzare il modulo pg_autoscaler di Ceph Manager per il dimensionamento automatico dei gruppi di posizionamento in base alle esigenze. Se si desidera abilitare questa funzione, fare riferimento a Book “Deploying and Administering SUSE Enterprise Storage with Rook”, Chapter 6 “Configuration”, Section 6.1.1.1 “Default PG and PGP counts”.

Se occorre tuttavia specificare manualmente il numero di gruppi di posizionamento all'interno di un pool, è necessario farlo al momento della creazione di quest'ultimo (vedere la Sezione 18.1, «Creazione di un pool»). Dopo aver impostato i gruppi di posizionamento per un pool, è possibile aumentarne il numero con il comando seguente:

root # ceph osd pool set POOL_NAME pg_num PG_NUM

Dopo aver aumentato il numero di gruppi di posizionamento, è necessario aumentare anche il numero di gruppi di posizionamento per il posizionamento (PGP_NUM) per ribilanciare il cluster. PGP_NUM corrisponderà al numero di gruppi di posizionamento che verranno calcolati per il posizionamento dall'algoritmo CRUSH. L'aumento di PG_NUM comporta la suddivisione dei gruppi di posizionamento, ma la migrazione dei dati nei nuovi gruppi di posizionamento non sarà eseguita finché non verrà aumentato il valore di PGP_NUM. PGP_NUM deve essere uguale a PG_NUM. Per aumentare il numero dei gruppi di posizionamento per il posizionamento, eseguire quanto riportato di seguito:

root # ceph osd pool set POOL_NAME pgp_num PGP_NUM

17.4.4 Individuazione del numero di gruppi di posizionamento

Per individuare il numero dei gruppi di posizionamento in un pool, eseguire il comando get seguente:

root # ceph osd pool get POOL_NAME pg_num

17.4.5 Individuazione delle statistiche dei gruppi di posizionamento di un cluster

Per individuare le statistiche dei gruppi di posizionamento nel cluster, eseguire il comando seguente:

root # ceph pg dump [--format FORMAT]

I formati validi sono "plain" (default) e "json".

17.4.6 Individuazione delle statistiche dei gruppi di posizionamento bloccati

Per individuare le statistiche di tutti i gruppi di posizionamento bloccati in uno stato specifico, eseguire quanto riportato di seguito:

root # ceph pg dump_stuck STATE \
 [--format FORMAT] [--threshold THRESHOLD]

STATE può indicare uno stato tra "inactive" (i gruppi di posizionamento non sono in grado di elaborare le operazioni di lettura o scrittura perché sono in attesa di un OSD con i dati più recenti), "unclean" (i gruppi di posizionamento contengono oggetti non replicati per il numero di volte desiderato), "stale" (i gruppi di posizionamento si trovano in uno stato sconosciuto; gli OSD che li ospitano non hanno informato il cluster di monitoraggio entro l'intervallo di tempo specificato dall'opzione mon_osd_report_timeout), "undersized" o "degraded".

I formati validi sono "plain" (default) e "json".

La soglia definisce il numero minimo di secondi in cui il gruppo di posizionamento resta bloccato prima di essere incluso nelle statistiche (l'impostazione di default è 300 secondi).

17.4.7 Ricerca della mappa di un gruppo di posizionamento

Per cercare la mappa di un determinato gruppo di posizionamento, eseguire quanto riportato di seguito:

root # ceph pg map PG_ID

Ceph restituirà la mappa del gruppo di posizionamento, il gruppo di posizionamento e lo stato dell'OSD:

root # ceph pg map 1.6c
osdmap e13 pg 1.6c (1.6c) -> up [1,0] acting [1,0]

17.4.8 Recupero delle statistiche dei gruppi di posizionamento

Per recuperare le statistiche di un determinato gruppo di posizionamento, eseguire quanto riportato di seguito:

root # ceph pg PG_ID query

17.4.9 Pulitura di un gruppo di posizionamento

Per pulire (Sezione 17.6, «Pulitura dei gruppi di posizionamento») un gruppo di posizionamento, eseguire quanto riportato di seguito:

root # ceph pg scrub PG_ID

Ceph controlla il nodo primario e di replica, genera un catalogo di tutti gli oggetti del gruppo di posizionamento e li confronta per verificare che non ci siano oggetti mancanti o non corrispondenti e che i contenuti siano coerenti. Presupponendo la corrispondenza di tutte le repliche, una pulizia semantica finale assicura che tutti i metadati di oggetto relativi alla snapshot siano coerenti. Gli errori vengono segnalati tramite i log.

17.4.10 Assegnazione della priorità al backfill e al recupero dei gruppi di posizionamento

In alcune situazioni può capitare di dover recuperare e/o eseguire il backfill di più gruppi di posizionamento, alcuni dei quali contengono dati più importanti di altri. Ad esempio, questi gruppi di posizionamento possono contenere dati di immagini utilizzati dai computer in esecuzione, mentre altri gruppi possono essere utilizzati da computer inattivi o da dati meno pertinenti. In questo caso, è consigliabile assegnare la priorità al recupero di questi gruppi per ripristinare per prime la disponibilità e le prestazioni dei dati memorizzati in questi gruppi. Per contrassegnare determinati gruppi di posizionamento come prioritari durante il backfill o il recupero, eseguire quanto riportato di seguito:

root # ceph pg force-recovery PG_ID1 [PG_ID2 ... ]
root # ceph pg force-backfill PG_ID1 [PG_ID2 ... ]

In questo modo, Ceph eseguirà innanzitutto il recupero o il backfill dei gruppi di posizionamento specificati prima di passare agli altri gruppi. Questa impostazione non interrompe i processi di recupero o backfill in corso, ma fa in modo che i gruppi di posizionamento specificati vengano elaborati il prima possibile. Se si cambia idea o si assegna priorità ai gruppi errati, annullare la definizione della priorità:

root # ceph pg cancel-force-recovery PG_ID1 [PG_ID2 ... ]
root # ceph pg cancel-force-backfill PG_ID1 [PG_ID2 ... ]

I comandi cancel-* rimuovono il flag "force" dai gruppi di posizionamento che vengono quindi elaborati nell'ordine di default. Di nuovo, questa impostazione non influisce sui gruppi di posizionamento in corso di elaborazione, ma soltanto su quelli che si trovano in coda. Il flag "force" viene cancellato automaticamente al termine del processo di recupero o backfill del gruppo.

17.4.11 Ripristino degli oggetti persi

Se il cluster ha perso uno o più oggetti e l'utente ha deciso di abbandonare la ricerca dei dati persi, occorre contrassegnare gli oggetti non trovati come "lost".

Se gli oggetti ancora non si trovano dopo aver interrogato tutte le ubicazioni disponibili, è possibile che non si possano individuare. Ciò è possibile date le insolite combinazioni di errori che consentono al cluster di raccogliere informazioni sulle operazioni di scrittura effettuate prima del loro recupero.

Attualmente, l'unica opzione supportata è "revert", che consente di ripristinare una versione precedente dell'oggetto o di eliminarla completamente se si tratta di un nuovo oggetto. Per contrassegnare gli oggetti "unfound" come "lost", eseguire quanto riportato di seguito:

  cephuser@adm > ceph pg PG_ID mark_unfound_lost revert|delete

17.4.12 Abilitazione dell'utilità di dimensionamento automatico del gruppo di posizionamento

I gruppi di posizionamento rappresentano un dettaglio di implementazione interno della modalità di distribuzione dei dati da parte di Ceph. Abilitando il dimensionamento automatico dei gruppi di posizionamento, si consente al cluster di creare oppure ottimizzare automaticamente i gruppi di posizionamento in base alla modalità di utilizzo del cluster stesso.

Ogni pool nel sistema dispone di una proprietà pg_autoscale_mode che può essere impostata su off, on o warn:

L'utilità di dimensionamento automatico è configurata per ogni singolo pool e può essere eseguita in tre modalità:

off

Per disabilitare il dimensionamento automatico per il pool selezionato. L'amministratore dovrà scegliere un numero di gruppi di posizionamento adeguato per ogni pool.

on

Per abilitare le regolazioni automatiche del numero di gruppi di posizionamento per un determinato pool.

warn

Per inviare avvisi sull'integrità quando occorre regolare il numero di gruppi di posizionamento.

Per impostare la modalità di dimensionamento automatico per i pool esistenti:

cephuser@adm > ceph osd pool set POOL_NAME pg_autoscale_mode mode

È inoltre possibile configurare la modalità pg_autoscale_mode di default da applicare ai pool creati in futuro con:

cephuser@adm > ceph config set global osd_pool_default_pg_autoscale_mode MODE

È possibile visualizzare ciascun pool, il relativo utilizzo e le eventuali modifiche del numero di gruppi di posizionamento suggerite con questo comando:

cephuser@adm > ceph osd pool autoscale-status

17.5 Modifica della mappa CRUSH

In questa sezione vengono presentati i modi con cui apportare modifiche di base alla mappa CRUSH, come la modifica di una mappa CRUSH, dei parametri della mappa CRUSH e l'aggiunta, lo spostamento o la rimozione di un OSD.

17.5.1 Modifica di una mappa CRUSH

Per modificare una mappa CRUSH esistente, procedere come indicato di seguito:

  1. Ottenere una mappa CRUSH. Per ottenere la mappa CRUSH per il cluster, eseguire quanto riportato di seguito:

    cephuser@adm > ceph osd getcrushmap -o compiled-crushmap-filename

    L'output Ceph (-o) sarà una mappa CRUSH compilata nel nome file specificato. Poiché la mappa CRUSH è compilata, è necessario decompilarla prima di poterla modificare.

  2. Decompilare una mappa CRUSH. Per decompilare una mappa CRUSH, eseguire quanto riportato di seguito:

    cephuser@adm > crushtool -d compiled-crushmap-filename \
     -o decompiled-crushmap-filename

    Ceph decompilerà (-d) la mappa CRUSH compilata e la genererà (-o) nel nome file specificato.

  3. Modificare almeno uno dei parametri di dispositivi, compartimenti e regole.

  4. Compilare una mappa CRUSH. Per compilare una mappa CRUSH, eseguire quanto riportato di seguito:

    cephuser@adm > crushtool -c decompiled-crush-map-filename \
     -o compiled-crush-map-filename

    Ceph memorizzerà la mappa CRUSH compilata nel nome file specificato.

  5. Impostare una mappa CRUSH. Per impostare la mappa CRUSH per il cluster, eseguire quanto riportato di seguito:

    cephuser@adm > ceph osd setcrushmap -i compiled-crushmap-filename

    Ceph immetterà la mappa CRUSH compilata del nome file specificato come mappa CRUSH per il cluster.

Suggerimento
Suggerimento: utilizzo di un sistema di controllo versioni

Utilizzare un sistema di controllo versioni, come git o svn, per i file della mappa CRUSH esportati e modificati per semplificare un possibile rollback.

Suggerimento
Suggerimento: test della nuova mappa CRUSH

Testare la nuova mappa CRUSH modificata tramite il comando crushtool --test e confrontarla con lo stato prima di applicarla. Le seguenti opzioni di comando potrebbero risultare utili: --show-statistics, --show-mappings, --show-bad-mappings, ‑‑show-utilization, --show-utilization-all, --show-choose-tries

17.5.2 Aggiunta o spostamento di un OSD

Per aggiungere o spostare un OSD nella mappa CRUSH di un cluster in esecuzione, eseguire quanto riportato di seguito:

cephuser@adm > ceph osd crush set id_or_name weight root=pool-name
bucket-type=bucket-name ...
id

Un numero intero. L'ID numerico dell'OSD. Questa opzione è obbligatoria.

nome

Stringa. Indica il nome completo dell'OSD. Questa opzione è obbligatoria.

weight

Valore doppio. Il peso CRUSH per l'OSD. Questa opzione è obbligatoria.

root

Una coppia di chiavi/valori. Per default, la gerarchia CRUSH contiene il default del pool come rispettiva radice. Questa opzione è obbligatoria.

bucket-type

Coppia di chiavi/valori. È possibile specificare l'ubicazione dell'OSD nella gerarchia CRUSH.

Nell'esempio seguente viene aggiunto osd.0 alla gerarchia o viene spostato l'OSD da un'ubicazione precedente.

cephuser@adm > ceph osd crush set osd.0 1.0 root=data datacenter=dc1 room=room1 \
row=foo rack=bar host=foo-bar-1

17.5.3 Differenza tra ceph osd reweight e ceph osd crush reweight

Vi sono due comandi simili che cambiano la variabile "weight" di un Ceph OSD. Il loro contesto d'uso è diverso e può generare confusione.

17.5.3.1 ceph osd reweight

Utilizzo:

cephuser@adm > ceph osd reweight OSD_NAME NEW_WEIGHT

ceph osd reweight imposta il peso sostitutivo sul Ceph OSD. Questo valore è compreso tra 0 e 1 e forza CRUSH a riposizionare i dati che altrimenti risiederebbero in questa unità. Non cambia i pesi assegnati ai compartimenti sopra l'OSD ed è una misura correttiva in caso di cattivo funzionamento della normale distribuzione CRUSH. Ad esempio, se uno degli OSD si trova al 90% e gli altri al 40%, è possibile ridurre il peso per provare a compensarlo.

Nota
Nota: il peso dell'OSD è temporaneo

Tenere presente che ceph osd reweight non è un'impostazione permanente. Quando un OSD non viene contrassegnato, il suo peso viene impostato a 0 e cambia su 1 quando il dispositivo viene contrassegnato nuovamente.

17.5.3.2 ceph osd crush reweight

Utilizzo:

cephuser@adm > ceph osd crush reweight OSD_NAME NEW_WEIGHT

ceph osd crush reweight imposta il peso CRUSH dell'OSD. Si tratta di un valore arbitrario, che in genere corrisponde alle dimensioni del disco in TB, e controlla la quantità di dati che il sistema tenta di allocare sull'OSD.

17.5.4 Rimozione di un OSD

Per rimuovere un OSD dalla mappa CRUSH di un cluster in esecuzione, eseguire quanto riportato di seguito:

cephuser@adm > ceph osd crush remove OSD_NAME

17.5.5 Aggiunta di un compartimento

Per aggiungere un compartimento alla mappa CRUSH di un cluster in esecuzione, eseguire il comando ceph osd crush add-bucket:

cephuser@adm > ceph osd crush add-bucket BUCKET_NAME BUCKET_TYPE

17.5.6 Spostamento di un compartimento

Per spostare un compartimento in un'altra ubicazione o posizione nella gerarchia della mappa CRUSH, eseguire quanto riportato di seguito:

cephuser@adm > ceph osd crush move BUCKET_NAME BUCKET_TYPE=BUCKET_NAME [...]

Esempio:

cephuser@adm > ceph osd crush move bucket1 datacenter=dc1 room=room1 row=foo rack=bar host=foo-bar-1

17.5.7 Rimozione di un compartimento

Per rimuovere un compartimento dalla gerarchia della mappa CRUSH, eseguire quanto riportato di seguito:

cephuser@adm > ceph osd crush remove BUCKET_NAME
Nota
Nota: soltanto compartimenti vuoti

I compartimenti devono essere vuoti per poter essere rimossi dalla gerarchia CRUSH.

17.6 Pulitura dei gruppi di posizionamento

Oltre alla creazione di più copie di oggetti, Ceph assicura l'integrità dei dati tramite la pulitura dei gruppi di posizionamento. Per ulteriori informazioni su questi gruppi, consultare questo riferimento: Book “Guida alla distribuzione”, Chapter 1 “SES e Ceph”, Section 1.3.2 “Gruppi di posizionamento”. La pulitura Ceph è analoga all'esecuzione di fsck nel strato di memorizzazione degli oggetti. Per ciascun gruppo di posizionamento, Ceph genera un catalogo di tutti gli oggetti e confronta ciascun oggetto e le rispettive repliche per assicurare che non vi siano oggetti mancanti o non corrispondenti. Con la pulitura durante il giorno, vengono verificati le dimensioni e gli attributi degli oggetti, mentre con una pulitura settimanale più approfondita si effettua la lettura dei dati e mediante l'uso di checksum ne garantisce l'integrità.

La pulitura è importante per mantenere l'integrità dei dati, ma può ridurre le prestazioni. È possibile regolare le impostazioni seguenti per aumentare o diminuire le operazioni di pulitura:

osd max scrubs

Numero massimo di operazioni di pulitura simultanee per un Ceph OSD. Il valore di default è 1.

osd scrub begin hour, osd scrub end hour

Ore del giorno (da 0 a 24) che definiscono una finestra temporale durante cui può avvenire la pulitura. Per default, questa finestra inizia alle ore 0 e termina alle ore 24.

Importante
Importante

Se l'intervallo di pulitura del gruppo di posizionamento supera il valore dell'impostazione osd scrub max interval, la pulitura verrà eseguita indipendentemente dalla finestra temporale definita per la stessa.

osd scrub during recovery

Consente le operazioni di pulitura durante il recupero. Se si imposta su 'false' la pianificazione di nuove operazioni di pulitura verrà disabilitata durante un recupero attivo. Le operazioni di pulitura già in esecuzione continueranno normalmente. Questa opzione è utile per ridurre il carico di cluster trafficati. L'impostazione di default è "true".

osd scrub thread timeout

Numero massimo di secondi prima del timeout della pulitura. Il valore di default è 60.

osd scrub finalize thread timeout

Intervallo di tempo massimo espresso in secondi prima del time out del thread di completamento della pulitura. Il valore di default è 60*10.

osd scrub load threshold

Carico massimo normalizzato. Ceph non eseguirà la pulitura quando il carico del sistema (come definito dal rapporto getloadavg()/numero di online cpus) supera tale numero. Il valore di default è 0,5.

osd scrub min interval

Intervallo minimo espresso in secondi per la pulitura di Ceph OSD quando il carico del cluster Ceph è basso. Il valore di default è 60*60*24 (una volta al giorno).

osd scrub max interval

Intervallo massimo espresso in secondi per la pulitura del Ceph OSD, a prescindere dal carico del cluster. Il valore di default è 7*60*60*24 (una volta alla settimana).

osd scrub chunk min

Numero minimo di porzioni di archivio dati da pulire durante un'operazione singola. Ceph blocca le operazioni di scrittura su una porzione singola mentre è in corso la pulitura. Il valore di default è 5.

osd scrub chunk max

Numero massimo di porzioni di archivio dati da pulire durante un'operazione singola. Il valore di default è 25.

osd scrub sleep

Tempo di inattività prima della pulitura del gruppo successivo di porzioni. Se questo valore viene aumentato, l'operazione di pulitura risulta rallentata, mentre le operazioni del client sono meno influenzate. Il valore di default è 0.

osd deep scrub interval

Intervallo per la pulitura "approfondita" (lettura completa di tutti i dati). L'opzione osd scrub load threshold non influisce su questa impostazione. Il valore di default è 60*60*24*7 (una volta alla settimana).

osd scrub interval randomize ratio

Consente di aggiungere un ritardo casuale al valore osd scrub min interval quando si pianifica il lavoro di pulitura successivo per un gruppo di posizionamento. Il ritardo è un valore casuale più piccolo rispetto al risultato di osd scrub min interval * osd scrub interval randomized ratio. Pertanto, l'impostazione di default distribuisce le puliture praticamente in modo casuale nella finestra temporale consentita di [1, 1,5] * osd scrub min interval. Il valore di default è 0,5.

osd deep scrub stride

Consente di leggere le dimensioni quando si effettua una pulitura approfondita. Il valore di default è 524288 (512 kB).

18 Gestione dei pool di memorizzazione

Ceph memorizza i dati nei pool. I pool sono gruppi logici per la memorizzazione di oggetti. Quando inizialmente si installa un cluster senza creare un pool, Ceph utilizza i pool di default per la memorizzazione dei dati. Gli elementi di rilievo più importanti riportati di seguito sono relativi ai pool Ceph:

  • Resilienza: i pool Ceph forniscono resilienza tramite la replica o la codifica dei dati contenuti al loro interno. È possibile impostare ciascun pool come replicato (replicated) o con codice di cancellazione (erasure coding). Per i pool replicati, è possibile impostare anche il numero di repliche, o copie, di cui disporrà ogni oggetto dati all'interno del pool. Il numero di copie (OSD, compartimenti/foglie CRUSH) che possono andare perse è inferiore di uno rispetto al numero delle repliche. Con il codice di cancellazione, è possibile impostare i valori di k e m, dove k è il numero di porzioni di dati e m è il numero di porzioni di codice. Per i pool con codice di cancellazione, il numero di porzioni di codice determina quanti OSD (compartimenti/foglie CRUSH) possono andare persi senza causare la perdita dei dati.

  • Gruppi di posizionamento: è possibile impostare il numero di gruppi di posizionamento per il pool. In una configurazione tipica si utilizzano circa 100 gruppi di posizionamento per OSD per fornire il bilanciamento ottimale senza utilizzare troppe risorse di calcolo. Quando si configurano più pool, assicurarsi di impostare un numero ragionevole di gruppi di posizionamento per entrambi il pool e il cluster insieme.

  • Regole CRUSH: quando si memorizzano dati in un pool, gli oggetti e le relative repliche (o porzioni, nel caso dei pool con codice di cancellazione) vengono posizionati in base al set di regole CRUSH mappate al pool. È possibile creare una regola CRUSH personalizzata per il pool.

  • Snapshot: quando si creano snapshot con ceph osd pool mksnap, si crea effettivamente uno snapshot di un determinato pool.

Per organizzare i dati nei pool, è possibile elencare, creare e rimuovere pool. È inoltre possibile visualizzare le statistiche di utilizzo per ciascun pool.

18.1 Creazione di un pool

È possibile creare un pool replicato (replicated), per il recupero degli OSD persi mantenendo più copie degli oggetti, o di cancellazione (erasure) per ottenere la funzionalità RAID5 o 6 generalizzata. Per i pool replicati è necessario maggior spazio di storage nominale rispetto a quello necessario per i pool con codice di cancellazione. L'impostazione di default è replicated. Per ulteriori informazioni sui pool con codice di cancellazione, vedere il Capitolo 19, Pool con codice di cancellazione.

Per creare un pool replicato, eseguire:

cephuser@adm > ceph osd pool create POOL_NAME
Nota
Nota

L'utilità di dimensionamento automatico si occuperà della gestione degli argomenti facoltativi rimanenti. Per ulteriori informazioni, vedere Sezione 17.4.12, «Abilitazione dell'utilità di dimensionamento automatico del gruppo di posizionamento».

Per creare un pool con codice di cancellazione, eseguire:

cephuser@adm > ceph osd pool create POOL_NAME erasure CRUSH_RULESET_NAME \
EXPECTED_NUM_OBJECTS

Se si supera il limite di gruppi di posizionamento per OSD, è possibile che il comando ceph osd pool create si concluda con un errore. Il limite viene impostato con l'opzione mon_max_pg_per_osd.

POOL_NAME

Indica il nome del pool. Deve essere univoco. Questa opzione è obbligatoria.

POOL_TYPE

Indica il tipo di pool, che può essere sia replicato, per recuperare dagli OSD persi mantenendo più copie degli oggetti, o di cancellazione per ottenere un tipo di capacità RAID5 generalizzata. Per i pool replicati è richiesto uno spazio di memorizzazione non elaborato maggiore, ma consentono di implementare tutte le operazioni Ceph. Per i pool di cancellazione è richiesto uno spazio di memorizzazione non elaborato minore, ma è possibile implementare solo un sottoinsieme delle operazioni disponibili. L'impostazione di default per POOL_TYPE è replicated.

CRUSH_RULESET_NAME

Indica il nome del set di regole CRUSH per il pool. Se il set di regole specificato non esiste, la creazione dei pool replicati si concluderà con un errore con -ENOENT. Per i pool replicati, si tratta del set di regole specificato dalla variabile di configurazione osd pool default CRUSH replicated ruleset. Questo set di regole deve esistere. Nel caso dei pool con codice di cancellazione, si tratta del set di regole "erasure-code", se è utilizzato il profilo con codice di cancellazione di default, oppure di POOL_NAME. Questo set di regole verrà creato in modo implicito se non esiste già.

erasure_code_profile=profile

Solo per i pool con codice di cancellazione. Utilizzare il profilo del codice di cancellazione. Deve essere un profilo esistente, come definito da osd erasure-code-profile set.

Nota
Nota

Se per qualsiasi motivo l'utilità di dimensionamento automatico è stata disabilitata (pg_autoscale_mode impostata su off) su un pool, è possibile calcolare e impostare manualmente il numero di gruppi di posizionamento. Per informazioni più dettagliate sul calcolo del numero appropriato di gruppi di posizionamento per il pool, vedere Sezione 17.4, «Gruppi di posizionamento» (in lingua inglese).

EXPECTED_NUM_OBJECTS

Indica il numero di oggetti previsto per il pool. Quando questo valore viene impostato (insieme a una soglia di unione del filestore), al momento della creazione del pool si verifica la suddivisione della cartella del gruppo di posizionamento. In tal modo si evita l'impatto di latenza con una suddivisione della cartella di runtime.

18.2 Elenco di pool

Per elencare il pool del cluster, eseguire:

cephuser@adm > ceph osd pool ls

18.3 Ridenominazione di un pool

Per rinominare un pool, eseguire:

cephuser@adm > ceph osd pool rename CURRENT_POOL_NAME NEW_POOL_NAME

Se si rinomina un pool e si dispone di funzionalità specifiche per il pool per un utente autenticato, è necessario aggiornare le funzionalità dell'utente con il nuovo nome pool.

18.4 Eliminazione di un pool

Avvertimento
Avvertimento: l'eliminazione del pool è irreversibile

I pool possono contenere dati importanti. L'eliminazione di un pool comporta la cancellazione di tutti i dati in esso contenuti e non è possibile recuperarli in alcun modo.

Poiché l'eliminazione involontaria di un pool è un pericolo effettivo, Ceph implementa due meccanismi che impediscono che ciò accada. Prima di poter eliminare un pool è necessario disabilitare entrambi i meccanismi.

Il primo di questi è il flag NODELETE. Ciascun pool è dotato di questo flag, il cui valore di default è "false". Per scoprire il valore di questo flag su un pool, eseguire il seguente comando:

cephuser@adm > ceph osd pool get pool_name nodelete

Se l'output è nodelete: true, non è possibile eliminare il pool fino a quando non si modifica il flag con il seguente comando:

cephuser@adm > ceph osd pool set pool_name nodelete false

Il secondo meccanismo è il parametro di configurazione esteso a tutto il cluster mon allow pool delete, il cui valore di default è "false". Vale a dire che per default non è possibile eliminare un pool. Il messaggio di errore visualizzato è:

Error EPERM: pool deletion is disabled; you must first set the
mon_allow_pool_delete config option to true before you can destroy a pool

Per eliminare il pool malgrado questa impostazione di sicurezza, è possibile impostare temporaneamente mon allow pool delete su "true", eliminare il pool e riportare il parametro su "false":

cephuser@adm > ceph tell mon.* injectargs --mon-allow-pool-delete=true
cephuser@adm > ceph osd pool delete pool_name pool_name --yes-i-really-really-mean-it
cephuser@adm > ceph tell mon.* injectargs --mon-allow-pool-delete=false

Con il comando injectargs viene visualizzato il seguente messaggio:

injectargs:mon_allow_pool_delete = 'true' (not observed, change may require restart)

Ciò conferma semplicemente che il comando è stato eseguito correttamente. Non si tratta di un errore.

Se sono stati creati set di regole propri e regole per un pool creato precedentemente, considerare di rimuovere tali regole quando il pool non è più necessario.

18.5 Altre operazioni

18.5.1 Associazione di pool a un'applicazione

Prima di utilizzare i pool, è necessario associare loro un'applicazione. I pool che verranno utilizzati con CephFS o quelli creati automaticamente da Object Gateway vengono associati automaticamente.

Negli altri casi, è possibile associare manualmente un nome applicazione in formato libero a un pool:

cephuser@adm > ceph osd pool application enable POOL_NAME APPLICATION_NAME
Suggerimento
Suggerimento: nomi applicazioni di default

CephFS utilizza il nome applicazione cephfs, per il RADOS Block Device (dispositivo di blocco RADOS) viene utilizzato rbd e per Object Gateway viene utilizzato rgw.

È possibile associare un pool a più applicazioni, ciascuna delle quali può disporre di metadati propri. Per elencare l'applicazione (o le applicazioni) associata a un pool, immettere il comando seguente:

cephuser@adm > ceph osd pool application get pool_name

18.5.2 Impostazione delle quote del pool

È possibile impostare le quote del pool per il numero massimo di byte e/o il numero massimo di oggetti per pool.

cephuser@adm > ceph osd pool set-quota POOL_NAME MAX_OBJECTS OBJ_COUNT MAX_BYTES BYTES

Esempio:

cephuser@adm > ceph osd pool set-quota data max_objects 10000

Per rimuovere una quota, impostarne il valore a 0.

18.5.3 Visualizzazione delle statistiche del pool

Per visualizzare le statistiche di utilizzo di un pool, eseguire:

cephuser@adm > rados df
 POOL_NAME                    USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRADED  RD_OPS      RD  WR_OPS      WR USED COMPR UNDER COMPR
 .rgw.root                 768 KiB       4      0     12                  0       0        0      44  44 KiB       4   4 KiB        0 B         0 B
 cephfs_data               960 KiB       5      0     15                  0       0        0    5502 2.1 MiB      14  11 KiB        0 B         0 B
 cephfs_metadata           1.5 MiB      22      0     66                  0       0        0      26  78 KiB     176 147 KiB        0 B         0 B
 default.rgw.buckets.index     0 B       1      0      3                  0       0        0       4   4 KiB       1     0 B        0 B         0 B
 default.rgw.control           0 B       8      0     24                  0       0        0       0     0 B       0     0 B        0 B         0 B
 default.rgw.log               0 B     207      0    621                  0       0        0 5372132 5.1 GiB 3579618     0 B        0 B         0 B
 default.rgw.meta          961 KiB       6      0     18                  0       0        0     155 140 KiB      14   7 KiB        0 B         0 B
 example_rbd_pool          2.1 MiB      18      0     54                  0       0        0 3350841 2.7 GiB     118  98 KiB        0 B         0 B
 iscsi-images              769 KiB       8      0     24                  0       0        0 1559261 1.3 GiB      61  42 KiB        0 B         0 B
 mirrored-pool             1.1 MiB      10      0     30                  0       0        0  475724 395 MiB      54  48 KiB        0 B         0 B
 pool2                         0 B       0      0      0                  0       0        0       0     0 B       0     0 B        0 B         0 B
 pool3                     333 MiB      37      0    111                  0       0        0 3169308 2.5 GiB   14847 118 MiB        0 B         0 B
 pool4                     1.1 MiB      13      0     39                  0       0        0 1379568 1.1 GiB   16840  16 MiB        0 B         0 B

Di seguito è riportata una descrizione delle singole colonne:

USED

Numero di byte utilizzati dal pool.

OBJECTS

Numero di oggetti memorizzati nel pool.

CLONES

Numero di cloni memorizzati nel pool. Quando viene creata una snapshot e si scrive su un oggetto, invece di modificare l'oggetto originale, ne viene creato un clone per evitare che il contenuto dell'oggetto originale acquisito tramite snapshot venga modificato.

COPIES

Numero di repliche dell'oggetto. Ad esempio, se un pool replicato con fattore di replica di 3 contiene "x" oggetti, in genere disporrà di 3 * x copie.

MISSING_ON_PRIMARY

Numero di oggetti in stato danneggiato (non esistono tutte le copie) mentre la copia è mancante sull'OSD primario.

UNFOUND

Numero di oggetti non trovati.

DEGRADED

Numero di oggetti danneggiati.

RD_OPS

Numero totale di operazioni di lettura richieste per il pool.

RD

Numero totale di byte letti dal pool.

WR_OPS

Numero totale di operazioni di scrittura richieste per il pool.

WR

Numero totale di byte scritti sul pool. Tenere presente che questo valore non corrisponde all'utilizzo del pool, poiché è possibile scrivere sullo stesso oggetto per più volte. Come risultato, il valore di utilizzo del pool rimarrà invariato, ma il numero di byte scritti nel pool aumenterà.

USED COMPR

Numero di byte allocati per i dati compressi.

UNDER COMPR

Numero di byte occupati dai dati compressi quando non lo sono.

18.5.4 Ottenimento dei valori del pool

Per ottenere un valore da un pool, eseguire il comando get seguente:

cephuser@adm > ceph osd pool get POOL_NAME KEY

È possibile ottenere valori per le chiavi elencate nella Sezione 18.5.5, «Impostazione dei valori del pool» oltre che per le chiavi seguenti:

PG_NUM

Indica il numero di gruppi di posizionamento per il pool.

PGP_NUM

Indica il numero effettivo dei gruppi di posizionamento da utilizzare quando si calcola il posizionamento dei dati. L'intervallo valido è uguale o minore di PG_NUM.

Suggerimento
Suggerimento: tutti i valori di un pool

Per visualizzare un elenco di tutti i valori correlati a un pool specifico, eseguire:

 cephuser@adm > ceph osd pool get POOL_NAME all

18.5.5 Impostazione dei valori del pool

Per impostare un valore a un pool, eseguire:

cephuser@adm > ceph osd pool set POOL_NAME KEY VALUE

Di seguito è riportato un elenco dei valori del pool ordinati per tipo di pool:

Valori del pool comune
crash_replay_interval

Indica il numero di secondi da consentire ai client per riprodurre richieste riconosciute, ma non sottoposte a commit.

pg_num

Indica il numero di gruppi di posizionamento per il pool. Se si aggiungono nuovi OSD al cluster, verificare il valore dei gruppi di posizionamento su tutti i pool utilizzati come destinazione per i nuovi OSD.

pgp_num

Indica il numero effettivo dei gruppi di posizionamento da utilizzare quando si calcola il posizionamento dei dati.

crush_ruleset

Indica il set di regole da utilizzare per la mappatura del posizionamento oggetti nel cluster.

hashpspool

Impostare (1) o annullare l'impostazione (0) del flag HASHPSPOOL su un determinato pool. Se si abilita questo flag, l'algoritmo viene modificato per distribuire meglio i gruppi di posizionamento agli OSD. Dopo aver abilitato questo flag in un pool il cui flag HASHPSPOOL è stato impostato sul valore 0 di default, nel cluster viene avviato il processo di backfill per fare in modo che il posizionamento di tutti i gruppi di posizionamento sia nuovamente corretto. Si tenga presente che questa procedura potrebbe generare un notevole carico I/O su un cluster, pertanto non abilitare il flag da 0 a 1 sui cluster di produzione con carico elevato.

nodelete

Impedisce la rimozione del pool.

nopgchange

Impedisce di modificare i valori pg_num e pgp_num del pool.

noscrub,nodeep-scrub

Disabilita la pulitura (approfondita) dei dati per un pool specifico per risolvere carichi I/O temporaneamente elevati.

write_fadvise_dontneed

Impostare o annullare l'impostazione del flag WRITE_FADVISE_DONTNEED sulle richieste di lettura/scrittura di un determinato pool per evitare l'inserimento dei dati nella cache. L'impostazione di default è false. Si applica a entrambi i pool replicati ed EC.

scrub_min_interval

Intervallo minimo espresso in secondi per la pulitura dei pool quando il carico del cluster è basso. Il valore di default 0 significa che viene utilizzato il valore osd_scrub_min_interval ricavato dal file di configurazione Ceph.

scrub_max_interval

Intervallo massimo espresso in secondi per la pulitura dei pool, indipendentemente dal carico del cluster. Il valore di default 0 significa che viene utilizzato il valore osd_scrub_max_interval ricavato dal file di configurazione Ceph.

deep_scrub_interval

Intervallo espresso in secondi per la pulitura approfondita del pool. Il valore di default 0 significa che viene utilizzato il valore osd_deep_scrub ricavato dal file di configurazione Ceph.

Valori del pool replicato
dimensione

Imposta il numero di repliche per gli oggetti nel pool. Per ulteriori informazioni, vedere Sezione 18.5.6, «Impostazione del numero di repliche di oggetti». Solo pool replicati.

min_size

Imposta il numero minimo di repliche richiesto per I/O. Per ulteriori informazioni, vedere Sezione 18.5.6, «Impostazione del numero di repliche di oggetti». Solo pool replicati.

nosizechange

Impedisce di modificare le dimensioni del pool. Durante la creazione di un pool, il valore di default è ricavato dal valore del parametro osd_pool_default_flag_nosizechange, impostato su false per default. Si applica soltanto ai pool replicati perché non è possibile modificare le dimensioni dei pool EC.

hit_set_type

Consente di controllare i set di accessi per i pool di cache. Per ulteriori informazioni, vedere Bloom Filter (in lingua inglese). Questa opzione può contenere i seguenti valori: bloom, explicit_hash, explicit_object. Il valore di default è bloom, gli altri valori sono solo ai fini dei test.

hit_set_count

Indica il numero di set di accessi per i pool di cache. Più elevato è il numero, maggiore è il consumo di RAM da parte del daemon ceph-osd. Il valore di default è 0.

hit_set_period

Indica la durata, espressa in secondi, di un periodo di set di accessi per i pool di cache. Più elevato è il numero, maggiore è il consumo di RAM da parte del daemon ceph-osd. Durante la creazione di un pool, il valore di default è ricavato dal valore del parametro osd_tier_default_cache_hit_set_period, impostato su 1200 per default. Si applica soltanto ai pool replicati perché non è possibile utilizzare i pool EC come livello di cache.

hit_set_fpp

Probabilità falsa positiva per il tipo di set di accessi bloom. Per ulteriori informazioni, vedere Bloom Filter (in lingua inglese). L'intervallo valido è da 0,0 a 1,0; il valore di default è 0,05

use_gmt_hitset

Forza gli OSD a utilizzare le registrazioni dell'orario GMT (ora di Greenwich) quando si crea un set di accessi per la suddivisione in livelli di cache. In tal modo ci si assicura che i nodi in fusi orari diversi restituiscano lo stesso risultato. Il valore di default è 1. Tale valore non deve essere modificato.

cache_target_dirty_ratio

Indica la percentuale del pool di cache contenente oggetti modificati prima che l'agente di suddivisione in livelli di cache li svuoti nel pool di memorizzazione di supporto. Il valore di default è 0.4.

cache_target_dirty_high_ratio

Indica la percentuale del pool di cache contenente oggetti modificati prima che l'agente di suddivisione in livelli di cache li svuoti nel pool di memorizzazione di supporto con una velocità più elevata. Il valore di default è 0.6.

cache_target_full_ratio

Indica la percentuale del pool di cache contenente oggetti non modificati prima che l'agente di suddivisione in livelli di cache li rimuova dal pool di cache. Il valore di default è 0.8.

target_max_bytes

Ceph inizierà lo svuotamento o la rimozione degli oggetti quando viene attivata la soglia max_bytes.

target_max_objects

Ceph inizierà lo svuotamento o la rimozione degli oggetti quando viene attivata la soglia max_objects.

hit_set_grade_decay_rate

Grado di decadimento della temperatura tra due hit_set consecutivi. Il valore di default è 20.

hit_set_search_last_n

Numero massimo N di visualizzazioni negli hit_set per il calcolo della temperatura. Il valore di default è 1.

cache_min_flush_age

Tempo (in secondi) prima che l'agente di suddivisione in livelli di cache svuoti un oggetto dal pool di cache nel pool di memorizzazione.

cache_min_evict_age

Tempo (in secondi) prima che l'agente di suddivisione in livelli di cache rimuova un oggetto dal pool di cache.

Valori del pool con codice di cancellazione
fast_read

Se questo flag è abilitato nei pool con codice di cancellazione, la richiesta di lettura emette sottoletture a tutte le partizioni e attende di ricevere un numero sufficiente di partizioni da decodificare per servire il client. Nel caso dei plug-in di cancellazione jerasure e isa, quando vengono restituite le prime risposte K, la richiesta del client viene eseguita immediatamente utilizzando i dati decodificati da tali risposte. Questo approccio causa un maggiore carico sulla CPU e un minore carico sul disco/sulla rete. Attualmente il flag è supportato solo per i pool con codice di cancellazione. Il valore di default è 0.

18.5.6 Impostazione del numero di repliche di oggetti

Per impostare il numero di repliche di oggetti in un pool replicato, eseguire quanto riportato di seguito:

cephuser@adm > ceph osd pool set poolname size num-replicas

In num-replicas è incluso l'oggetto stesso. Se ad esempio si desiderano l'oggetto e due copie dello stesso per un totale di tre istanze dell'oggetto, specificare 3.

Avvertimento
Avvertimento: non impostare meno di 3 repliche

Se si imposta num-replicas a 2, si otterrà solo una copia dei dati. Se si perde un'istanza oggetto, è necessario confidare nel fatto che l'altra copia non sia corrotta, ad esempio dall'ultima pulitura effettuata durante il recupero (fare riferimento alla Sezione 17.6, «Pulitura dei gruppi di posizionamento»).

L'impostazione di un pool a una replica significa che nel pool è presente una istanza esatta dell'oggetto Dati. In caso di errore dell'OSD, i dati vengono persi. Un utilizzo possibile di un pool con una replica consiste nella memorizzazione temporanea dei dati per un breve periodo.

Suggerimento
Suggerimento: impostazione di più di 3 repliche

Se vengono impostate 4 repliche per un pool, è possibile aumentare l'affidabilità del 25%.

Nel caso di due data center, è necessario impostare almeno 4 repliche per un pool affinché siano presenti due copie in ciascun data center per fare in modo che, se un data center viene perso, ne esistano comunque due copie e i dati vengano conservati anche in caso di perdita di un disco.

Nota
Nota

Un oggetto potrebbe accettare I/O danneggiati con meno di pool size repliche. Per impostare un numero minimo di repliche obbligatorie per I/O, si deve utilizzare l'impostazione min_size. Esempio:

cephuser@adm > ceph osd pool set data min_size 2

In tal modo ci si assicura che nessun oggetto nel pool di dati riceva I/O con meno di min_size repliche.

Suggerimento
Suggerimento: ottenimento del numero di repliche di oggetti

Per ottenere il numero di repliche di oggetti, eseguire quanto riportato di seguito:

cephuser@adm > ceph osd dump | grep 'replicated size'

Ceph elencherà i pool, con l'attributo replicated size evidenziato. Per default, Ceph crea due repliche di un oggetto (per un totale di tre copie o una dimensione pari a 3).

18.6 Migrazione del pool

Quando si crea un pool (vedere Sezione 18.1, «Creazione di un pool») è necessario specificarne i parametri iniziali, come il tipo di pool o il numero dei gruppi di posizionamento. Se in un secondo momento si decide di modificare uno di questi parametri, ad esempio durante la conversione di un pool replicato in uno con codice di cancellazione o se si riduce il numero di gruppi di posizionamento, è necessario eseguire la migrazione dei dati del pool su un altro i cui parametri sono adatti alla distribuzione attualmente attiva.

Questa sezione descrive due metodi di migrazione: il metodo del livello di cache, per la migrazione dei dati generali del pool, e il metodo basato sui sottocomandi rbd migrate, per la migrazione delle immagini RBD a un nuovo pool. Ogni metodo presenta le proprie specifiche e limitazioni.

18.6.1 Limitazioni

  • È possibile utilizzare il metodo del livello di cache per eseguire la migrazione da un pool replicato a un pool EC o a un altro pool replicato. La migrazione da un pool EC non è supportata.

  • Non è possibile eseguire la migrazione delle immagini RBD e delle esportazioni CephFS da un pool replicato a un pool EC. Il motivo di questa limitazione risiede nel fatto che i pool EC non supportano omap, laddove invece RBD e CephFS utilizzano omap per memorizzare i metadati. Ad esempio, lo svuotamento dell'oggetto intestazione dell'RBD non riuscirà correttamente. Tuttavia, è possibile eseguire la migrazione dei dati a un pool EC, lasciando i metadati in un pool replicato.

  • Il metodo rbd migration consente di eseguire la migrazione delle immagini con un tempo di fermo del client minimo. È necessario soltanto interrompere il client prima del passaggio prepare e avviarlo in seguito. Tenere presente che solo un client librbd che supporta questa funzione (Ceph Nautilus o più recenti) sarà in grado di aprire l'immagine subito dopo il passaggio prepare, mentre i client librbd meno recenti o i client krbd non saranno in grado di aprire l'immagine finché non viene eseguita la fase commit.

18.6.2 Esecuzione della migrazione con il livello di cache

Il principio è semplice: includere il pool di cui eseguire la migrazione in un livello di cache in ordine inverso. Nell'esempio seguente viene eseguita la migrazione di un pool replicato denominato "testpool" a un pool con codice di cancellazione:

Procedura 18.1: Esecuzione della migrazione del pool replicato al pool con codice di cancellazione
  1. Creare un novo pool con codice di cancellazione denominato "newpool". Fare riferimento alla Sezione 18.1, «Creazione di un pool» per una spiegazione dettagliata dei parametri di creazione del pool.

     cephuser@adm > ceph osd pool create newpool erasure default

    Verificare che il portachiavi del client utilizzato fornisca per "newpool" almeno le stesse capacità di "testpool".

    Adesso si hanno due pool: quello originale replicato "testpool" compilato con i dati e il nuovo pool con codice di cancellazione vuoto "newpool":

    Pool prima della migrazione
    Figura 18.1: Pool prima della migrazione
  2. Impostare il livello di cache e configurare il pool replicato "testpool" come pool di cache. L'opzione -force-nonempty consente di aggiungere un livello di cache anche se il pool contiene già dei dati:

    cephuser@adm > ceph tell mon.* injectargs \
     '--mon_debug_unsafe_allow_tier_with_nonempty_snaps=1'
    cephuser@adm > ceph osd tier add newpool testpool --force-nonempty
    cephuser@adm > ceph osd tier cache-mode testpool proxy
    Configurazione del livello di cache
    Figura 18.2: Configurazione del livello di cache
  3. Forzare il pool di cache in modo che tutti gli oggetti vengano spostati nel nuovo pool:

    cephuser@adm > rados -p testpool cache-flush-evict-all
    Svuotamento dei dati
    Figura 18.3: Svuotamento dei dati
  4. Fino a quando lo svuotamento di tutti i dati nel pool con codice di cancellazione non è completato, è necessario specificare un overlay in modo che la ricerca degli oggetti venga eseguita nel pool precedente:

    cephuser@adm > ceph osd tier set-overlay newpool testpool

    Con l'overlay, tutte le operazioni vengono inoltrate al "testpool" replicato precedente:

    Impostazione dell'overlay
    Figura 18.4: Impostazione dell'overlay

    Adesso è possibile commutare tutti i client agli oggetti di accesso nel nuovo pool.

  5. Dopo la migrazione di tutti i dati nel "newpool" con codice di cancellazione, rimuovere l'overlay e il pool di cache "testpool" precedente:

    cephuser@adm > ceph osd tier remove-overlay newpool
    cephuser@adm > ceph osd tier remove newpool testpool
    Completamento della migrazione
    Figura 18.5: Completamento della migrazione
  6. Esegui

    cephuser@adm > ceph tell mon.* injectargs \
     '--mon_debug_unsafe_allow_tier_with_nonempty_snaps=0'

18.6.3 Esecuzione della migrazione di immagini RBD

Di seguito è indicata la modalità consigliata per eseguire la migrazione delle immagini RBD da un pool replicato a un altro.

  1. Interrompere l'accesso dei client (ad esempio le macchine virtuali) all'immagine RBD.

  2. Creare una nuova immagine nel pool di destinazione, con l'elemento superiore impostato sull'immagine di origine:

    cephuser@adm > rbd migration prepare SRC_POOL/IMAGE TARGET_POOL/IMAGE
    Suggerimento
    Suggerimento: migrazione soltanto dei dati a un pool con codice di cancellazione

    Se è necessario eseguire la migrazione soltanto dei dati dell'immagine a un nuovo pool EC e lasciare i metadati nel pool replicato originale, eseguire invece il comando seguente:

    cephuser@adm > rbd migration prepare SRC_POOL/IMAGE \
     --data-pool TARGET_POOL/IMAGE
  3. Concedere ai client l'accesso all'immagine nel pool di destinazione.

  4. Eseguire la migrazione dei dati al pool di destinazione:

    cephuser@adm > rbd migration execute SRC_POOL/IMAGE
  5. Rimuovere l'immagine meno recente:

    cephuser@adm > rbd migration commit SRC_POOL/IMAGE

18.7 Snapshot del pool

Gli snapshot del pool riprendono lo stato dell'interno pool Ceph. Con gli snapshot del pool è possibile mantenere la cronologia dello stato del pool. La creazione di snapshot del pool consuma spazio di storage in modo proporzionale alle dimensioni del pool. Verificare sempre che lo spazio su disco nello spazio di memorizzazione correlato sia sufficiente prima di creare lo snapshot di un pool.

18.7.1 Creazione dello snapshot di un pool

Per creare una snapshot di un pool, eseguire:

cephuser@adm > ceph osd pool mksnap POOL-NAME SNAP-NAME

Esempio:

cephuser@adm > ceph osd pool mksnap pool1 snap1
created pool pool1 snap snap1

18.7.2 Elenco di snapshot di un pool

Per visualizzare un elenco delle snapshot esistenti di un pool, eseguire:

cephuser@adm > rados lssnap -p POOL_NAME

Esempio:

cephuser@adm > rados lssnap -p pool1
1	snap1	2018.12.13 09:36:20
2	snap2	2018.12.13 09:46:03
2 snaps

18.7.3 Rimozione dello snapshot di un pool

Per rimuovere una snapshot di un pool, eseguire:

cephuser@adm > ceph osd pool rmsnap POOL-NAME SNAP-NAME

18.8 Compressione dei dati

Per risparmiare spazio su disco, in BlueStore (ulteriori dettagli nel riferimento Book “Guida alla distribuzione”, Chapter 1 “SES e Ceph”, Section 1.4 “BlueStore”) è disponibile la compressione rapida dei dati. Il rapporto di compressione dipende dai dati memorizzati nel sistema. Tenere presente che per le attività di compressione/decompressione è richiesta una potenza della CPU aggiuntiva.

È possibile configurare la compressione dei dati a livello globale (vedere la Sezione 18.8.3, «Opzioni di compressione globali») e quindi sostituire le impostazioni di compressione specifiche per ciascun pool individuale.

È possibile abilitare o disabilitare la compressione dei dati del pool o modificare l'algoritmo e la modalità di compressione in qualsiasi momento, a prescindere dal fatto che il pool contenga o meno dati.

Dopo aver abilitato la compressione del pool, non verrà applicata alcuna compressione ai dati esistenti.

Dopo aver disabilitato la compressione di un pool, tutti i relativi dati verranno decompressi.

18.8.1 Abilitazione della compressione

Per abilitare la compressione dei dati per un pool denominato POOL_NAME, eseguire il comando seguente:

cephuser@adm > ceph osd pool set POOL_NAME compression_algorithm COMPRESSION_ALGORITHM
cephuser@adm > ceph osd pool set POOL_NAME compression_mode COMPRESSION_MODE
Suggerimento
Suggerimento: disabilitazione della compressione del pool

Per disabilitare la compressione dei dati per un pool, utilizzare "none" come algoritmo di compressione:

cephuser@adm > ceph osd pool set POOL_NAME compression_algorithm none

18.8.2 Opzioni di compressione del pool

Elenco completo delle opzioni di compressione:

compression_algorithm

I valori possibili sono none, zstd, snappy. L'impostazione di default è snappy.

L'algoritmo di compressione da utilizzare dipenda dal caso di utilizzo specifico. Di seguito sono riportati alcuni suggerimenti:

  • Utilizzare il valore di default snappy a meno che non sia necessario modificarlo per qualche motivo.

  • zstd offre un buon rapporto di compressione, ma causa un elevato overhead della CPU durante la compressione di piccole quantità di dati.

  • Eseguire un benchmark di questi algoritmi su un campione dei dati effettivi continuando a osservare la CPU e il consumo di memoria del cluster.

compression_mode

I valori possibili sono none, aggressive, passive, force. L'impostazione di default è none.

  • none: la compressione non viene eseguita mai

  • passive: la compressione viene eseguita se suggerita come COMPRESSIBLE

  • aggressive: la compressione viene eseguita a meno che non sia suggerita come INCOMPRESSIBLE

  • force: la compressione viene eseguita sempre

compression_required_ratio

Valore: doppio, rapporto = SIZE_COMPRESSED / SIZE_ORIGINAL. Il valore di default è 0,875, che indica che l'oggetto non verrà compresso se la compressione non riduce lo spazio occupato di almeno il 12,5%.

Gli oggetti al di sopra di tale rapporto non verranno memorizzati compressi a causa del basso guadagno netto.

compression_max_blob_size

Valore: intero non firmato, dimensioni in byte. Default: 0

Dimensioni massime degli oggetti che vengono compressi.

compression_min_blob_size

Valore: intero non firmato, dimensioni in byte. Default: 0

Dimensioni massime degli oggetti che vengono compressi.

18.8.3 Opzioni di compressione globali

È possibile impostare le seguenti opzioni di configurazione nella configurazione di Ceph e applicarle a tutti gli OSD, non solo a un singolo pool. La configurazione specifica per il pool indicata nella Sezione 18.8.2, «Opzioni di compressione del pool» ha la precedenza.

bluestore_compression_algorithm

Vedere compression_algorithm

bluestore_compression_mode

Vedere compression_mode

bluestore_compression_required_ratio

Vedere compression_required_ratio

bluestore_compression_min_blob_size

Valore: intero non firmato, dimensioni in byte. Default: 0

Dimensioni massime degli oggetti che vengono compressi. L'impostazione viene ignorata per default a favore di bluestore_compression_min_blob_size_hdd e bluestore_compression_min_blob_size_ssd. Ha la precedenza quando viene impostata su un valore diverso da zero.

bluestore_compression_max_blob_size

Valore: intero non firmato, dimensioni in byte. Default: 0

Dimensioni massime degli oggetti compressi prima che vengano suddivisi in porzioni più piccole. L'impostazione viene ignorata per default a favore di bluestore_compression_max_blob_size_hdd e bluestore_compression_max_blob_size_ssd. Ha la precedenza quando viene impostata su un valore diverso da zero.

bluestore_compression_min_blob_size_ssd

Valore: intero non firmato, dimensioni in byte. Default: 8 K

Dimensioni minime degli oggetti che vengono compressi e memorizzati su un'unità SSD.

bluestore_compression_max_blob_size_ssd

Valore: intero non firmato, dimensioni in byte. Default: 64 K

Dimensioni massime degli oggetti compressi e memorizzati nell'unità a stato solito prima che vengano suddivisi in porzioni più piccole.

bluestore_compression_min_blob_size_hdd

Valore: intero non firmato, dimensioni in byte. Default: 128 K

Dimensioni minime degli oggetti che vengono compressi e memorizzati su dischi rigidi.

bluestore_compression_max_blob_size_hdd

Valore: intero non firmato, dimensioni in byte. Default: 512 K

Dimensioni massime degli oggetti compressi e memorizzati nei dischi rigidi prima che vengano suddivisi in porzioni più piccole.

19 Pool con codice di cancellazione

Ceph fornisce un'alternativa alla replica normale dei dati nei pool denominata pool di cancellazione o con codice di cancellazione. I pool di cancellazione non forniscono le funzionalità complete dei pool replicati (ad esempio, non sono in grado di memorizzare i metadati dei pool RBD), ma richiedono meno spazio di storage nominale. Un pool di cancellazione di default con 1 TB di storage di dati richiede 1,5 TB di spazio di storage nominale e prevede un solo errore del disco. Si tratta sicuramente di un vantaggio rispetto al pool replicato, che richiede 2 TB di spazio di storage nominale per lo stesso scopo.

Per ulteriori informazioni sul codice di cancellazione, vedere https://en.wikipedia.org/wiki/Erasure_code.

Per un elenco dei valori del pool relativo ai pool EC, fare riferimento a Valori del pool con codice di cancellazione.

19.1 Prerequisiti dei pool con codice di cancellazione

Per utilizzare il codice di cancellazione, è necessario:

  • Definire una regola di cancellazione nella mappa CRUSH.

  • Definire un profilo con codice di cancellazione che specifichi l'algoritmo da utilizzare.

  • Creare un pool utilizzando la regola e il profilo menzionati in precedenza.

Tenere presente che non sarà possibile modificare il profilo e i relativi dettagli in seguito alla creazione del pool e all'aggiunta di dati.

Assicurarsi che le regole CRUSH per i pool di cancellazione utilizzino indep per step. Per informazioni, vedere Sezione 17.3.2, «firstn e indep».

19.2 Creazione di un pool con codice di cancellazione di esempio

Il pool con codice di cancellazione più semplice equivale a RAID5 e richiede almeno tre host. In questa procedura è illustrato come creare un pool ai fini del test.

  1. Il comando ceph osd pool create viene utilizzato per creare un pool di tipo cancellazione. 12 sta per il numero di gruppi di posizionamento. Con i parametri di default, il pool è in grado di gestire gli errori di un OSD.

    cephuser@adm > ceph osd pool create ecpool 12 12 erasure
    pool 'ecpool' created
  2. La stringa ABCDEFGHI viene scritta in un oggetto denominato NYAN.

    cephuser@adm > echo ABCDEFGHI | rados --pool ecpool put NYAN -
  3. Ai fini del test, adesso è possibile disabilitare gli OSD, ad esempio disconnettendoli dalla rete.

  4. Per verificare se il pool è in grado di gestire gli errori dei dispositivi, è possibile accedere al contenuto del file mediante il comando rados.

    cephuser@adm > rados --pool ecpool get NYAN -
    ABCDEFGHI

19.3 Profili dei codici di cancellazione

Quando si richiama il comando ceph osd pool create per creare un pool di cancellazione, viene utilizzato il profilo di default a meno che non se ne specifichi un altro. I profili definiscono la ridondanza dei dati. A tal fine impostare due parametri, denominati arbitrariamente k ed m. k ed m definiscono il numero di porzioni in cui vengono suddivisi i dati e quante porzioni di codifica vengono create. Le porzioni ridondanti vengono quindi memorizzate in OSD diversi.

Definizioni necessarie per i profili dei pool di cancellazione:

chunk

quando si richiama la funzione di codifica, vengono restituite porzioni della stessa dimensione: le porzioni di dati che è possibile concatenare per ricostruire l'oggetto originale e le porzioni di codifica che è possibile utilizzare per ricompilare una porzione persa.

k

il numero di porzioni di dati, ovvero il numero di porzioni in cui è suddiviso l'oggetto originale. Ad esempio, se k = 2, un oggetto da 10 KB verrà suddiviso in k oggetti da 5 KB ciascuno. Il valore min_size di default nei pool con codice di cancellazione è k + 1. Tuttavia, si consiglia di impostare il valore min_size su almeno k + 2 per evitare la perdita di dati e operazioni di scrittura.

m

il numero di porzioni di codifica, ovvero il numero di porzioni aggiuntive calcolato dalle funzioni di codifica. Esistono 2 porzioni di codifica, vale a dire che 2 OSD possono essere fuori senza perdere dati.

crush-failure-domain

definisce a quali dispositivi vengono distribuite le porzioni. È necessario impostare come valore un tipo di compartimento. Per tutti i tipi di compartimenti, vedere Sezione 17.2, «Compartimenti». Se il dominio dell'errore è rack, le porzioni saranno memorizzate in rack diversi al fine di aumentare la resilienza in caso di errore dei rack. Tenere presente che ciò richiede dei rack k+m.

Con il profilo con codice di cancellazione di default utilizzato in Sezione 19.2, «Creazione di un pool con codice di cancellazione di esempio», i dati del cluster non andranno persi in caso di errore di un singolo OSD o di un host. Pertanto, per memorizzare 1 TB di dati è necessario uno spazio di memorizzazione effettivo di altri 0,5 TB. Ciò vuol dire che per 1 TB di dati sono necessari 1,5 TB di spazio di storage nominale (perché k=2, m=1). Ciò equivale a una normale configurazione RAID 5. Un pool replicato necessita invece di 2 TB di spazio di storage nominale per memorizzare 1 TB di dati.

È possibile visualizzare le impostazioni del profilo di default con:

cephuser@adm > ceph osd erasure-code-profile get default
directory=.libs
k=2
m=1
plugin=jerasure
crush-failure-domain=host
technique=reed_sol_van

È importante scegliere il profilo giusto perché non è possibile modificarlo dopo la creazione del pool. È necessario creare un nuovo pool con un profilo diverso e trasferirvi tutti gli oggetti del pool precedente (vedere la Sezione 18.6, «Migrazione del pool»).

I parametri più importanti del profilo sono k, m e crush-failure-domain in quanto definiscono l'overhead di memorizzazione e la durata dei dati. Ad esempio, se l'architettura desiderata deve sostenere la perdita di due rack con un overhead di storage del 66%, è possibile definire il profilo seguente. Tenere presente che ciò si applica solo alle mappe CRUSH contenenti compartimenti di tipo "rack":

cephuser@adm > ceph osd erasure-code-profile set myprofile \
   k=3 \
   m=2 \
   crush-failure-domain=rack

È possibile ripetere l'esempio della Sezione 19.2, «Creazione di un pool con codice di cancellazione di esempio» con questo nuovo profilo:

cephuser@adm > ceph osd pool create ecpool 12 12 erasure myprofile
cephuser@adm > echo ABCDEFGHI | rados --pool ecpool put NYAN -
cephuser@adm > rados --pool ecpool get NYAN -
ABCDEFGHI

L'oggetto NYAN verrà diviso in tre (k=3) e verranno create due porzioni aggiuntive (m=2). Il valore di m definisce quanti OSD è possibile perdere simultaneamente senza perdere alcun dato. Con il comando crush-failure-domain=rack verrà creato un set di regole CRUSH che garantisce che le due porzioni non vengano memorizzate nello stesso rack.

Image

19.3.1 Creazione di un nuovo profilo con codice di cancellazione

Il comando seguente consente di creare un nuovo profilo con codice di cancellazione:

root # ceph osd erasure-code-profile set NAME \
 directory=DIRECTORY \
 plugin=PLUGIN \
 stripe_unit=STRIPE_UNIT \
 KEY=VALUE ... \
 --force
DIRECTORY

Opzionale. Impostare il nome della directory da cui viene caricato il plug-in del codice di cancellazione. Quello di default è /usr/lib/ceph/erasure-code.

PLUGIN

Opzionale. Utilizzare il plug-in del codice di cancellazione per calcolare le porzioni di codifica e recuperare quelle mancanti. I plug-in disponibili sono "jerasure", "isa", "lrc" e "shes". Il plug-in di default è "jerasure".

STRIPE_UNIT

Opzionale. La quantità di dati in una porzione di dati per segmento. Ad esempio, un profilo con 2 porzioni di dati e stripe_unit=4K inserisce l'intervallo 0-4K nella porzione 0, 4K-8K nella porzione 1 e quindi 8K-12K nuovamente nella porzione 0. Per le migliori prestazioni, deve essere un multiplo di 4K. Il valore di default viene estrapolato dall'opzione di configurazione di monitoraggio osd_pool_erasure_code_stripe_unit al momento della creazione di un pool. Il valore "stripe_width" di un pool che utilizza questo profilo sarà il numero delle porzioni di dati moltiplicato per questo valore di "stripe_unit".

KEY=VALUE

Le coppie di opzioni di chiavi/valori specifiche per il plug-in del codice di cancellazione selezionato.

--force

Opzionale. Ignora un profilo esistente con lo stesso nome e consente l'impostazione di una stripe_unit non allineata a 4K.

19.3.2 Rimozione di un profilo con codice di cancellazione

Il comando seguente consente di rimuovere un profilo con codice di cancellazione identificato dal relativo nome (NAME):

root # ceph osd erasure-code-profile rm NAME
Importante
Importante

Se è presente un pool che fa riferimento al profilo, l'eliminazione non riesce.

19.3.3 Visualizzazione dei dettagli di un profilo con codice di cancellazione

Il comando seguente consente di visualizzare i dettagli di un profilo con codice di cancellazione identificato dal relativo nome (NAME):

root # ceph osd erasure-code-profile get NAME

19.3.4 Elenco dei profili con codice di cancellazione

Il comando seguente consente di visualizzare un elenco dei nomi di tutti i profili con codice di cancellazione:

root # ceph osd erasure-code-profile ls

19.4 Contrassegno dei pool con codice di cancellazione con il dispositivo di blocco RADOS (RADOS Block Device, RBD)

Per contrassegnare un pool EC come pool RBD, applicare il rispettivo tag:

cephuser@adm > ceph osd pool application enable rbd ec_pool_name

RBD può memorizzare data immagine nei pool EC. Tuttavia, l'intestazione di immagine e i metadati devono comunque essere memorizzati in un pool replicato. A tal fine, presupporre di disporre di un pool denominato "rbd":

cephuser@adm > rbd create rbd/image_name --size 1T --data-pool ec_pool_name

È possibile utilizzare normalmente l'immagine come qualsiasi altra, con la differenza che tutti i dati saranno memorizzati nel pool ec_pool_name al posto del pool "rbd".

20 Dispositivo di blocco RADOS (RADOS Block Device, RBD)

Un blocco è una sequenza di byte, ad esempio un blocco di dati da 4 MB. Le interfacce di memorizzazione basate su blocchi rappresentano il modo più comune per memorizzare i dati con supporti rotanti, come dischi rigidi, CD, dischi floppy. L'ubiquità delle interfacce dei dispositivi di blocco rende un dispositivo di blocco virtuale un candidato ideale per interagire con un sistema di memorizzazione di massa come Ceph.

I dispositivi di blocco Ceph consentono la condivisione di risorse fisiche e sono ridimensionabili. Questi dispositivi memorizzano i dati suddivisi in più OSD in un cluster Ceph. I dispositivi di blocco Ceph sfruttano le funzionalità RADOS come la creazione di snapshot, replica e coerenza. I RADOS Block Device (RBD, dispositivi di blocco RADOS) di Ceph interagiscono con gli OSD utilizzando i moduli del kernel o la libreria librbd.

Protocollo RADOS
Figura 20.1: Protocollo RADOS

I dispositivi di blocco Ceph offrono prestazioni elevate con scalabilità infinita ai moduli del kernel. Supportano soluzioni di virtualizzazione come QEMU o sistemi di calcolo basati su cloud come OpenStack che fanno affidamento su libvirt. È possibile utilizzare lo stesso cluster per attivare Object Gateway, CephFS e RADOS Block Device (dispositivi di blocco RADOS) simultaneamente.

20.1 Comandi dei dispositivi di blocco

Il comando rbd consente di creare, elencare, analizzare e rimuovere immagini dei dispositivi di blocco. È inoltre possibile utilizzarlo per clonare immagini, creare snapshot, eseguire il rollback di un'immagine in uno snapshot o visualizzare uno snapshot.

20.1.1 Creazione di un'immagine del dispositivo di blocco in un pool replicato

Prima che sia possibile aggiungere un dispositivo di blocco a un client, è necessario creare un'immagine correlata in un pool esistente (vedere il Capitolo 18, Gestione dei pool di memorizzazione):

cephuser@adm > rbd create --size MEGABYTES POOL-NAME/IMAGE-NAME

Ad esempio, per creare un'immagine da 1 GB denominata "myimage" le cui informazioni vengono memorizzate in un pool denominato "mypool", eseguire quanto riportato di seguito:

cephuser@adm > rbd create --size 1024 mypool/myimage
Suggerimento
Suggerimento: unità di dimensioni immagine

Se si omette la scorciatoia dell'unità di dimensioni ("G" o "T"), le dimensioni dell'immagine vengono indicate in megabyte. Utilizzare "G" o "T" dopo le dimensioni per specificare gigabyte o terabyte.

20.1.2 Creazione di un'immagine del dispositivo di blocco in un pool con codice di cancellazione

È possibile memorizzare i dati dell'immagine di un dispositivo di blocco direttamente nei pool con codice di cancellazione (EC, Erasure Coded). L'immagine di un dispositivo di blocco RADOS è costituita da due parti, dati e metadati. È possibile memorizzare solo la parte dati dell'immagine di un dispositivo di blocco RADOS (RADOS Block Device, RBD) in un pool EC. Il flag overwrite del pool deve essere impostato su true e ciò è possibile soltanto se tutti gli OSD in cui è memorizzato il pool utilizzano BlueStore.

Non è possibile memorizzare la parte metadati dell'immagine in un pool EC. È necessario specificare il pool replicato per memorizzare i metadati dell'immagine con l'opzione --pool= del comando rbd create oppure aggiungendo pool/ come prefisso del nome dell'immagine.

Creare un pool EC:

cephuser@adm > ceph osd pool create EC_POOL 12 12 erasure
cephuser@adm > ceph osd pool set EC_POOL allow_ec_overwrites true

Specificare il pool replicato per la memorizzazione dei metadati:

cephuser@adm > rbd create IMAGE_NAME --size=1G --data-pool EC_POOL --pool=POOL

Oppure:

cephuser@adm > rbd create POOL/IMAGE_NAME --size=1G --data-pool EC_POOL

20.1.3 Elenco delle immagini dei dispositivi di blocco

Per visualizzare un elenco dei dispositivi di blocco in un pool denominato "mypool", eseguire quanto riportato di seguito:

cephuser@adm > rbd ls mypool

20.1.4 Recupero delle informazioni sull'immagine

Per recuperare le informazioni da un'immagine "myimage" in un pool denominato "mypool", eseguire quanto riportato di seguito:

cephuser@adm > rbd info mypool/myimage

20.1.5 Ridimensionamento di un'immagine del dispositivo di blocco

Le immagini del RADOS Block Device (dispositivo di blocco RADOS) sono sottoposte a thin provisioning, non utilizzano effettivamente alcuno spazio di memorizzazione fisico fino a quando non si inizia a salvare i dati in esse. Dispongono tuttavia di una capacità massima che è possibile impostare con l'opzione --size. Se si desidera aumentare (o diminuire) le dimensioni massime di un'immagine, eseguire quanto riportato di seguito:

cephuser@adm > rbd resize --size 2048 POOL_NAME/IMAGE_NAME # to increase
cephuser@adm > rbd resize --size 2048 POOL_NAME/IMAGE_NAME --allow-shrink # to decrease

20.1.6 Rimozione di un'immagine del dispositivo di blocco

Per rimuovere un dispositivo di blocco che corrisponde a un'immagine "myimage" in un pool denominato "mypool", eseguire quanto riportato di seguito:

cephuser@adm > rbd rm mypool/myimage

20.2 Montaggio e smontaggio

Dopo aver creato un dispositivo di blocco RADOS, è possibile utilizzarlo come qualsiasi altro dispositivo disco: formattarlo, montarlo in modo che sia in grado di scambiare file e smontarlo al termine dell'operazione.

L'impostazione di default del comando rbd è configurata sull'accesso al cluster tramite l'account utente admin di Ceph, che dispone dell'accesso amministrativo completo al cluster. Con questa impostazione vi è il rischio che gli utenti possano causare involontariamente danni, come quando si esegue il login come root a una workstation Linux. Pertanto, è preferibile creare account utente con meno privilegi e utilizzare tali account per il normale accesso in lettura/scrittura al dispositivo di blocco RADOS (RADOS Block Device, RBD).

20.2.1 Creazione di un account utente Ceph

Per creare un nuovo account utente con le funzionalità Ceph Manager, Ceph Monitor e Ceph OSD, utilizzare il comando ceph con il sottocomando auth get-or-create:

cephuser@adm > ceph auth get-or-create client.ID mon 'profile rbd' osd 'profile profile name \
  [pool=pool-name] [, profile ...]' mgr 'profile rbd [pool=pool-name]'

Ad esempio, per creare un utente denominato qemu con accesso in lettura-scrittura al pool vms e accesso in sola lettura al pool images, eseguire quanto riportato di seguito:

ceph auth get-or-create client.qemu mon 'profile rbd' osd 'profile rbd pool=vms, profile rbd-read-only pool=images' \
  mgr 'profile rbd pool=images'

L'output del comando ceph auth get-or-create sarà il portachiavi dell'utente specificato ed è possibile scriverlo in /etc/ceph/ceph.client.ID.keyring.

Nota
Nota

Quando si utilizza il comando rbd, è possibile specificare l'ID utente fornendo l'argomento facoltativo --id ID.

Per ulteriori dettagli sulla gestione degli account utente Ceph, fare riferimento al Capitolo 30, Autenticazione con cephx.

20.2.2 Autenticazione utente

Per specificare un nome utente, utilizzare --id user-name. Se si utilizza l'autenticazione cephx, è necessario specificare anche un segreto. Quest'ultimo potrebbe essere ricavato da un portachiavi o da un file contenente il segreto:

cephuser@adm > rbd device map --pool rbd myimage --id admin --keyring /path/to/keyring

oppure

cephuser@adm > rbd device map --pool rbd myimage --id admin --keyfile /path/to/file

20.2.3 Preparazione di un dispositivo di blocco RADOS (RADOS Block Device, RBD) per l'uso

  1. Accertarsi che nel cluster Ceph sia incluso un pool con l'immagine disco che si desidera mappare. Presupporre che il pool sia denominato mypool e l'immagine myimage.

    cephuser@adm > rbd list mypool
  2. Mappare l'immagine nel nuovo dispositivo di blocco:

    cephuser@adm > rbd device map --pool mypool myimage
  3. Elencare tutti i dispositivi mappati:

    cephuser@adm > rbd device list
    id pool   image   snap device
    0  mypool myimage -    /dev/rbd0

    Il dispositivo che si desidera utilizzare è /dev/rbd0.

    Suggerimento
    Suggerimento: percorso di dispositivo RBD

    Al posto di /dev/rbdDEVICE_NUMBER, è possibile utilizzare /dev/rbd/POOL_NAME/IMAGE_NAME come percorso di dispositivo permanente. Esempio:

           /dev/rbd/mypool/myimage
  4. Creare un file system XFS sul 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. Sostituire /mnt con il proprio punto di montaggio, montare il dispositivo e verificare che sia montato correttamente:

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

    Adesso è possibile spostare i dati nel e dal dispositivo come se questo fosse una directory locale.

    Suggerimento
    Suggerimento: aumento delle dimensioni del dispositivo RBD

    Se le dimensioni del dispositivo RBD non sono più sufficienti, è possibile aumentarle.

    1. Aumentare le dimensioni dell'immagine RBD, ad esempio fino a 10 GB.

      cephuser@adm > rbd resize --size 10000 mypool/myimage
               Resizing image: 100% complete...done.
    2. Accrescere il file system in modo da riempire le nuove dimensioni del dispositivo:

      root # xfs_growfs /mnt
      [...]
      data blocks changed from 2097152 to 2560000
  6. Una volta terminato l'accesso al dispositivo, è possibile annullare la mappatura e smontarlo.

    cephuser@adm > rbd device unmap /dev/rbd0
    root # unmount /mnt
Suggerimento
Suggerimento: montaggio e smontaggio manuali

Per semplificare i processi di mappatura e montaggio degli RBD dopo l'avvio e di smontaggio dopo l'arresto, vengono forniti uno script rbdmap e un'unità systemd. Vedere Sezione 20.2.4, «rbdmap: mappatura dei dispositivi RBD all'avvio».

20.2.4 rbdmap: mappatura dei dispositivi RBD all'avvio

rbdmap è uno script della shell che consente di automatizzare le operazioni rbd map e rbd device unmap in una o più immagini RBD. Sebbene sia possibile eseguire manualmente lo script in qualsiasi momento, i principali vantaggi sono la mappatura automatica e il montaggio di immagini RBD all'avvio (e lo smontaggio e l'annullamento della mappatura all'arresto), attivati dal sistema Init. A tal fine è incluso un file di unità systemd, rbdmap.service con il pacchetto ceph-common.

Lo script impiega un singolo argomento, che può essere map o unmap. In entrambi i casi lo script analizza sintatticamente un file di configurazione. Il valore di default è /etc/ceph/rbdmap, ma è possibile ignorarlo tramite una variabile di ambiente RBDMAPFILE. Ciascuna riga del file di configurazione corrisponde a un'immagine RBD che deve anche essere mappata o non mappata.

Il file di configurazione presenta il seguente formato:

image_specification rbd_options
image_specification

Percorso di un'immagine in un pool. Specificare come pool_name/image_name.

rbd_options

Elenco di parametri facoltativo da passare al comando rbd device map sottostante. Questi parametri e i rispettivi valori devono essere specificati come stringa separata da virgola, ad esempio:

PARAM1=VAL1,PARAM2=VAL2,...

Nell'esempio con lo script rbdmap viene eseguito il seguente comando:

cephuser@adm > rbd device map POOL_NAME/IMAGE_NAME --PARAM1 VAL1 --PARAM2 VAL2

Nell'esempio seguente è possibile vedere come specificare un nome utente e un portachiavi con un segreto corrispondente:

cephuser@adm > rbdmap device map mypool/myimage id=rbd_user,keyring=/etc/ceph/ceph.client.rbd.keyring

Quando viene eseguito come rbdmap map, lo script analizza sintatticamente il file di configurazione e, per ogni immagine RBD specificata, prima tenta di mappare l'immagine (con il comando rbd device map), quindi ne esegue il montaggio.

Quando eseguito come rbdmap unmap, le immagini elencate nel file di configurazione il montaggio e la mappatura verranno annullati.

rbdmap unmap-all tenta di smontare e successivamente di annullare la mappatura di tutte le immagini RBD attualmente mappate, indipendentemente dalla loro presenza nell'elenco del file di configurazione.

Se ha esito positivo, l'operazione rbd device map mappa l'immagine a un dispositivo /dev/rbdX, quindi viene attivata una regola udev per creare un collegamento simbolico del nome del dispositivo /dev/rbd/pool_name/image_name che punta al dispositivo realmente mappato.

Affinché il montaggio e lo smontaggio abbiano esito positivo, il nome del dispositivo "intuitivo" deve avere una voce corrispondente in /etc/fstab. Quando si scrivono voci /etc/fstab per le immagini RBD, specificare l'opzione di montaggio "noauto" (o "nofail"). In tal modo si impedisce al sistema Init di tentare di montare il dispositivo troppo presto, perfino prima dell'esistenza del dispositivo in questione, poiché di norma rbdmap.service viene attivato piuttosto tardi nella sequenza di avvio.

Per un elenco completo di opzioni rbd, vedere la documentazione relativa a rbd (man 8 rbd).

Per alcuni esempi di utilizzo di rbdmap, vedere la documentazione relativa a rbdmap (man 8 rbdmap).

20.2.5 Aumento delle dimensioni dei dispositivi RBD

Se le dimensioni del dispositivo RBD non sono più sufficienti, è possibile aumentarle.

  1. Aumentare le dimensioni dell'immagine RBD, ad esempio fino a 10 GB.

    cephuser@adm > rbd resize --size 10000 mypool/myimage
     Resizing image: 100% complete...done.
  2. Accrescere il file system in modo da riempire le nuove dimensioni del dispositivo.

    root # xfs_growfs /mnt
     [...]
     data blocks changed from 2097152 to 2560000

20.3 Snapshot

Uno snapshot RBD è uno snapshot di un'immagine del RADOS Block Device (dispositivo di blocco RADOS). Gli snapshot consentono di conservare la cronologia dello stato dell'immagine. Ceph supporta anche il layering di snapshot, che consente di clonare rapidamente e facilmente immagini VM. Ceph supporta gli snapshot dei dispositivi di blocco mediante l'uso del comando rbd e molte interfacce di livello superiore, tra cui QEMU, libvirt, OpenStack e CloudStack.

Nota
Nota

Interrompere le operazioni di input e output e svuotare tutte le operazioni di scrittura in sospeso prima di creare una snapshot di un'immagine. Se l'immagine contiene un file system, questo deve presentare uno stato coerente al momento della creazione della snapshot.

20.3.1 Abilitazione e configurazione di cephx

Quando cephx è abilitato, è necessario specificare un nome o un ID utente e un percorso del portachiavi contenente la chiave corrispondente dell'utente. Per ulteriori informazioni, vedere il Capitolo 30, Autenticazione con cephx. È inoltre possibile aggiungere la variabile di ambiente CEPH_ARGS per evitare di immettere di nuovo i seguenti parametri.

cephuser@adm > rbd --id user-ID --keyring=/path/to/secret commands
cephuser@adm > rbd --name username --keyring=/path/to/secret commands

Esempio:

cephuser@adm > rbd --id admin --keyring=/etc/ceph/ceph.keyring commands
cephuser@adm > rbd --name client.admin --keyring=/etc/ceph/ceph.keyring commands
Suggerimento
Suggerimento

Aggiungere l'utente e il segreto nella variabile di ambiente CEPH_ARGS in modo che non sia necessario immetterli ogni volta.

20.3.2 Nozioni di base sugli snapshot

Nelle procedure seguenti è dimostrato come creare, elencare e rimuovere snapshot mediante l'uso del comando rbd sulla riga di comando.

20.3.2.1 Creazione di snapshot

Per creare uno snapshot con rbd, specificare l'opzione snap create, il nome pool e il nome immagine.

cephuser@adm > rbd --pool pool-name snap create --snap snap-name image-name
cephuser@adm > rbd snap create pool-name/image-name@snap-name

Esempio:

cephuser@adm > rbd --pool rbd snap create --snap snapshot1 image1
cephuser@adm > rbd snap create rbd/image1@snapshot1

20.3.2.2 Elenco di snapshot

Per elencare gli snapshot di un'immagine, specificare il nome pool e il nome immagine.

cephuser@adm > rbd --pool pool-name snap ls image-name
cephuser@adm > rbd snap ls pool-name/image-name

Esempio:

cephuser@adm > rbd --pool rbd snap ls image1
cephuser@adm > rbd snap ls rbd/image1

20.3.2.3 Rollback di snapshot

Per eseguire il rollback a uno snapshot con rbd, specificare l'opzione snap rollback, il nome pool, il nome immagine e il nome snapshot.

cephuser@adm > rbd --pool pool-name snap rollback --snap snap-name image-name
cephuser@adm > rbd snap rollback pool-name/image-name@snap-name

Esempio:

cephuser@adm > rbd --pool pool1 snap rollback --snap snapshot1 image1
cephuser@adm > rbd snap rollback pool1/image1@snapshot1
Nota
Nota

Eseguire il rollback di un'immagine a uno snapshot significa sovrascrivere la versione attuale dell'immagine con i dati provenienti da uno snapshot. La durata di esecuzione di un rollback aumenta proporzionalmente alle dimensioni dell'immagine. È più rapido eseguire la clonazione da uno snapshot piuttosto che eseguire il rollback di un'immagine a uno snapshot; questo è inoltre il metodo preferito per tornare a uno stato preesistente.

20.3.2.4 Eliminazione di uno snapshot

Per eliminare uno snapshot con rbd, specificare l'opzione snap rm, il nome pool, il nome immagine e il nome utente.

cephuser@adm > rbd --pool pool-name snap rm --snap snap-name image-name
cephuser@adm > rbd snap rm pool-name/image-name@snap-name

Esempio:

cephuser@adm > rbd --pool pool1 snap rm --snap snapshot1 image1
cephuser@adm > rbd snap rm pool1/image1@snapshot1
Nota
Nota

Nei Ceph OSD i dati vengono eliminati in modo asincrono, quindi con l'eliminazione di uno snapshot non si libera immediatamente spazio su disco.

20.3.2.5 Eliminazione definitiva di snapshot

Per eliminare tutti gli snapshot di un'immagine con rbd, specificare l'opzione snap purge e il nome immagine.

cephuser@adm > rbd --pool pool-name snap purge image-name
cephuser@adm > rbd snap purge pool-name/image-name

Esempio:

cephuser@adm > rbd --pool pool1 snap purge image1
cephuser@adm > rbd snap purge pool1/image1

20.3.3 Layering degli snapshot

Ceph supporta la creazione di più cloni copia su scrittura (copy-on-write, COW) di uno snapshot del dispositivo di blocco. Il layering degli snapshot consente ai client dei dispositivi di blocco Ceph di creare immagini molto rapidamente. Ad esempio, si può creare un'immagine del dispositivo di blocco con una Linux VM scritta al suo interno, quindi eseguire lo snapshot dell'immagine, proteggere lo snapshot e creare tutti i cloni copia su scrittura desiderati. Poiché gli snapshot sono di sola lettura, la clonazione di uno di essi semplifica la semantica e consente quindi di creare i cloni rapidamente.

Nota
Nota

I termini "parent" e "child" menzionati negli esempi di riga di comando riportati sotto significano uno snapshot del dispositivo di blocco Ceph (parent) e l'immagine corrispondente clonata dallo snapshot (child).

In ciascuna immagine clonata (child) è memorizzato il rifermento alla rispettiva immagine superiore, che consente all'immagine clonata di aprire e leggere lo snapshot superiore.

Un clone COW di uno snapshot si comporta esattamente come qualsiasi altra immagine del dispositivo di blocco Ceph. Nelle immagini clonate è possibile eseguire operazioni di lettura e scrittura ed è possibile clonarle e ridimensionarle. Con le immagini clonate non esistono restrizioni speciali. Il clone copia su scrittura di uno snapshot si riferisce tuttavia allo snapshot, quindi è necessario proteggere quest'ultimo prima di clonarlo.

Nota
Nota: opzione --image-format 1 non supportata

Non è possibile creare snapshot di immagini create con l'opzione rbd create --image-format 1 obsoleta. Ceph supporta soltanto la clonazione delle immagini format 2 di default.

20.3.3.1 Introduzione al layering

Il layering dei dispositivi di blocco Ceph è un processo semplice. È necessario disporre di un'immagine, creare uno snapshot dell'immagine, proteggere lo snapshot. Dopo aver eseguito questi passaggi, è possibile iniziare la clonazione dello snapshot.

L'immagine clonata fa riferimento allo snapshot superiore e include l'ID pool, l'ID immagine e l'ID snapshot. L'inclusione dell'ID pool significa che è possibile clonare snapshot da un pool nelle immagini in un altro pool.

  • Modello di immagine: un caso comune di layering dei dispositivi di blocco consiste nel creare un'immagine master e uno snapshot che funge da modello per i cloni. Ad esempio, un utente può creare un'immagine per una distribuzione Linux (ad esempio, SUSE Linux Enterprise Server) e creare uno snapshot corrispondente. Periodicamente, l'utente può aggiornare l'immagine e creare un nuovo snapshot (ad esempio, zypper ref && zypper patch seguito da rbd snap create). Ma mano che l'immagine matura, l'utente può clonare qualsiasi snapshot.

  • Modello esteso: un caso più avanzato consiste nell'estensione di un'immagine modello che fornisce ulteriori informazioni rispetto all'immagine di base. Ad esempio, un utente può clonare un'immagine (un modello VM) e installare un software diverso (ad esempio un database, un sistema di gestione di contenuti o un sistema di analisi) ed eseguire quindi lo snapshot dell'immagine estesa, che a sua volta è possibile aggiornare allo stesso modo dell'immagine di base.

  • Pool di modelli: un metodo per utilizzare il layering dei dispositivi di blocco consiste nel creare un pool contenente immagini master che fungono da modelli e snapshot di tali modelli. È quindi possibile estendere i privilegi di sola lettura agli utenti in modo che possano clonare gli snapshot senza doverli scrivere o eseguire nel pool.

  • Migrazione/recupero dell'immagine: un metodo per utilizzare il layering dei dispositivi di blocco consiste nell'eseguire la migrazione o il recupero dei dati da un pool in un altro.

20.3.3.2 Protezione di uno snapshot

I cloni accedono agli snapshot superiori. Tutti i cloni verrebbero interrotti se un utente eliminasse inavvertitamente lo snapshot superiore. Per impedire la perdita di dati, è necessario proteggere lo snapshot prima di poterlo clonare.

cephuser@adm > rbd --pool pool-name snap protect \
 --image image-name --snap snapshot-name
cephuser@adm > rbd snap protect pool-name/image-name@snapshot-name

Esempio:

cephuser@adm > rbd --pool pool1 snap protect --image image1 --snap snapshot1
cephuser@adm > rbd snap protect pool1/image1@snapshot1
Nota
Nota

Non è possibile eliminare uno snapshot protetto.

20.3.3.3 Clonazione di uno snapshot

Per clonare uno snapshot, è necessario specificare il pool superiore, l'immagine e lo snapshot, il pool secondario e il nome immagine. È necessario proteggere lo snapshot prima di poterlo clonare.

cephuser@adm > rbd clone --pool pool-name --image parent-image \
 --snap snap-name --dest-pool pool-name \
 --dest child-image
cephuser@adm > rbd clone pool-name/parent-image@snap-name \
pool-name/child-image-name

Esempio:

cephuser@adm > rbd clone pool1/image1@snapshot1 pool1/image2
Nota
Nota

Si può clonare uno snapshot da un pool in un'immagine in un altro pool. Ad esempio, si possono mantenere immagini e snapshot di sola lettura come modelli in un pool e cloni scrivibili in un altro pool.

20.3.3.4 Annullamento della protezione di uno snapshot

Prima di poter eliminare uno snapshot, è necessario annullarne la protezione. Inoltre, non è possibile eliminare snapshot con riferimenti dai cloni. È necessario appiattire ciascun clone di uno snapshot prima di poter eliminare quest'ultimo.

cephuser@adm > rbd --pool pool-name snap unprotect --image image-name \
 --snap snapshot-name
cephuser@adm > rbd snap unprotect pool-name/image-name@snapshot-name

Esempio:

cephuser@adm > rbd --pool pool1 snap unprotect --image image1 --snap snapshot1
cephuser@adm > rbd snap unprotect pool1/image1@snapshot1

20.3.3.5 Elenco degli elementi secondari di uno snapshot

Per elencare gli elementi secondari di uno snapshot, eseguire quanto riportato di seguito:

cephuser@adm > rbd --pool pool-name children --image image-name --snap snap-name
cephuser@adm > rbd children pool-name/image-name@snapshot-name

Esempio:

cephuser@adm > rbd --pool pool1 children --image image1 --snap snapshot1
cephuser@adm > rbd children pool1/image1@snapshot1

20.3.3.6 Appiattimento di un'immagine clonata

Le immagini clonate mantengono un riferimento allo snapshot superiore. Quando si rimuove il riferimento dal clone secondario nello parent superiore, di fatto si "appiattisce" l'immagine copiando le informazioni dallo snapshot al clone. La durata di appiattimento di un clone aumenta proporzionalmente alle dimensioni dello snapshot. Per eliminare uno snapshot, prima è necessario appiattire le immagini secondarie.

cephuser@adm > rbd --pool pool-name flatten --image image-name
cephuser@adm > rbd flatten pool-name/image-name

Esempio:

cephuser@adm > rbd --pool pool1 flatten --image image1
cephuser@adm > rbd flatten pool1/image1
Nota
Nota

Poiché un'immagine appiattita contiene tutte le informazioni provenienti dallo snapshot, questa occuperà uno spazio di memorizzazione maggiore rispetto a un clone su più strati.

20.4 Copie speculari delle immagini RBD

È possibile eseguire la copia speculare delle immagini RBD in modo asincrono tra due cluster Ceph. Questa funzionalità è disponibile in due modalità:

Basata sul journal

Questa modalità utilizza la funzione di journaling dell'immagine RBD per assicurare la replica temporizzata e con coerenza per arresto anomalo tra cluster. Prima di modificare l'immagine effettiva, ogni operazione di scrittura sull'immagine RBD viene innanzitutto registrata sul journal associato. Il cluster remote leggerà dal journal e riprodurrà gli aggiornamenti nella relativa copia locale dell'immagine. Dal momento che ogni operazione di scrittura sull'immagine RBD risulta in due operazioni di scrittura sul cluster Ceph, prevedere un raddoppiamento delle latenze di scrittura quando si utilizza la funzione di journaling dell'immagine RBD.

Basata su snapshot

Questa modalità utilizza snapshot di copia speculare dell'immagine RBD pianificati periodicamente o creati manualmente per eseguire la replica delle immagini RBD con coerenza per arresto anomalo tra cluster. Il cluster remote determinerà la presenza di eventuali aggiornamenti dei dati o dei metadati tra due snapshot di copia speculare e copierà i valori differenziali nella relativa copia locale dell'immagine. Con la funzione fast-diff dell'immagine RBD, è possibile calcolare rapidamente i blocchi di dati aggiornati senza dover effettuare la scansione dell'intera immagine RBD. Dal momento che questa modalità non garantisce coerenza temporizzata, sarà necessario sincronizzare il valore differenziale completo dello snapshot prima dell'uso in uno scenario di failover. Gli eventuali valori differenziali dello snapshot applicati parzialmente verranno sottoposti a rollback sull'ultimo snapshot di cui è stata completata la sincronizzazione.

La copia speculare è configurata per ogni singolo pool nei cluster peer e può essere configurata su un sottoinsieme specifico di immagini all'interno del pool o in modo che venga eseguita automaticamente la copia speculare di tutte le immagini di un pool quando è in uso soltanto la copia speculare basata sul journal. Per la configurazione della copia speculare si utilizza il comando rbd. Il daemon rbd-mirror è responsabile del pull degli aggiornamenti delle immagini dal cluster peer remote e della loro applicazione all'immagine nel cluster local.

A seconda delle necessità di replica, è possibile configurare la copia speculare RBD sulla replica a una o a due vie:

Replica a una via

Quando la copia speculare dei dati avviene soltanto da un cluster primario a uno secondario, il daemon rbd-mirror vene eseguito solo sul cluster secondario.

Replica a due vie

Quando la copia speculare dei dati avviene dalle immagini primarie su un cluster alle immagini non primarie su un altro cluster (e viceversa), il daemon rbd-mirror viene eseguito su entrambi i cluster.

Importante
Importante

Ogni istanza del daemon rbd-mirror deve essere in grado di connettersi contemporaneamente a entrambi i cluster local e remote Ceph. Ad esempio, a tutti i monitor e agli host OSD. Inoltre, la larghezza di banda della rete tra i due data center deve essere sufficiente per gestire il workload della copia speculare.

20.4.1 Configurazione del pool

Nelle procedure seguenti è illustrato come eseguire task amministrativi di base per configurare la copia speculare tramite il comando rbd. La copia speculare è configurata per ogni singolo pool nei cluster Ceph.

È necessario eseguire i passaggi della configurazione del pool su entrambi i cluster peer. Per maggior chiarezza, in queste procedure si presuppone che due cluster, denominati local e remote, siano accessibili da un singolo host.

Vedere la documentazione relativa a rbd (man 8 rbd) per ulteriori dettagli su come connettersi a cluster Ceph diversi.

Suggerimento
Suggerimento: cluster multipli

Il nome del cluster negli esempi seguenti corrisponde a un file di configurazione Ceph omonimo /etc/ceph/remote.conf e al file del portachiavi Ceph omonimo /etc/ceph/remote.client.admin.keyring.

20.4.1.1 Abilitazione della copia speculare su un pool

Per abilitare la copia speculare su un pool, specificare il sottocomando mirror pool enable, il nome pool e la modalità di esecuzione di copia speculare. La modalità di esecuzione di copia speculare può essere "pool" oppure "image":

pool

Tutte le immagini nel pool in cui è abilitata la funzione di journaling vengono sottoposte a copia speculare.

immagine

La copia speculare deve essere abilitata esplicitamente su ciascuna immagine. Consultare Sezione 20.4.2.1, «Abilitazione della copia speculare dell'immagine» per maggiori informazioni.

Esempio:

cephuser@adm > rbd --cluster local mirror pool enable POOL_NAME pool
cephuser@adm > rbd --cluster remote mirror pool enable POOL_NAME pool

20.4.1.2 Disabilitazione della copia speculare

Per disabilitare la copia speculare su un pool, specificare il sottocomando mirror pool disable e il nome pool. Quando si disabilita la copia speculare su un pool in questo modo, questa verrà disabilitata anche su qualsiasi immagine (nel pool) per la quale è stata abilitata esplicitamente la copia speculare.

cephuser@adm > rbd --cluster local mirror pool disable POOL_NAME
cephuser@adm > rbd --cluster remote mirror pool disable POOL_NAME

20.4.1.3 Esecuzione del bootstrap dei peer

Affinché il daemon rbd-mirror rilevi il rispettivo cluster peer, è necessario registrare il peer nel pool e creare un account utente. Questo processo può essere automatizzato con rbd e i comandi mirror pool peer bootstrap create e mirror pool peer bootstrap import.

Per creare manualmente un nuovo token di bootstrap con rbd, specificare il comando mirror pool peer bootstrap create, il nome del pool e un nome descrittivo facoltativo del sito per la descrizione del cluster local:

cephuser@local > rbd mirror pool peer bootstrap create \
 [--site-name LOCAL_SITE_NAME] POOL_NAME

L'output di mirror pool peer bootstrap create sarà un token che dovrà essere fornito al comando mirror pool peer bootstrap import. Ad esempio, sul cluster local:

cephuser@local > rbd --cluster local mirror pool peer bootstrap create --site-name local image-pool
eyJmc2lkIjoiOWY1MjgyZGItYjg5OS00NTk2LTgwOTgtMzIwYzFmYzM5NmYzIiwiY2xpZW50X2lkIjoicmJkLW \
1pcnJvci1wZWVyIiwia2V5IjoiQVFBUnczOWQwdkhvQmhBQVlMM1I4RmR5dHNJQU50bkFTZ0lOTVE9PSIsIm1v \
bl9ob3N0IjoiW3YyOjE5Mi4xNjguMS4zOjY4MjAsdjE6MTkyLjE2OC4xLjM6NjgyMV0ifQ==

Per importare manualmente il token di bootstrap creato da un altro cluster con il comando rbd, utilizzare la sintassi seguente:

rbd mirror pool peer bootstrap import \
 [--site-name LOCAL_SITE_NAME] \
 [--direction DIRECTION \
 POOL_NAME TOKEN_PATH

Dove:

LOCAL_SITE_NAME

Nome descrittivo facoltativo del sito per la descrizione del cluster local.

DIRECTION

Direzione della copia speculare. L'impostazione di default è rx-tx per la copia speculare bidirezionale, ma è possibile configurare questa impostazione anche su rx-only per la copia speculare unidirezionale.

POOL_NAME

Nome del pool.

TOKEN_PATH

Percorso del file al token creato (o - per leggerlo dall'input standard).

Ad esempio, sul cluster remote:

cephuser@remote > cat <<EOF > token
eyJmc2lkIjoiOWY1MjgyZGItYjg5OS00NTk2LTgwOTgtMzIwYzFmYzM5NmYzIiwiY2xpZW50X2lkIjoicmJkLW \
1pcnJvci1wZWVyIiwia2V5IjoiQVFBUnczOWQwdkhvQmhBQVlMM1I4RmR5dHNJQU50bkFTZ0lOTVE9PSIsIm1v \
bl9ob3N0IjoiW3YyOjE5Mi4xNjguMS4zOjY4MjAsdjE6MTkyLjE2OC4xLjM6NjgyMV0ifQ==
EOF
cephuser@adm > rbd --cluster remote mirror pool peer bootstrap import \
 --site-name remote image-pool token

20.4.1.4 Aggiunta manuale di un peer del cluster

Come alternativa all'esecuzione del bootstrap dei peer descritta nella Sezione 20.4.1.3, «Esecuzione del bootstrap dei peer», è possibile specificare i peer manualmente. Per eseguire la copia speculare, il daemon rbd-mirror remoto necessita dell'accesso al cluster locale. Creare un nuovo utente Ceph locale che verrà utilizzato dal daemon rbd-mirror remoto, ad esempio rbd-mirror-peer:

cephuser@adm > ceph auth get-or-create client.rbd-mirror-peer \
 mon 'profile rbd' osd 'profile rbd'

Utilizzare la sintassi seguente per aggiungere un cluster Ceph peer in copia speculare con il comando rbd:

rbd mirror pool peer add POOL_NAME CLIENT_NAME@CLUSTER_NAME

Esempio:

cephuser@adm > rbd --cluster site-a mirror pool peer add image-pool client.rbd-mirror-peer@site-b
cephuser@adm > rbd --cluster site-b mirror pool peer add image-pool client.rbd-mirror-peer@site-a

Per default, il daemon rbd-mirror deve disporre dell'accesso al file di configurazione Ceph ubicato in /etc/ceph/.CLUSTER_NAME.conf, in cui sono specificati gli indirizzi IP dei MON del cluster peer e il portachiavi relativo a un client denominato CLIENT_NAME e ubicato nel percorso di ricerca del portachiavi di default o predefinito, ad esempio /etc/ceph/CLUSTER_NAME.CLIENT_NAME.keyring.

In alternativa, è possibile memorizzare in modo sicuro la chiave client e/o il MON del cluster peer nell'archivio config-key Ceph. Per specificare gli attributi di connessione del cluster peer durante l'aggiunta di un peer in copia speculare, utilizzare le opzioni --remote-mon-host e --remote-key-file. Esempio:

cephuser@adm > rbd --cluster site-a mirror pool peer add image-pool \
 client.rbd-mirror-peer@site-b --remote-mon-host 192.168.1.1,192.168.1.2 \
 --remote-key-file /PATH/TO/KEY_FILE
cephuser@adm > rbd --cluster site-a mirror pool info image-pool --all
Mode: pool
Peers:
  UUID        NAME   CLIENT                 MON_HOST                KEY
  587b08db... site-b client.rbd-mirror-peer 192.168.1.1,192.168.1.2 AQAeuZdb...

20.4.1.5 Rimozione di un peer del cluster

Per rimuovere un cluster peer in copia speculare, specificare il sottocomando mirror pool peer remove, il nome pool e l'UUID peer (reso disponibile dal comando rbd mirror pool info):

cephuser@adm > rbd --cluster local mirror pool peer remove POOL_NAME \
 55672766-c02b-4729-8567-f13a66893445
cephuser@adm > rbd --cluster remote mirror pool peer remove POOL_NAME \
 60c0e299-b38f-4234-91f6-eed0a367be08

20.4.1.6 Pool di dati

Durante la creazione di immagini nel cluster di destinazione, rbd-mirror seleziona un pool di dati come segue:

  • Se presente, verrà utilizzato il pool di dati di default configurato (con l'opzione di configurazione rbd_default_data_pool) del cluster di destinazione.

  • In caso contrario, se l'immagine di origine utilizza un pool di dati separato e sul cluster di destinazione esiste già un pool con lo stesso nome, verrà utilizzato tale pool.

  • Se nessuna delle due condizioni descritte sopra è applicabile, non verrà impostato alcun pool di dati.

20.4.2 Configurazione dell'immagine RBD

Diversamente dalla configurazione del pool, la configurazione dell'immagine deve essere eseguita solo a fronte di un singolo cluster Ceph peer in copia speculare.

Le immagini RBD sottoposte a copia speculare sono designate come primarie o non primarie. Questa è una proprietà dell'immagine e non del pool. Non è possibile modificare le immagini designate come non primarie.

Le immagini vengono promosse automaticamente a primarie quando la copia speculare viene prima abilitata su un'immagine (implicitamente, se la modalità di copia speculare del pool è "pool" e la funzione di journaling dell'immagine è abilitata, oppure esplicitamente (vedere Sezione 20.4.2.1, «Abilitazione della copia speculare dell'immagine») mediante il comando rbd).

20.4.2.1 Abilitazione della copia speculare dell'immagine

Se la copia speculare è configurata in modalità image, è necessario abilitarla esplicitamente per ciascuna immagine nel pool. Per abilitare la copia speculare per un'immagine specifica con rbd, specificare il sottocomando mirror image enable insieme al nome del pool e dell'immagine:

cephuser@adm > rbd --cluster local mirror image enable \
 POOL_NAME/IMAGE_NAME

È possibile eseguire la copia speculare dell'immagine in modalità journal o snapshot:

journal (default)

Se configurata nella modalità journal, la copia speculare utilizzerà la funzione di journaling dell'immagine RBD per replicarne il contenuto. Tale funzione verrà abilitata automaticamente se non è stata ancora abilitata sull'immagine.

istantanea

Se configurata nella modalità snapshot, la copia speculare utilizzerà gli snapshot di copia speculare dell'immagine RBD per replicarne il contenuto. In seguito all'abilitazione, verrà automaticamente creato un primo snapshot di copia speculare dell'immagine RBD e sarà possibile crearne altri con il comando rbd.

Esempio:

cephuser@adm > rbd --cluster local mirror image enable image-pool/image-1 snapshot
cephuser@adm > rbd --cluster local mirror image enable image-pool/image-2 journal

20.4.2.2 Abilitazione della funzione di journaling dell'immagine

Nella copia speculare RBD viene utilizzata la funzione di journaling RBD per assicurare che l'immagine replicata mantenga sempre con coerenza per arresto anomalo. Se si utilizza la modalità di copia speculare image, la funzione di journaling sarà abilitata automaticamente se sull'immagine è abilitata la copia speculare. Se si utilizza la modalità di copia speculare pool, prima che sia possibile sottoporre a copia speculare un'immagine su un cluster peer, occorre abilitare la funzione di journaling dell'immagine RBD. È possibile abilitare tale funzione al momento della creazione dell'immagine specificando l'opzione --image-feature exclusive-lock,journaling nel comando rbd.

In alternativa, è possibile abilitare dinamicamente la funzione di journaling sulle immagini RBD preesistenti. Per abilitare il journaling, specificare il sottocomando feature enable, il nome del pool e dell'immagine e il nome della funzione:

cephuser@adm > rbd --cluster local feature enable POOL_NAME/IMAGE_NAME exclusive-lock
cephuser@adm > rbd --cluster local feature enable POOL_NAME/IMAGE_NAME journaling
Nota
Nota: dipendenza dell'opzione

La funzione journaling dipende dalla funzione exclusive-lock. Se la funzione exclusive-lock non è già stata abilitata, è necessario farlo prima di abilitare la funzione journaling.

Suggerimento
Suggerimento

È possibile abilitare per default il journaling su tutte le nuove immagini aggiungendo rbd default features = layering,exclusive-lock,object-map,deep-flatten,journaling al file di configurazione Ceph.

20.4.2.3 Creazione di snapshot di copia speculare dell'immagine

Se si utilizza la copia speculare basata su snapshot, sarà necessario creare snapshot di copia speculare ogni volta che si desidera eseguire la copia speculare dei contenuti modificati dell'immagine RBD. Per creare manualmente uno snapshot di copia speculare con rbd, specificare il comando mirror image snapshot insieme al nome del pool e dell'immagine:

cephuser@adm > rbd mirror image snapshot POOL_NAME/IMAGE_NAME

Esempio:

cephuser@adm > rbd --cluster local mirror image snapshot image-pool/image-1

Per default, vengono creati solo tre snapshot di copia speculare per immagine. Se questo limite viene raggiunto, lo snapshot di copia speculare più recente viene eliminato automaticamente. Se necessario, è possibile ignorare questo limite con l'opzione di configurazione rbd_mirroring_max_mirroring_snapshots. Inoltre, gli snapshot di copia speculare vengono eliminati automaticamente quando l'immagine viene rimossa o quando la copia speculare viene disabilitata.

È inoltre possibile definire una pianificazione per la creazione automatica e periodica degli snapshot di copia speculare. Questi ultimi possono essere pianificati a livello globale, di singolo pool o di singola immagine. È possibile definire più pianificazioni di snapshot di copia speculare su qualsiasi livello, ma verranno eseguite soltanto le pianificazioni più specifiche corrispondenti a una singola immagine in copia speculare.

Per creare una pianificazione di snapshot di copia speculare con rbd, specificare il comando mirror snapshot schedule add insieme a un nome facoltativo del pool o dell'immagine, a un intervallo e a un'ora di inizio facoltativa.

L'intervallo può essere espresso in giorni, ore o minuti utilizzando rispettivamente i suffissi d, h o m. L'ora di inizio facoltativa può essere specificata utilizzando il formato di ora ISO 8601. Esempio:

cephuser@adm > rbd --cluster local mirror snapshot schedule add --pool image-pool 24h 14:00:00-05:00
cephuser@adm > rbd --cluster local mirror snapshot schedule add --pool image-pool --image image1 6h

Per rimuovere una pianificazione di snapshot di copia speculare con rbd, specificare il comando mirror snapshot schedule remove con le opzioni corrispondenti al comando per l'aggiunta della pianificazione equivalente.

Per elencare tutte le pianificazioni di snapshot per un livello specifico (globale, pool o immagine) con rbd, immettere il comando mirror snapshot schedule ls insieme a un nome facoltativo del pool o dell'immagine. Inoltre, tramite l'opzione --recursive, è possibile elencare tutte le pianificazioni del livello specificato e dei livelli sottostanti. Esempio:

cephuser@adm > rbd --cluster local mirror schedule ls --pool image-pool --recursive
POOL        NAMESPACE IMAGE  SCHEDULE
image-pool  -         -      every 1d starting at 14:00:00-05:00
image-pool            image1 every 6h

Per verificare con rbd quando saranno creati i successivi snapshot per le immagini RBD con copia speculare basata su snapshot, specificare il comando mirror snapshot schedule status insieme a un nome facoltativo del pool o dell'immagine. Esempio:

cephuser@adm > rbd --cluster local mirror schedule status
SCHEDULE TIME       IMAGE
2020-02-26 18:00:00 image-pool/image1

20.4.2.4 Disabilitazione della copia speculare dell'immagine

Per disabilitare la copia speculare per un'immagine specifica, specificare il sottocomando mirror image disable insieme al nome del pool e dell'immagine:

cephuser@adm > rbd --cluster local mirror image disable POOL_NAME/IMAGE_NAME

20.4.2.5 Promozione e abbassamento di livello delle immagini

In uno scenario di failover in cui è necessario spostare la designazione primaria all'immagine nel cluster peer, è necessario interrompere l'accesso all'immagine primaria, abbassare di livello l'attuale immagine primaria, promuovere quella nuova e riprendere l'accesso all'immagine sul cluster alternativo.

Nota
Nota: promozione forzata

È possibile forzare la promozione utilizzando l'opzione --force. La promozione forzata è necessaria quando è impossibile propagare l'abbassamento di livello al cluster peer (ad esempio, in caso di errore del cluster o di interruzione della comunicazione). Ne risulterà uno scenario split brain tra i due peer e l'immagine non viene più sincronizzata fino all'emissione di un sottocomando resync.

Per abbassare di livello un'immagine specifica a non primaria, specificare il sottocomando mirror image demote insieme al nome del pool e dell'immagine:

cephuser@adm > rbd --cluster local mirror image demote POOL_NAME/IMAGE_NAME

Per abbassare di livello tutte le immagini primarie in un pool a non primarie, specificare il sottocomando mirror pool demote insieme al nome del pool:

cephuser@adm > rbd --cluster local mirror pool demote POOL_NAME

Per promuovere un'immagine specifica a primaria, specificare il sottocomando mirror image promote insieme al nome del pool e dell'immagine:

cephuser@adm > rbd --cluster remote mirror image promote POOL_NAME/IMAGE_NAME

Per promuovere tutte le immagini primarie in un pool a primarie, specificare il sottocomando mirror pool promote insieme al nome del pool:

cephuser@adm > rbd --cluster local mirror pool promote POOL_NAME
Suggerimento
Suggerimento: suddivisione del carico I/O

Poiché lo stato di primaria o non primaria si riferisce a un'immagine singola, è possibile fare in modo che il carico I/O e il failover o il failback della fase vengano suddivisi tra due cluster.

20.4.2.6 Risincronizzazione forzata dell'immagine

Se viene rilevato un evento split brain dal daemon rbd-mirror, non verrà effettuato alcun tentativo di copia speculare dell'immagine interessata finché non viene corretto. Per riprendere la copia speculare di un'immagine, prima abbassare di livello l'immagine definita obsoleta, quindi richiedere una risincronizzazione all'immagine primaria. Per richiedere una risincronizzazione dell'immagine, specificare il sottocomando mirror image resync insieme al nome del pool e dell'immagine:

cephuser@adm > rbd mirror image resync POOL_NAME/IMAGE_NAME

20.4.3 Verifica dello stato della copia speculare

Lo stato di replica del cluster peer viene memorizzato per ciascuna immagine primaria in copia speculare. È possibile recuperare tale stato mediante i sottocomandi mirror image status e mirror pool status:

Per richiedere lo stato dell'immagine speculare, specificare il sottocomando mirror image status insieme al nome del pool e dell'immagine:

cephuser@adm > rbd mirror image status POOL_NAME/IMAGE_NAME

Per richiedere lo stato di riepilogo del pool speculare, specificare il sottocomando mirror pool status insieme al nome del pool:

cephuser@adm > rbd mirror pool status POOL_NAME
Suggerimento
Suggerimento:

Con l'aggiunta dell'opzione --verbose al sottocomando mirror pool status verranno generati ulteriori dettagli sullo stato di ciascuna immagine in copia speculare nel pool.

20.5 Impostazioni della cache

L'implementazione dello spazio utente del dispositivo di blocco Ceph (librbd) non può servirsi della cache delle pagine Linux. Pertanto, dispone di memorizzazione nella cache integrata. Il comportamento della memorizzazione nella cache RBD è simile a quello della memorizzazione nella cache del disco rigido. Quando il sistema operativo invia una richiesta di sbarramento o di svuotamento, tutti i dati modificati vengono scritti sugli OSD. Ciò significa che la memorizzazione nella cache Write-back garantisce gli stessi livelli di sicurezza di un disco rigido fisico integro con una macchina virtuale che invia correttamente gli svuotamenti. La cache utilizza un algoritmo Least Recently Used (LRU) e, in modalità Write-back, è in grado di unire le richieste adiacenti per migliorare la velocità effettiva.

Ceph supporta la memorizzazione nella cache Write-back per RBD. Per abilitarla, eseguire

cephuser@adm > ceph config set client rbd_cache true

Per default, librbd non esegue alcuna memorizzazione nella cache. Le operazioni di scrittura e lettura vanno direttamente al cluster di memorizzazione e le operazioni di scrittura vengono restituite solo quando i dati si trovano sul disco in tutte le repliche. Se la memorizzazione nella cache è abilitata, le operazioni di scrittura vengono subito restituite, a meno che il numero di byte non svuotati non sia superiore a quello impostato nell'opzione rbd cache max dirty. In questo caso, l'operazione di scrittura attiva il writeback e si blocca finché non viene svuotato un numero sufficiente di byte.

Ceph supporta la memorizzazione nella cache Write-through per RBD. È possibile impostare le dimensioni della cache e le destinazioni e i limiti per passare dalla memorizzazione nella cache Write-back a quella Write-through. Per abilitare la modalità Write-through, eseguire

cephuser@adm > ceph config set client rbd_cache_max_dirty 0

Ciò vuol dire che le operazioni di scrittura vengono restituite solo quando i dati si trovano sul disco in tutte le repliche, ma che le operazioni di lettura possono provenire dalla cache. La cache si trova nella memoria del client e ogni immagine RBD dispone della propria cache. Dal momento che la cache si trova in locale sul client, se altri accedono all'immagine, non vi è alcuna coerenza. Se la memorizzazione nella cache è abilitata, non sarà possibile eseguire OCFS o GFS su RBD.

I parametri seguenti influiscono sul comportamento dei dispositivi di blocco RADOS (RADOS Block Device, RBD). Per impostarli, utilizzare la categoria client:

cephuser@adm > ceph config set client PARAMETER VALUE
rbd cache

Per abilitare la memorizzazione nella cache per il dispositivo di blocco RADOS (RBD). L'impostazione di default è "true".

rbd cache size

Dimensioni in byte della cache RBD. Il valore di default è 32 MB.

rbd cache max dirty

Limite di dati modificati espresso in byte in corrispondenza del quale la cache attiva il Write-back. Il valore di rbd cache max dirty deve essere inferiore a rbd cache size. Se è impostato a 0, utilizza la memorizzazione nella cache Write-through. Il valore di default è 24 MB.

rbd cache target dirty

Destinazione modificata prima che la cache inizi le operazioni di scrittura dei dati nel relativo storage. Non blocca le operazioni di scrittura nella cache. Il valore di default è 16 MB.

rbd cache max dirty age

Numero di secondi in cui i dati modificati si trovano nella cache prima dell'avvio del writeback. Il valore di default è 1.

rbd cache writethrough until flush

Si avvia in modalità Write-through e passa alla modalità Write-back in seguito alla ricezione della prima richiesta di svuotamento. Si tratta di un'impostazione prudente ma sicura se le macchine virtuali in esecuzione su rbd sono troppo obsolete per inviare richieste di svuotamento (ad esempio, nel caso del driver virtio in Linux prima del kernel 2.6.32). L'impostazione di default è "true".

20.6 Impostazioni QoS

In genere, la Qualità di servizio (QoS, Quality of Service) fa riferimento ai metodi di prioritizzazione del traffico e di prenotazione delle risorse. È particolarmente importante per il trasporto del traffico con requisiti speciali.

Importante
Importante: non supportate da iSCSI

Le impostazioni QoS seguenti sono utilizzate solo dall'implementazione dello spazio utente RBD librbd e non sono utilizzate dall'implementazione kRBD. Poiché iSCSI utilizza kRBD, non usa le impostazioni QoS. Tuttavia, per iSCSI è possibile configurare la QoS sul livello del dispositivo di blocco del kernel tramite le facility del kernel standard.

rbd qos iops limit

Limite desiderato delle operazioni I/O al secondo. Il valore di default è 0 (nessun limite).

rbd qos bps limit

Limite desiderato dei byte I/O al secondo. Il valore di default è 0 (nessun limite).

rbd qos read iops limit

Il limite desiderato di operazioni di lettura al secondo. Il valore di default è 0 (nessun limite).

rbd qos write iops limit

Il limite desiderato di operazioni di scrittura al secondo. Il valore di default è 0 (nessun limite).

rbd qos read bps limit

Il limite desiderato di byte letti al secondo. Il valore di default è 0 (nessun limite).

rbd qos write bps limit

Il limite desiderato di byte scritti al secondo. Il valore di default è 0 (nessun limite).

rbd qos iops burst

Limite di burst desiderato delle operazioni I/O. Il valore di default è 0 (nessun limite).

rbd qos bps burst

Limite di burst desiderato dei byte I/O. Il valore di default è 0 (nessun limite).

rbd qos read iops burst

Il limite di burst desiderato delle operazioni di lettura. Il valore di default è 0 (nessun limite).

rbd qos write iops burst

Il limite di burst desiderato delle operazioni di scrittura. Il valore di default è 0 (nessun limite).

rbd qos read bps burst

Il limite di burst desiderato dei byte letti. Il valore di default è 0 (nessun limite).

rbd qos write bps burst

Il limite di burst desiderato dei byte scritti. Il valore di default è 0 (nessun limite).

rbd qos schedule tick min

Tick di pianificazione minimo (in millisecondi) per QoS. Il valore di default è 50.

20.7 Impostazioni di lettura in avanti

Il dispositivo di blocco RADOS supporta la lettura in avanti/prelettura per l'ottimizzazione delle operazioni di lettura piccole e sequenziali. Nel caso di una macchina virtuale, queste operazioni di lettura sono in genere gestite dal sistema operativo guest, anche se i boot loader potrebbero non generare letture efficaci. Se la memorizzazione nella cache è disabilitata, la lettura in avanti viene disabilitata automaticamente.

Importante
Importante: non supportate da iSCSI

Le impostazioni di lettura in avanti seguenti sono utilizzate solo dall'implementazione dello spazio utente RBD librbd e non sono utilizzate dall'implementazione kRBD. Poiché iSCSI utilizza kRBD, non usa le impostazioni di lettura in avanti. Tuttavia, per iSCSI è possibile configurare la lettura in avanti sullo strato del dispositivo di blocco del kernel tramite le facility del kernel standard.

rbd readahead trigger requests

Numero di richieste di lettura sequenziali necessarie per attivare la lettura in avanti. Il valore di default è 10.

rbd readahead max bytes

Dimensioni massime della richiesta di lettura in avanti. Se è impostata su 0, la lettura in avanti è disabilitata. Il valore di default è 512 kB.

rbd readahead disable after bytes

In seguito alla lettura di questo numero di byte da un'immagine RBD, la lettura in avanti è disabilitata per tale immagine fino alla chiusura. In questo modo, il sistema operativo guest può subentrare alla lettura in avanti al momento dell'avvio. Se è impostata su 0, la lettura in avanti rimane abilitata. Il valore di default è 50 MB.

20.8 Funzioni avanzate

Il dispositivo di blocco RADOS supporta le funzioni avanzate che consentono di migliorare la funzionalità delle immagini RBD. È possibile specificare le funzioni sulla riga di comando durante la creazione di un'immagine RBD oppure nel file di configurazione Ceph tramite l'opzione rbd_default_features.

È possibile specificare i valori dell'opzione rbd_default_features in due modi:

  • Come somma dei valori interni delle funzioni. Ogni funzione dispone di un proprio valore interno; ad esempio il valore di "layering" è 1 e quello di "fast-diff" è 16. Di conseguenza, per attivare queste due funzioni per default, includere quanto segue:

    rbd_default_features = 17
  • Come elenco di funzioni separate da virgole. L'esempio precedente avrà l'aspetto seguente:

    rbd_default_features = layering,fast-diff
Nota
Nota: funzioni non supportate da iSCSI

Le immagini RBD con le funzioni seguenti non saranno supportate da iSCSI: deep-flatten, object-map, journaling, fast-diff, striping

Di seguito è riportato un elenco delle funzioni RBD avanzate:

layering

Il layering consente di utilizzare la funzione di clonazione.

Il valore interno è 1; quello di default è "yes".

striping

Lo striping consente di distribuire i dati tra più oggetti e agevola il parallelismo dei workload sequenziali di lettura/scrittura. Consente di evitare la formazione di colli di bottiglia sui singoli nodi per dispositivi di blocco RADOS di grandi dimensioni oppure occupati.

Il valore interno è 2; quello di default è "yes".

exclusive-lock

Quando abilitata, necessita di un client per ottenere un blocco su un oggetto prima di eseguire un'operazione di scrittura. Abilitare il blocco esclusivo solo quando un client singolo sta effettuando l'accesso a un'immagine nello stesso momento. Il valore interno è 4. L'impostazione di default è "yes".

object-map

Il supporto della mappa oggetti dipende dal supporto del blocco esclusivo. I dispositivi di blocco sono soggetti a thin provisioning e di conseguenza memorizzano soltanto i dati effettivamente esistenti. Il supporto della mappa oggetti consente di monitorare gli oggetti effettivamente esistenti (con dati memorizzati su un'unità). L'abilitazione del supporto della mappa oggetti consente di velocizzare le operazioni I/O per la clonazione, l'importazione e l'esportazione di un'immagine compilata in modo sparse e per l'eliminazione.

Il valore interno è 8; quello di default è "yes".

fast-diff

Il supporto di fast-diff dipende dal supporto della mappa oggetti e del blocco esclusivo. Aggiunge un'altra proprietà alla mappa oggetti che la rende notevolmente più rapida nella creazione delle differenze tra le snapshot di un'immagine e l'utilizzo effettivo dei dati di una snapshot.

Il valore interno è 16; quello di default è "yes".

deep-flatten

La funzione deep-flatten attiva l'opzione rbd flatten (vedere la Sezione 20.3.3.6, «Appiattimento di un'immagine clonata») su tutte le snapshot di un'immagine oltre che sull'immagine stessa. Senza di essa, le snapshot di un'immagine continueranno a dipendere da quella superiore e di conseguenza non sarà possibile eliminare tale immagine superiore finché non vengono eliminate anche le snapshot. Con l'impostazione deep-flatten, l'elemento superiore è reso indipendente dai cloni, anche se dispongono di snapshot.

Il valore interno è 32; quello di default è "yes".

journaling

Il supporto del journaling dipende dal supporto del blocco esclusivo. La funzione di journaling consente di registrare tutte le modifiche apportate a un'immagine nell'ordine in cui si verificano. La copia speculare RBD (vedere la Sezione 20.4, «Copie speculari delle immagini RBD») utilizza il journal per replicare un'immagine coerente con l'arresto anomalo in un cluster remoto.

Il valore interno è 64; quello di default è "yes".

20.9 Mappatura di RBD tramite i client kernel meno recenti

I client meno recenti (ad esempio SLE11 SP4) potrebbero non essere in grado di mappare le immagini RBD poiché un cluster distribuito con SUSE Enterprise Storage 7 forza alcune funzioni (sia le funzioni a livello di immagine RBD che quelle a livello RADOS) non supportate dai client meno recenti. In questo caso, sui log OSD vengono visualizzati dei messaggi simili al seguente:

2019-05-17 16:11:33.739133 7fcb83a2e700  0 -- 192.168.122.221:0/1006830 >> \
192.168.122.152:6789/0 pipe(0x65d4e0 sd=3 :57323 s=1 pgs=0 cs=0 l=1 c=0x65d770).connect \
protocol feature mismatch, my 2fffffffffff < peer 4010ff8ffacffff missing 401000000000000
Avvertimento
Avvertimento: la modifica dei tipi di compartimento della mappa CRUSH causa un significativo ribilanciamento

Se si intende passare dal tipo di compartimento della mappa CRUSH "straw" a quello "straw2" e viceversa, procedere secondo una pianificazione. È prevedibile che questa operazione causi un impatto significativo sul carico del cluster, poiché la modifica del tipo di compartimento causerà un significativo ribilanciamento.

  1. Disabilitare le funzioni dell'immagine RBD non supportate. Esempio:

    cephuser@adm > rbd feature disable pool1/image1 object-map
    cephuser@adm > rbd feature disable pool1/image1 exclusive-lock
  2. Modificare il tipo di compartimento della mappa CRUSH da "straw2" a "straw":

    1. Salvare la mappa CRUSH:

      cephuser@adm > ceph osd getcrushmap -o crushmap.original
    2. Decompilare la mappa CRUSH:

      cephuser@adm > crushtool -d crushmap.original -o crushmap.txt
    3. Modificare la mappa CRUSH e sostituire "straw2" con "straw".

    4. Ricompilare la mappa CRUSH:

      cephuser@adm > crushtool -c crushmap.txt -o crushmap.new
    5. Impostare la nuova mappa CRUSH:

      cephuser@adm > ceph osd setcrushmap -i crushmap.new

20.10 Abilitazione dei dispositivi di blocco e di Kubernetes

È possibile utilizzare i dispositivi di blocco RADOS Ceph con Kubernetes v1.13 e versioni successive tramite il driver ceph-csi, che esegue il provisioning dinamico delle immagini RBD sui volumi Kubernetes sottostanti e la mappatura di tali immagini sotto forma di dispositivi di blocco (facoltativamente montando un file system contenuto all'interno dell'immagine) ai nodi di lavoro su cui sono in esecuzione i pod che fanno riferimento a un volume con supporto RBD.

Per utilizzare i dispositivi di blocco Ceph con Kubernetes, è necessario installare e configurare ceph-csi all'interno dell'ambiente Kubernetes.

Importante
Importante

ceph-csi utilizza per default i moduli del kernel RBD, che potrebbero non supportare tutti gli elementi ottimizzabili CRUSH di Ceph o le funzioni dell'immagine RBD.

  1. Per default, i dispositivi di blocco Ceph utilizzano il pool RBD. Creare un pool per la memorizzazione del volume Kubernetes. Assicurarsi che il cluster Ceph sia in esecuzione e creare il pool:

    cephuser@adm > ceph osd pool create kubernetes
  2. Utilizzare lo strumento RBD per inizializzare il pool:

    cephuser@adm > rbd pool init kubernetes
  3. Creare un nuovo utente per Kubernetes e ceph-csi. Eseguire quanto riportato di seguito e registrare la chiave generata:

    cephuser@adm > ceph auth get-or-create client.kubernetes mon 'profile rbd' osd 'profile rbd pool=kubernetes' mgr 'profile rbd pool=kubernetes'
    [client.kubernetes]
        key = AQD9o0Fd6hQRChAAt7fMaSZXduT3NWEqylNpmg==
  4. Per definire gli indirizzi del Ceph Monitor per il cluster Ceph, ceph-csi necessita di un oggetto ConfigMap memorizzato in Kubernetes. Raccogliere l'FSID e gli indirizzi del monitor univoci del cluster Ceph:

    cephuser@adm > ceph mon dump
    <...>
    fsid b9127830-b0cc-4e34-aa47-9d1a2e9949a8
    <...>
    0: [v2:192.168.1.1:3300/0,v1:192.168.1.1:6789/0] mon.a
    1: [v2:192.168.1.2:3300/0,v1:192.168.1.2:6789/0] mon.b
    2: [v2:192.168.1.3:3300/0,v1:192.168.1.3:6789/0] mon.c
  5. Generare un file csi-config-map.yaml simile all'esempio riportato di seguito, sostituendo l'FSID per clusterID e gli indirizzi dei monitor per monitors:

    kubectl@adm > cat <<EOF > csi-config-map.yaml
    ---
    apiVersion: v1
    kind: ConfigMap
    data:
      config.json: |-
        [
          {
            "clusterID": "b9127830-b0cc-4e34-aa47-9d1a2e9949a8",
            "monitors": [
              "192.168.1.1:6789",
              "192.168.1.2:6789",
              "192.168.1.3:6789"
            ]
          }
        ]
    metadata:
      name: ceph-csi-config
    EOF
  6. Quindi, memorizzare il nuovo oggetto ConfigMap in Kubernetes:

    kubectl@adm > kubectl apply -f csi-config-map.yaml
  7. Per la comunicazione con il cluster Ceph tramite ceph-csi, sono necessarie le credenziali cephx. Generare un file csi-rbd-secret.yaml simile a quello nell'esempio riportato di seguito utilizzando l'ID utente Kubernetes e la chiave cephx appena creati:

    kubectl@adm > cat <<EOF > csi-rbd-secret.yaml
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: csi-rbd-secret
      namespace: default
    stringData:
      userID: kubernetes
      userKey: AQD9o0Fd6hQRChAAt7fMaSZXduT3NWEqylNpmg==
    EOF
  8. Quindi, memorizzare il nuovo oggetto segreto in Kubernetes:

    kubectl@adm > kubectl apply -f csi-rbd-secret.yaml
  9. Creare il ServiceAccount e gli oggetti Kubernetes RBAC ClusterRole/ClusterRoleBinding richiesti. Questi oggetti non devono essere necessariamente personalizzati per il proprio ambiente Kubernetes e pertanto è possibile utilizzarli direttamente dai file YAML di distribuzione di ceph-csi.

    kubectl@adm > kubectl apply -f https://raw.githubusercontent.com/ceph/ceph-csi/master/deploy/rbd/kubernetes/csi-provisioner-rbac.yaml
    kubectl@adm > kubectl apply -f https://raw.githubusercontent.com/ceph/ceph-csi/master/deploy/rbd/kubernetes/csi-nodeplugin-rbac.yaml
  10. Creare lo strumento di provisioning e i plug-in del nodo ceph-csi:

    kubectl@adm > wget https://raw.githubusercontent.com/ceph/ceph-csi/master/deploy/rbd/kubernetes/csi-rbdplugin-provisioner.yaml
    kubectl@adm > kubectl apply -f csi-rbdplugin-provisioner.yaml
    kubectl@adm > wget https://raw.githubusercontent.com/ceph/ceph-csi/master/deploy/rbd/kubernetes/csi-rbdplugin.yaml
    kubectl@adm > kubectl apply -f csi-rbdplugin.yaml
    Importante
    Importante

    Per default, i file YAML dello strumento di provisioning e del plug-in del nodo eseguiranno il pull della release di sviluppo del container ceph-csi. È necessario aggiornare i file YAML per utilizzare la versione della release.

20.10.1 Uso dei dispositivi di blocco Ceph in Kubernetes

La StorageClass Kubernetes definisce una classe di storage. È possibile creare più oggetti StorageClass per eseguire la mappatura a diversi livelli di qualità del servizio e funzioni. Si pensi ad esempio ai pool NVMe rispetto a quelli basati su HDD.

Per creare una StorageClass ceph-csi che mappi al pool Kubernetes creato sopra, è possibile utilizzare il file YAML seguente, dopo aver verificato che la proprietà clusterID corrisponda all'FSID del cluster Ceph:

kubectl@adm > cat <<EOF > csi-rbd-sc.yaml
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: csi-rbd-sc
provisioner: rbd.csi.ceph.com
parameters:
   clusterID: b9127830-b0cc-4e34-aa47-9d1a2e9949a8
   pool: kubernetes
   csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
   csi.storage.k8s.io/provisioner-secret-namespace: default
   csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
   csi.storage.k8s.io/node-stage-secret-namespace: default
reclaimPolicy: Delete
mountOptions:
   - discard
EOF
kubectl@adm > kubectl apply -f csi-rbd-sc.yaml

Una PersistentVolumeClaim è una richiesta di risorse di memorizzazione astratte effettuata da un utente. La richiesta PersistentVolumeClaim viene quindi associata a una risorsa pod per il provisioning di un PersistentVolume, supportato da un'immagine del dispositivo di blocco Ceph. È possibile includere un valore volumeMode facoltativo per scegliere tra un file system montato (default) o un volume non elaborato basato sul dispositivo di blocco.

Con ceph-csi, specificando Filesystem per volumeMode, verranno supportate sia le richieste ReadWriteOnce che quelle ReadOnlyMany accessMode, mentre specificando Block per volumeMode, verranno supportate le richieste ReadWriteOnce, ReadWriteMany e ReadOnlyMany accessMode.

Ad esempio, per creare una richiesta PersistentVolumeClaim basata su blocchi in cui venga utilizzata la ceph-csi-based StorageClass creata sopra, è possibile usare il file YAML seguente per richiedere la memorizzazione del blocco non elaborato di csi-rbd-sc StorageClass:

kubectl@adm > cat <<EOF > raw-block-pvc.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: raw-block-pvc
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Block
  resources:
    requests:
      storage: 1Gi
  storageClassName: csi-rbd-sc
EOF
kubectl@adm > kubectl apply -f raw-block-pvc.yaml

Di seguito è riportato un esempio di associazione della richiesta PersistentVolumeClaim descritta sopra a una risorsa pod sotto forma di dispositivo di blocco non elaborato:

kubectl@adm > cat <<EOF > raw-block-pod.yaml
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-raw-block-volume
spec:
  containers:
    - name: fc-container
      image: fedora:26
      command: ["/bin/sh", "-c"]
      args: ["tail -f /dev/null"]
      volumeDevices:
        - name: data
          devicePath: /dev/xvda
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: raw-block-pvc
EOF
kubectl@adm > kubectl apply -f raw-block-pod.yaml

Per creare una richiesta PersistentVolumeClaim basata su file system in cui venga utilizzata la ceph-csi-based StorageClass creata sopra, è possibile utilizzare il file YAML seguente per richiedere un file system montato (supportato da un'immagine RBD) di csi-rbd-sc StorageClass:

kubectl@adm > cat <<EOF > pvc.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rbd-pvc
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 1Gi
  storageClassName: csi-rbd-sc
EOF
kubectl@adm > kubectl apply -f pvc.yaml

Di seguito è riportato un esempio di associazione della richiesta PersistentVolumeClaim descritta sopra a una risorsa pod sotto forma di file system montato:

kubectl@adm > cat <<EOF > pod.yaml
---
apiVersion: v1
kind: Pod
metadata:
  name: csi-rbd-demo-pod
spec:
  containers:
    - name: web-server
      image: nginx
      volumeMounts:
        - name: mypvc
          mountPath: /var/lib/www/html
  volumes:
    - name: mypvc
      persistentVolumeClaim:
        claimName: rbd-pvc
        readOnly: false
EOF
kubectl@adm > kubectl apply -f pod.yaml

Parte IV Accesso ai dati del cluster

  • 21 Ceph Object Gateway
  • In questo capitolo vengono fornite ulteriori informazioni sui task amministrativi correlati a Object Gateway, come la verifica dello stato del servizio, la gestione degli account, i gateway multisito o l'autenticazione LDAP.

  • 22 Ceph iSCSI Gateway
  • Questo capitolo è incentrato sui task amministrativi correlati a iSCSI Gateway. Per la procedura di distribuzione, fare riferimento a Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.4.3.5 “Distribuzione di iSCSI Gateway”.

  • 23 File system in cluster
  • 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 Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, S…

  • 24 Esportazione dei dati Ceph tramite Samba
  • Questo capitolo descrive come esportare i dati memorizzati in un cluster Ceph tramite una condivisione Samba/CIFS per potervi accedere con facilità dai computer client Windows*. Contiene inoltre informazioni utili per la configurazione di un gateway Samba Ceph in modo che si unisca ad Active Directo…

  • 25 NFS Ganesha
  • NFS Ganesha è un server NFS che viene eseguito in uno spazio di indirizzamento 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. Per istruzioni sull'installazione, vedere Bo…

21 Ceph Object Gateway

In questo capitolo vengono fornite ulteriori informazioni sui task amministrativi correlati a Object Gateway, come la verifica dello stato del servizio, la gestione degli account, i gateway multisito o l'autenticazione LDAP.

21.1 Restrizioni e limitazioni di denominazione di Object Gateway

Di seguito è riportato un elenco di importanti limiti Object Gateway:

21.1.1 Limitazioni dei compartimenti

Quando si inizia a utilizzare Object Gateway tramite l'API S3, i nomi dei compartimenti sono limitati ai nomi conformi a DNS in cui è consentito un trattino "-". Quando si inizia a utilizzare Object Gateway tramite l'API Swift, è possibile utilizzare una combinazione qualsiasi di caratteri UTF-8 supportati, tranne la barra "/". La lunghezza massima di un nome di compartimento è di 255 caratteri. I nomi dei compartimenti devono essere univoci.

Suggerimento
Suggerimento: utilizzo di nomi di compartimenti conformi a DNS

Sebbene sia possibile utilizzare qualsiasi nome di compartimento basato su UTF-8 tramite l'API Swift, si consiglia di denominare i compartimenti tenendo in considerazione i limiti di denominazione S3 in modo da evitare problemi di accesso allo stesso compartimento tramite l'API S3.

21.1.2 Limitazioni degli oggetti memorizzati

Numero massimo di oggetti per utente

Per default, nessuna restrizione (limite definito da ~ 2^63).

Numero massimo di oggetti per compartimento

Per default, nessuna restrizione (limite definito da ~ 2^63).

Dimensioni massime di un oggetto di cui effettuare l'upload/da memorizzare

Gli upload singoli sono limitati a 5 GB. Utilizzare multipart per dimensioni grandi degli oggetti. Il numero massimo di porzioni multipart è 10000.

21.1.3 Limitazioni dell'intestazione HTTP

L'intestazione HTTP e il limite di richiesta dipendono dalla front-end Web utilizzata. L'oggetto beast di default limita le dimensioni dell'intestazione HTTP a 16 KB.

21.2 Distribuzione di Object Gateway

Analogamente agli altri servizi Ceph, Ceph Object Gateway viene distribuito tramite cephadm. Per ulteriori dettagli, fare riferimento a Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.4.2 “Specifica del servizio e del posizionamento”, nello specifico a Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.4.3.4 “Distribuzione degli Object Gateway”.

21.3 Attivazione del servizio Object Gateway

In modo analogo agli altri servizi Ceph, gli Object Gateway vengono attivati identificando innanzitutto il nome del servizio con il comando ceph orch ps ed eseguendo quindi il comando di attivazione seguente, ad esempio:

ceph orch daemon restart OGW_SERVICE_NAME

Fare riferimento al Capitolo 14, Funzionamento dei servizi Ceph per informazioni complete sull'attivazione dei servizi Ceph.

21.4 Opzioni di configurazione

Fare riferimento alla Sezione 28.5, «Ceph Object Gateway» per un elenco delle opzioni di configurazione di Object Gateway.

21.5 Gestione dell'accesso a Object Gateway

È possibile comunicare con Object Gateway mediante l'interfaccia compatibile con S3 o Swift. L'interfaccia S3 è compatibile con un grande sottoinsieme dell'API Amazon S3 RESTful. L'interfaccia Swift è compatibile con un grande sottoinsieme dell'API OpenStack Swift.

Per entrambe le interfacce è richiesto di creare un utente specifico e installare il software client pertinente per comunicare con il gateway che utilizza la chiave segreta dell'utente.

21.5.1 Accesso a Object Gateway

21.5.1.1 Accesso all'interfaccia S3

Per accedere all'interfaccia S3, è necessario un client REST. S3cmd è un client S3 della riga di comando. È possibile trovarlo in openSUSE Build Service (OBS) (in lingua inglese). L'archivio contiene versioni di entrambe le distribuzioni basate su SUSE Linux Enterprise e openSUSE.

Se si desidera testare l'accesso all'interfaccia S3, è anche possibile scrivere un piccolo script Python, che consentirà di eseguire la connessione a Object Gateway, creare un nuovo compartimento ed elencare tutti i compartimenti. I valori per aws_access_key_id e aws_secret_access_key sono ricavati dai valori di access_key e secret_key restituiti dal comando radosgw_admin di cui alla Sezione 21.5.2.1, «Aggiunta di utenti S3 e Swift».

  1. Installare il pacchetto python-boto:

    root # zypper in python-boto
  2. Creare un nuovo script Python denominato s3test.py con il seguente contenuto:

    import boto
    import boto.s3.connection
    access_key = '11BS02LGFB6AL6H1ADMW'
    secret_key = 'vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY'
    conn = boto.connect_s3(
    aws_access_key_id = access_key,
    aws_secret_access_key = secret_key,
    host = 'HOSTNAME',
    is_secure=False,
    calling_format = boto.s3.connection.OrdinaryCallingFormat(),
    )
    bucket = conn.create_bucket('my-new-bucket')
    for bucket in conn.get_all_buckets():
      print "NAME\tCREATED".format(
      name = bucket.name,
      created = bucket.creation_date,
      )

    Sostituire HOSTNAME con il nome host dell'host in cui è stato configurato il servizio Object Gateway, ad esempio gateway_host.

  3. Eseguire lo script:

    python s3test.py

    L'output dello script è simile a quanto riportato di seguito:

    my-new-bucket 2015-07-22T15:37:42.000Z

21.5.1.2 Accesso all'interfaccia Swift

Per accedere a Object Gateway tramite l'interfaccia Swift, è necessario il client della riga di comando swift. Nella relativa documentazione man 1 swift sono fornite ulteriori informazioni sulle rispettive opzioni della riga di comando.

Il pacchetto è incluso nel modulo "Public cloud" di SUSE Linux Enterprise 12 a partire da SP3 e di SUSE Linux Enterprise 15. Prima di installare il pacchetto, è necessario attivare il modulo e aggiornare l'archivio software:

root # SUSEConnect -p sle-module-public-cloud/12/SYSTEM-ARCH
sudo zypper refresh

Oppure

root # SUSEConnect -p sle-module-public-cloud/15/SYSTEM-ARCH
root # zypper refresh

Per installare il comando swift, eseguire quanto riportato di seguito:

root # zypper in python-swiftclient

Per l'accesso swift si utilizza la seguente sintassi:

tux > swift -A http://IP_ADDRESS/auth/1.0 \
-U example_user:swift -K 'SWIFT_SECRET_KEY' list

Sostituire IP_ADDRESS con l'indirizzo IP del server gateway e SWIFT_SECRET_KEY con il valore corrispondente dell'output del comando radosgw-admin key create eseguito per l'utente swift nella Sezione 21.5.2.1, «Aggiunta di utenti S3 e Swift».

Esempio:

tux > swift -A http://gateway.example.com/auth/1.0 -U example_user:swift \
-K 'r5wWIxjOCeEO7DixD1FjTLmNYIViaC6JVhi3013h' list

L'output è:

my-new-bucket

21.5.2 Gestione degli account S3 e Swift

21.5.2.1 Aggiunta di utenti S3 e Swift

Per abilitare gli utenti finali all'iterazione con il gateway, è necessario creare un utente, una chiave di accesso e un segreto. Esistono due tipi di utenti: un utente e un sottoutente. Mentre gli utenti vengono utilizzati per l'iterazione con l'interfaccia S3, i sottoutenti sono gli utenti dell'interfaccia Swift. Ciascun sottoutente è associato a un utente.

Per creare un utente Swift, seguire la procedura indicata:

  1. Per creare un utente Swift, che nella nostra terminologia è denominato sottoutente, prima è necessario creare l'utente associato.

    cephuser@adm > radosgw-admin user create --uid=USERNAME \
     --display-name="DISPLAY-NAME" --email=EMAIL

    Esempio:

    cephuser@adm > radosgw-admin user create \
       --uid=example_user \
       --display-name="Example User" \
       --email=penguin@example.com
  2. Per creare un sottoutente (interfaccia Swift) per l'utente, occorre specificare l'ID utente (--uid=USERNAME) nonché l'ID e il livello di accesso del sottoutente.

    cephuser@adm > radosgw-admin subuser create --uid=UID \
     --subuser=UID \
     --access=[ read | write | readwrite | full ]

    Esempio:

    cephuser@adm > radosgw-admin subuser create --uid=example_user \
     --subuser=example_user:swift --access=full
  3. Generare una chiave segreta per l'utente.

    cephuser@adm > radosgw-admin key create \
       --gen-secret \
       --subuser=example_user:swift \
       --key-type=swift
  4. L'output di entrambi i comandi saranno i dati formattati per JSON in cui è visualizzato lo stato dell'utente. Osservare le righe seguenti e ricordare il valore di secret_key:

    "swift_keys": [
       { "user": "example_user:swift",
         "secret_key": "r5wWIxjOCeEO7DixD1FjTLmNYIViaC6JVhi3013h"}],

Se si accede a Object Gateway tramite l'interfaccia S3, è necessario creare un utente S3 eseguendo:

cephuser@adm > radosgw-admin user create --uid=USERNAME \
 --display-name="DISPLAY-NAME" --email=EMAIL

Esempio:

cephuser@adm > radosgw-admin user create \
   --uid=example_user \
   --display-name="Example User" \
   --email=penguin@example.com

Con questo comando si creano anche la chiave di accesso e la chiave segreta dell'utente. Verificare l'output per le parole chiave access_key e secret_key e i rispettivi valori:

[...]
 "keys": [
       { "user": "example_user",
         "access_key": "11BS02LGFB6AL6H1ADMW",
         "secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}],
 [...]

21.5.2.2 Rimozione di utenti S3 e Swift

La procedura di eliminazione degli utenti S3 e Swift è simile. Nel caso degli utenti Swift però potrebbe essere necessario eliminare l'utente e i rispettivi sottoutenti.

Per rimuovere un utente S3 o Swift (inclusi tutti i rispettivi sottoutenti), specificare user rm e l'ID utente nel seguente comando:

cephuser@adm > radosgw-admin user rm --uid=example_user

Per rimuovere un sottoutente, specificare subuser rm e l'ID sottoutente.

cephuser@adm > radosgw-admin subuser rm --uid=example_user:swift

È possibile utilizzare una delle seguenti opzioni:

--purge-data

Elimina definitivamente tutti i dati associato all'ID utente.

--purge-keys

Elimina definitivamente tutte le chiavi associate all'ID utente.

Suggerimento
Suggerimento: rimozione di un sottoutente

Quando si rimuove un sottoutente, si rimuove l'accesso all'interfaccia Swift. L'utente rimarrà nel sistema.

21.5.2.3 Modifica delle chiavi di accesso e segrete degli utenti S3 e Swift

I parametri di access_key e secret_key identificano l'utente Object Gateway nel momento in cui accede al gateway. Modificare chiavi utente esistenti è come crearne di nuove, in quanto le chiavi precedenti vengono sovrascritte.

Per gli utenti S3, eseguire quanto riportato di seguito:

cephuser@adm > radosgw-admin key create --uid=EXAMPLE_USER --key-type=s3 --gen-access-key --gen-secret

Per gli utenti Swift, eseguire quanto riportato di seguito:

cephuser@adm > radosgw-admin key create --subuser=EXAMPLE_USER:swift --key-type=swift --gen-secret
--key-type=TYPE

Specifica il tipo di chiave. swift o s3.

--gen-access-key

Genera una chiave di accesso casuale (di default per l'utente S3).

--gen-secret

Genera una chiave segreta casuale.

--secret=KEY

Specifica una chiave segreta, ad esempio una chiave generata manualmente.

21.5.2.4 Abilitazione della gestione delle quote utente

Ceph Object Gateway consente di impostare le quote su utenti e compartimenti di proprietà degli utenti. Le quote includono il numero massimo di oggetti in un compartimento e le dimensioni massime di memorizzazione espresse in megabyte.

Prima di abilitare una quota utente, è necessario impostarne i parametri:

cephuser@adm > radosgw-admin quota set --quota-scope=user --uid=EXAMPLE_USER \
 --max-objects=1024 --max-size=1024
--max-objects

Specifica il numero massimo di oggetti. Con un numero negativo la verifica viene disabilitata.

--max-size

Specifica il numero massimo di byte. Con un numero negativo la verifica viene disabilitata.

--quota-scope

Specifica l'ambito della quota. Le opzioni sono bucket e user. Le quote dei compartimenti si riferiscono ai compartimenti di proprietà di un utente. Le quote utente si riferiscono a un utente.

Una volta impostata una quota utente, è possibile abilitarla:

cephuser@adm > radosgw-admin quota enable --quota-scope=user --uid=EXAMPLE_USER

Per disabilitare una quota:

cephuser@adm > radosgw-admin quota disable --quota-scope=user --uid=EXAMPLE_USER

Per elencare le impostazioni della quota:

cephuser@adm > radosgw-admin user info --uid=EXAMPLE_USER

Per aggiornare le statistiche della quota:

cephuser@adm > radosgw-admin user stats --uid=EXAMPLE_USER --sync-stats

21.6 Front-end HTTP

Ceph Object Gateway supporta due front-end HTTP integrati: oggetto beast e Civetweb.

Il front-end dell'oggetto beast utilizza la libreria Boost.Beast per l'analisi HTTP e la libreria Boost.Asio per l'I/O di rete asincrono.

Il front-end Civetweb utilizza la libreria HTTP Civetweb, che è un fork di Mongoose.

È possibile configurarli con l'opzione rgw_frontends. Fare riferimento alla Sezione 28.5, «Ceph Object Gateway» per un elenco delle opzioni di configurazione.

21.7 Abilitazione di HTTPS/SSL per gli Object Gateway

Per abilitare la comunicazione sicura di Object Gateway tramite SSL, occorre disporre di un certificato emesso da un'autorità di certificazione o crearne uno autofirmato.

21.7.1 Creazione di un certificato autofirmato

Suggerimento
Suggerimento

Ignorare questa sezione se si dispone già di un certificato valido firmato dalla CA.

Nella procedura seguente è illustrato come generare un certificato SSL autofirmato sul Salt Master.

  1. Se è necessario che Object Gateway sia noto ad altre identità di oggetto, aggiungerle all'opzione subjectAltName nella sezione [v3_req] del file /etc/ssl/openssl.cnf:

    [...]
    [ v3_req ]
    subjectAltName = DNS:server1.example.com DNS:server2.example.com
    [...]
    Suggerimento
    Suggerimento: indirizzi IP in subjectAltName

    Per utilizzare gli indirizzi IP al posto dei nomi di dominio nell'opzione subjectAltName, sostituire la riga di esempio con quanto segue:

    subjectAltName = IP:10.0.0.10 IP:10.0.0.11
  2. Creare la chiave e il certificato utilizzando openssl. Immettere tutti i dati che è necessario includere nel certificato. Si consiglia di immettere FQDN come nome comune. Prima di firmare il certificato, verificare che "X509v3 Subject Alternative Name:" sia incluso nelle estensioni richieste e che sia impostato nel certificato che viene generato.

    root@master # openssl req -x509 -nodes -days 1095 \
     -newkey rsa:4096 -keyout rgw.key
     -out rgw.pem
  3. Aggiungere la chiave al file di certificato:

    root@master # cat rgw.key >> rgw.pem

21.7.2 Configurazione di Object Gateway con SSL

Per configurare Object Gateway sull'uso dei certificati SSL, utilizzare l'opzione rgw_frontends. Esempio:

cephuser@adm > ceph config set WHO rgw_frontends \
 beast ssl_port=443 ssl_certificate=config://CERT ssl_key=config://KEY

Se le chiavi di configurazione CERT e KEY non vengono specificate, il servizio Object Gateway cercherà la chiave e il certificato SSL nelle chiavi di configurazione seguenti:

rgw/cert/RGW_REALM/RGW_ZONE.key
rgw/cert/RGW_REALM/RGW_ZONE.crt

Se si desidera sostituire l'ubicazione della chiave e del certificato SSL di default, importarli nel database di configurazione utilizzando il comando seguente:

ceph config-key set CUSTOM_CONFIG_KEY -i PATH_TO_CERT_FILE

Quindi, utilizzare le chiavi di configurazione personalizzate con la direttiva config://.

21.8 Moduli di sincronizzazione

Object Gateway viene distribuito come servizio multisito ed è possibile eseguire la copia speculare dei dati e dei metadati tra le zone. I moduli di sincronizzazione sono costruiti in cima al framework multisito che consente l'inoltro di dati e metadati a un livello esterno diverso. Un modulo di sincronizzazione consente di eseguire un set di azioni ogni volta che ha luogo una modifica dei dati (ad esempio, operazioni correlate ai metadati come la creazione di compartimenti o di utenti). Poiché le modifiche del multisito Object Gateway sono coerenti nei siti remoti, le modifiche vengono propagate in modo asincrono. Questo concetto comprende casi d'uso come il backup della memorizzazione di oggetti in un cluster cloud esterno, una soluzione di backup personalizzata in cui vengono utilizzate unità nastro o l'indicizzazione dei metadati in ElasticSearch.

21.8.1 Configurazione dei moduli di sincronizzazione

Tutti i moduli di sincronizzazione vengono configurati in modo simile. È necessario creare una nuova zona (fare riferimento alla Sezione 21.13, «Object Gateway multisito» per ulteriori dettagli) e impostare la relativa opzione --tier_type, ad esempio --tier-type=cloud, per il modulo di sincronizzazione cloud:

cephuser@adm > radosgw-admin zone create --rgw-zonegroup=ZONE-GROUP-NAME \
 --rgw-zone=ZONE-NAME \
 --endpoints=http://endpoint1.example.com,http://endpoint2.example.com, [...] \
 --tier-type=cloud

È possibile configurare un livello specifico tramite il comando seguente:

cephuser@adm > radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \
 --rgw-zone=ZONE-NAME \
 --tier-config=KEY1=VALUE1,KEY2=VALUE2

La variabile KEY della configurazione specifica la variabile di configurazione da aggiornare, mentre VALUE specifica il nuovo valore corrispondente. È possibile accedere ai valori nidificati utilizzando il punto. Esempio:

cephuser@adm > radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \
 --rgw-zone=ZONE-NAME \
 --tier-config=connection.access_key=KEY,connection.secret=SECRET

È possibile accedere agli elementi della matrice aggiungendo delle parentesi quadre "[]" all'elemento a cui si fa riferimento. È possibile aggiungere un nuovo elemento della matrice utilizzando le parentesi quadre "[]". Il valore di indice -1 fa riferimento all'ultimo elemento della matrice. Non è possibile creare un nuovo elemento e farvi nuovamente riferimento nello stesso comando. Ad esempio, di seguito è riportato un comando per la creazione di un nuovo profilo per i compartimenti che iniziano con PREFIX:

cephuser@adm > radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \
 --rgw-zone=ZONE-NAME \
 --tier-config=profiles[].source_bucket=PREFIX'*'
cephuser@adm > radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \
 --rgw-zone=ZONE-NAME \
 --tier-config=profiles[-1].connection_id=CONNECTION_ID,profiles[-1].acls_id=ACLS_ID
Suggerimento
Suggerimento: aggiunta e rimozione delle voci di configurazione

Tramite il parametro --tier-config-add==VALUE, è possibile aggiungere una nuova voce di configurazione del livello.

Per rimuovere una voce esistente, utilizzare --tier-config-rm=KEY.

21.8.2 Sincronizzazione delle zone

La configurazione di un modulo di sincronizzazione viene eseguita a livello locale in una zona. Il modulo di sincronizzazione determina se i dati vengono esportati dalla zona o se questa utilizza solo dati modificati in un'altra zona. A partire da Luminous, i plug-in di sincronizzazione supportati sono ElasticSearch, rgw, il plug-in di sincronizzazione di default mediante il quale vengono sincronizzati i dati tra le zone, e log, un plug-in di sincronizzazione semplice che registra le operazioni dei metadati che hanno luogo nelle zone remote. Nelle sezioni seguenti è riportato l'esempio di una zona in cui viene utilizzato il modulo di sincronizzazione ElasticSearch. Il processo è simile a quello utilizzato per la configurazione di qualsiasi altro plug-in di sincronizzazione.

Nota
Nota: plug-in di sincronizzazione di default

rgw è il plug-in di sincronizzazione di default e non è necessario configurarlo esplicitamente.

21.8.2.1 Requisiti e presupposti

Si supponga una semplice configurazione multisito, come descritta nella Sezione 21.13, «Object Gateway multisito», costituita da 2 zone: us-east e us-west. Adesso si aggiunge una terza zona us-east-es nella quale vengono elaborati solo i metadati provenienti da altri siti. Questa zona può essere nello stesso cluster Ceph di us-east o in uno diverso. In questa zona vengono utilizzati solo i metadati provenienti da altre zone e gli Object Gateway in essa contenuti non serviranno direttamente alcuna richiesta dell'utente finale.

21.8.2.2 Configurazione delle zone

  1. Creare una terza zona simile a quelle descritte nella Sezione 21.13, «Object Gateway multisito», ad esempio

    cephuser@adm > radosgw-admin zone create --rgw-zonegroup=us --rgw-zone=us-east-es \
    --access-key=SYSTEM-KEY --secret=SECRET --endpoints=http://rgw-es:80
  2. È possibile configurare un modulo di sincronizzazione per questa zona nel modo seguente:

    cephuser@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --tier-type=TIER-TYPE \
    --tier-config={set of key=value pairs}
  3. Ad esempio, nel modulo di sincronizzazione ElasticSearch

    cephuser@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --tier-type=elasticsearch \
    --tier-config=endpoint=http://localhost:9200,num_shards=10,num_replicas=1

    Per le varie opzioni tier-config supportate, fare riferimento a Sezione 21.8.3, «Modulo di sincronizzazione ElasticSearch».

  4. Infine, aggiornare il periodo

    cephuser@adm > radosgw-admin period update --commit
  5. Adesso, avviare Object Gateway nella zona

    cephuser@adm > ceph orch start rgw.REALM-NAME.ZONE-NAME

21.8.3 Modulo di sincronizzazione ElasticSearch

Questo modulo di sincronizzazione consente di scrivere in ElasticSearch i metadati provenienti da altre zone. A partire da Luminous, è il formato JSON dei campi dei dati che attualmente vengono memorizzati in ElasticSearch.

{
  "_index" : "rgw-gold-ee5863d6",
  "_type" : "object",
  "_id" : "34137443-8592-48d9-8ca7-160255d52ade.34137.1:object1:null",
  "_score" : 1.0,
  "_source" : {
    "bucket" : "testbucket123",
    "name" : "object1",
    "instance" : "null",
    "versioned_epoch" : 0,
    "owner" : {
      "id" : "user1",
      "display_name" : "user1"
    },
    "permissions" : [
      "user1"
    ],
    "meta" : {
      "size" : 712354,
      "mtime" : "2017-05-04T12:54:16.462Z",
      "etag" : "7ac66c0f148de9519b8bd264312c4d64"
    }
  }
}

21.8.3.1 Parametri di configurazione di tipi di livelli ElasticSearch

endpoint

Specifica l'endpoint del server ElasticSearch cui accedere.

num_shards

(numero intero) Numero di partizioni che verranno configurate da ElasticSearch con l'inizializzazione della sincronizzazione sui dati. Dopo l'inizializzazione non è possibile modificare tale numero. Per qualsiasi modifica sono richieste la ricompilazione dell'indice di ElasticSearch e la reinizializzazione del processo di sincronizzazione dei dati.

num_replicas

(numero intero) Numero di repliche che verranno configurate da ElasticSearch con l'inizializzazione della sincronizzazione sui dati.

explicit_custom_meta

(true | false) Specifica se tutti i metadati personalizzati dell'utente verranno indicizzati o se l'utente dovrà configurare (a livello di compartimento) quali voci dei metadati del cliente devono essere indicizzate. Per default, questa opzione è impostata su false.

index_buckets_list

(elenco di stringhe separate da virgole) Se vuoti, tutti i compartimenti verranno indicizzati. Altrimenti, verranno indicizzati solo i compartimenti specificati qui. È possibile specificare i prefissi dei compartimenti (ad esempio "foo*") o i suffissi (ad esempio "*bar").

approved_owners_list

(elenco di stringhe separate da virgole) Se vuoti, i compartimenti di tutti i proprietari verranno indicizzati (operazione soggetta ad altre restrizioni), altrimenti verranno indicizzati solo i compartimenti appartenenti ai proprietari specificati. È possibile specificare anche i suffissi e i prefissi.

override_index_path

(stringa) Se non è vuota, la stringa verrà utilizzata come percorso di indice di ElasticSearch. Altrimenti il percorso di indice verrà determinato e generato al momento dell'inizializzazione della sincronizzazione.

nomeutente

Specifica un nome utente per ElasticSearch se occorre effettuare l'autenticazione.

password

Specifica una password per ElasticSearch se occorre effettuare l'autenticazione.

21.8.3.2 Interrogazioni dei metadati

Poiché adesso nel cluster ElasticSearch vengono memorizzati metadati di oggetti, è importante che l'endpoint di ElasticSearch non sia esposto al pubblico e che sia accessibile solo dagli amministratori del cluster. Ciò rappresenta un problema per l'esposizione delle interrogazioni dei metadati all'utente finale, dato che l'utente dovrebbe interrogare solo i propri metadati e non quelli di altri utenti. Pertanto sarebbe opportuno che l'autenticazione degli utenti da parte del cluster ElasticSearch venga eseguita in modo simile a RGW, il che rappresenta un problema.

A partire da Luminous RGW, adesso nella zona master dei metadata master è possibile provvedere alle richieste degli utenti finali. In tal modo l'endpoint di ElasticSearch non viene esposto al pubblico e si risolve anche il problema di autenticazione e autorizzazione in quanto RGW stesso è in grado di autenticare le richieste degli utenti finali. A tal fine, RGW introduce una nuova interrogazione nelle API del compartimento che sono in grado di provvedere alle richieste ElasticSearch. Tutte queste richieste devono essere inviate alla zona master dei metadati.

Ottenimento di un'interrogazione ElasticSearch
GET /BUCKET?query=QUERY-EXPR

parametri di richiesta:

  • max-keys: numero massimo di voci da restituire

  • marker: marker di impaginazione

expression := [(]<arg> <op> <value> [)][<and|or> ...]

op è uno dei seguenti: <, <=, ==, >=, >

Esempio:

GET /?query=name==foo

Verranno restituite tutte le chiavi indicizzate per le quali l'utente dispone l'autorizzazione in lettura e vengono denominate "foo". L'output sarà un elenco di chiavi in XML simile alla risposta dei compartimenti dell'elenco S3.

Configurazione dei campi dei metadati personalizzati

Definire quali voci dei metadati personalizzati devono essere indicizzate (nel compartimento specificato) e quali sono i tipi di queste chiavi. Se si configura l'indicizzazione esplicita dei metadati personalizzati, tale operazione è necessaria affinché rgw indicizzi i valori dei metadati personalizzati specificati. Altrimenti è necessaria nei casi in cui le chiavi dei metadati indicizzati siano di tipo diverso dalla stringa.

POST /BUCKET?mdsearch
x-amz-meta-search: <key [; type]> [, ...]

I campi di metadati multipli devono essere separati da virgole, è possibile forzare un tipo per un campo con un punto e virgola ";". I tipi attualmente consentiti sono stringa (default), numero intero e data. Ad esempio, se si desidera indicizzare i metadati di oggetto personalizzati x-amz-meta-year come int, x-amz-meta-date come tipo di data e x-amz-meta-title come stringa, procedere come indicato di seguito

POST /mybooks?mdsearch
x-amz-meta-search: x-amz-meta-year;int, x-amz-meta-release-date;date, x-amz-meta-title;string
Eliminazione della configurazione dei metadati personalizzati

Eliminare la configurazione del compartimento dei metadati personalizzati.

DELETE /BUCKET?mdsearch
Ottenimento della configurazione dei metadati personalizzati

Recuperare la configurazione del compartimento dei metadati personalizzati.

GET /BUCKET?mdsearch

21.8.4 Modulo di sincronizzazione cloud

Questa sezione descrive un modulo che effettua la sincronizzazione dei dati della zona con un servizio cloud remoto. La sincronizzazione è esclusivamente unidirezionale (ovvero la data non viene risincronizzata dalla zona remota). L'obiettivo principale di questo modulo è quello di abilitare la sincronizzazione dei dati con più provider di servizi cloud. Al momento, questo modulo supporta i provider cloud compatibili con AWS (S3).

Per sincronizzare i dati con un servizio cloud remoto, occorre configurare le credenziali utente. Poiché molti servizi cloud introducono dei limiti sul numero di compartimenti che ciascun utente può creare, è possibile configurare la mappatura dei compartimenti e degli oggetti di origine, delle diverse destinazioni su compartimenti diversi e dei prefissi dei compartimenti. Tenere presente che gli elenchi di accesso all'origine (ACL) non verranno conservati. È possibile mappare le autorizzazioni degli utenti di origine specifici a determinati utenti di destinazione.

A causa delle limitazioni dell'API, non è possibile conservare l'ora di modifica dell'oggetto originale e il tag dell'entità HTTP (ETag). Il modulo di sincronizzazione cloud memorizza queste informazioni come attributi di metadati sugli oggetti di destinazione.

21.8.4.1 Configurazione del modulo di sincronizzazione cloud

Di seguito sono riportati degli esempi di configurazione semplice e complessa del modulo di sincronizzazione cloud. Tenere presente che la configurazione semplice può entrare in conflitto con quella complessa.

Esempio 21.1: Configurazione semplice
{
  "connection": {
    "access_key": ACCESS,
    "secret": SECRET,
    "endpoint": ENDPOINT,
    "host_style": path | virtual,
  },
  "acls": [ { "type": id | email | uri,
    "source_id": SOURCE_ID,
    "dest_id": DEST_ID } ... ],
  "target_path": TARGET_PATH,
}
Esempio 21.2: Configurazione complessa
{
  "default": {
    "connection": {
      "access_key": ACCESS,
      "secret": SECRET,
      "endpoint": ENDPOINT,
      "host_style" path | virtual,
    },
    "acls": [
    {
      "type": id | email | uri,   #  optional, default is id
      "source_id": ID,
      "dest_id": ID
    } ... ]
    "target_path": PATH # optional
  },
  "connections": [
  {
    "connection_id": ID,
    "access_key": ACCESS,
    "secret": SECRET,
    "endpoint": ENDPOINT,
    "host_style": path | virtual,  # optional
  } ... ],
  "acl_profiles": [
  {
    "acls_id": ID, # acl mappings
    "acls": [ {
      "type": id | email | uri,
      "source_id": ID,
      "dest_id": ID
    } ... ]
  }
  ],
  "profiles": [
  {
   "source_bucket": SOURCE,
   "connection_id": CONNECTION_ID,
   "acls_id": MAPPINGS_ID,
   "target_path": DEST,          # optional
  } ... ],
}

Di seguito è riportata la spiegazione dei termini di configurazione utilizzati:

connessione

Rappresenta la connessione al servizio cloud remoto. Contiene "connection_id", "access_key", "secret", "endpoint", e "host_style".

access_key

La chiave di accesso al cloud remoto che verrà utilizzata per la connessione specifica.

secret

La chiave segreta del servizio cloud remoto.

endpoint

URL dell'endpoint del servizio cloud remoto.

host_style

Tipo di stile host ("path" o "virtual") da utilizzare per l'accesso all'endpoint cloud remoto. L'impostazione di default è "path".

acls

Matrice delle mappature dell'elenco accessi.

acl_mapping

Ciascuna struttura "acl_mapping" contiene "type", "source_id" e "dest_id". Questi valori definiscono la mutazione dell'ACL di ciascun oggetto. Le mutazioni dell'ACL consentono di convertire l'ID utente di origine in un ID di destinazione.

tipo

Tipo di ACL: "id" definisce l'ID utente, "email" definisce l'utente tramite l'indirizzo e-mail e "uri" definisce l'utente in base all'uri (gruppo).

source_id

ID dell'utente nella zona di origine.

dest_id

ID dell'utente nella destinazione.

target_path

Una stringa che definisce la modalità di creazione del percorso di destinazione. Il percorso di destinazione specifica un prefisso al quale viene aggiunto il nome dell'oggetto di origine. Il percorso di destinazione configurabile può includere una delle seguenti variabili:

SID

Una stringa univoca che rappresenta l'ID dell'istanza di sincronizzazione.

ZONEGROUP

Nome del gruppo di zone.

ZONEGROUP_ID

ID del gruppo di zone.

ZONE

Nome della zona.

ZONE_ID

ID della zona.

BUCKET

Nome del compartimento di origine.

OWNER

ID del proprietario del compartimento di origine.

Ad esempio: target_path = rgwx-ZONE-SID/OWNER/BUCKET

acl_profiles

Una matrice dei profili dell'elenco accessi.

acl_profile

Ogni profilo contiene "acls_id", che rappresenta il profilo, e una matrice "acls" che contiene un elenco delle "acl_mappings".

profili

Un elenco dei profili. Ogni profilo contiene quanto segue:

source_bucket

Il nome o il prefisso di un compartimento (se termina con *) che definisce i compartimenti di origine per il profilo.

target_path

Vedere sopra per la spiegazione.

connection_id

ID della connessione che verrà utilizzato per questo profilo.

acls_id

ID del profilo dell'ACL che verrà utilizzato per questo profilo.

21.8.4.2 Elementi configurabili specifici di S3

Il modulo di sincronizzazione cloud funziona soltanto con i back-end compatibili con AWS S3. È possibile utilizzare alcuni elementi configurabili per ottimizzarne il comportamento durante l'accesso ai servizi cloud S3:

{
  "multipart_sync_threshold": OBJECT_SIZE,
  "multipart_min_part_size": PART_SIZE
}
multipart_sync_threshold

Gli oggetti di dimensioni uguali o superiori a questo valore verranno sincronizzati con il servizio cloud tramite l'upload multipart.

multipart_min_part_size

Dimensioni minime delle parti da utilizzare durante la sincronizzazione degli oggetti con l'upload multipart.

21.8.5 Modulo di sincronizzazione degli archivi

Il modulo di sincronizzazione degli archivi utilizza la funzione del controllo versioni degli oggetti S3 in Object Gateway. È possibile configurare una zona di archiviazione per acquisire le diverse versioni degli oggetti S3 che hanno luogo nel corso del tempo nelle altre zone. Tramite i gateway associati alla zona di archiviazione, è possibile eliminare la cronologia delle versioni conservata nella zona stessa.

Grazie a questa architettura, diverse zone senza versione possono eseguire la copia speculare dei relativi dati e metadati tramite i propri gateway di zona fornendo elevata disponibilità agli utenti finali, mentre la zona di archiviazione acquisisce tutti gli aggiornamenti dei dati per consolidarli come versioni degli oggetti S3.

Includendo la zona di archiviazione in una configurazione multizona, è possibile ottenere in una zona la flessibilità della cronologia degli oggetti S3 risparmiando al contempo spazio che verrà utilizzato nelle zone rimanenti dalle repliche degli oggetti S3 con versione.

21.8.5.1 Configurazione del modulo di sincronizzazione degli archivi

Suggerimento
Suggerimento: maggiori informazioni

Fare riferimento alla Sezione 21.13, «Object Gateway multisito» per i dettagli sulla configurazione dei gateway multisito.

Fare riferimento alla Sezione 21.8, «Moduli di sincronizzazione» per i dettagli sulla configurazione dei moduli di sincronizzazione.

Per utilizzare il modulo di sincronizzazione degli archivi, occorre creare una nuova zona con tipo di livello impostato su archive:

cephuser@adm > radosgw-admin zone create --rgw-zonegroup=ZONE_GROUP_NAME \
 --rgw-zone=OGW_ZONE_NAME \
 --endpoints=http://OGW_ENDPOINT1_URL[,http://OGW_ENDPOINT2_URL,...]
 --tier-type=archive

21.9 Autenticazione LDAP

Oltre all'autenticazione utente locale di default, con Object Gateway si possono utilizzare i servizi del server LDAP per autenticare anche gli utenti.

21.9.1 Meccanismo di autenticazione

Object Gateway estrae le credenziali LDAP dell'utente da un token. Dal nome utente viene costruito un filtro di ricerca. In Object Gateway si utilizza il servizio configurato per ricercare la directory di una voce corrispondente. Se si trova la voce, Object Gateway tenta di associare il nome distinto con la password ottenuta dal token. Se le credenziali sono valide, l'associazione avrà esito positivo e verrà concesso l'accesso a Object Gateway.

È possibile limitare gli utenti consentiti impostando la base per la ricerca a un'unità organizzativa specifica o definendo un filtro di ricerca personalizzato, ad esempio richiedendo l'appartenenza di un gruppo specifico, classi di oggetti personalizzati o attributi.

21.9.2 Requisiti

  • LDAP o Active Directory: un'istanza LDAP in esecuzione accessibile da Object Gateway.

  • Account di servizio: credenziali LDAP che devono essere utilizzate da Object Gateway con autorizzazioni di ricerca.

  • Account utente: almeno un account utente nella directory LDAP.

Importante
Importante: non sovrapporre utenti LDAP e utenti locali

Non utilizzare gli stessi nomi utente per gli utenti locali e per gli utenti che vengono autenticati mediante l'uso di LDAP. Object Gateway non è in grado di distinguerli e li considera come lo stesso utente.

Suggerimento
Suggerimento: test di integrità

Utilizzare l'utility ldapsearch per verificare l'account di servizio o la connessione LDAP. Esempio:

tux > ldapsearch -x -D "uid=ceph,ou=system,dc=example,dc=com" -W \
-H ldaps://example.com -b "ou=users,dc=example,dc=com" 'uid=*' dn

Assicurarsi di utilizzare gli stessi parametri LDAP del file di configurazione Ceph per eliminare eventuali problemi.

21.9.3 Configurazione di Object Gateway per utilizzare l'autenticazione LDAP

I seguenti parametri sono correlati all'autenticazione LDAP:

rgw_ldap_uri

Specifica il server LDAP da utilizzare. Assicurarsi di utilizzare il parametro ldaps://FQDN:PORT per evitare di trasmettere apertamente le credenziali come testo normale.

rgw_ldap_binddn

Nome distinto (DN) dell'account di servizio utilizzato da Object Gateway.

rgw_ldap_secret

Password per l'account di servizio.

rgw_ldap_searchdn

Specifica la base DIT (Directory Information Tree) per la ricerca degli utenti. Questa può essere l'unità organizzativa degli utenti o una più specifica.

rgw_ldap_dnattr

Attributo che viene utilizzato nel filtro di ricerca costruito per la corrispondenza con un nome utente. A seconda del DIT, è probabile che tale attributo sia uid o cn.

rgw_search_filter

Se non è specificato, in Object Gateway il filtro di ricerca viene costruito automaticamente con l'impostazione rgw_ldap_dnattr. Utilizzare questo parametro per restringere l'elenco degli utenti consentiti con la massima flessibilità. Consultare Sezione 21.9.4, «Utilizzo di un filtro di ricerca personalizzato per limitare l'accesso degli utenti» per ulteriori informazioni.

21.9.4 Utilizzo di un filtro di ricerca personalizzato per limitare l'accesso degli utenti

È possibile utilizzare il parametro rgw_search_filter in due modi diversi.

21.9.4.1 Filtro parziale per limitare ulteriormente il filtro di ricerca costruito

Di seguito è riportato un esempio di filtro parziale:

"objectclass=inetorgperson"

In Object Gateway il filtro di ricerca verrà generato come di consueto, con il nome dell'utente ottenuto dal token del valore di rgw_ldap_dnattr. Il filtro costruito viene quindi combinato con il filtro parziale dell'attributo rgw_search_filter. A seconda del nome utente e delle impostazioni, il filtro di ricerca finale può diventare:

"(&(uid=hari)(objectclass=inetorgperson))"

In tal caso, all'utente 'hari' verrà concesso l'accesso solo se è presente nella directory LDAP, dispone di una classe oggetto 'inetorgperson' e ha specificato una password valida.

21.9.4.2 Filtro completo

Un filtro completo deve contenere un token USERNAME che verrà sostituito con il nome dell'utente durante il tentativo di autenticazione. In tal caso, il parametro rgw_ldap_dnattr non viene più utilizzato. Ad esempio, per limitare gli utenti validi a un gruppo specifico, utilizzare il filtro seguente:

"(&(uid=USERNAME)(memberOf=cn=ceph-users,ou=groups,dc=mycompany,dc=com))"
Nota
Nota: attributo memberOf

Per utilizzare l'attributo memberOf nelle richieste LDAP è richiesto il supporto lato server dall'implementazione del server LDAP specificata.

21.9.5 Generazione di un token di accesso per l'autenticazione LDAP

Il token di accesso viene generato dall'utility radosgw-token in base al nome utente e alla password LDAP. L'output è una stringa codificata base-64 che corrisponde al token di accesso effettivo. Utilizzare il client S3 preferito (fare riferimento a Sezione 21.5.1, «Accesso a Object Gateway»), specificare il token come chiave di accesso e utilizzare una chiave segreta vuota.

tux > export RGW_ACCESS_KEY_ID="USERNAME"
tux > export RGW_SECRET_ACCESS_KEY="PASSWORD"
cephuser@adm > radosgw-token --encode --ttype=ldap
Importante
Importante: credenziali non cifrate

Il token di accesso è una struttura JSON codificata base-64 e contiene le credenziali LDAP non cifrate.

Nota
Nota: Active Directory

Per Active Directory, utilizzare il parametro --ttype=ad.

21.10 Partizionamento dell'indice del compartimento

In Object Gateway i dati di indice del compartimento vengono memorizzati in un pool di indice, che per default è impostato su .rgw.buckets.index. Se si inseriscono troppi (centinaia di migliaia) oggetti in un singolo compartimento e la quota massima per il numero di oggetti per compartimento (rgw bucket default quota max objects) non è impostata, le prestazioni del pool di indice potrebbero essere compromesse. Il partizionamento dell'indice del compartimento impedisce tali riduzioni delle prestazioni e consente un numero maggiore di oggetti per compartimento.

21.10.1 Ripartizionamento dell'indice del compartimento

Se un compartimento è diventato più grande e la rispettiva configurazione iniziale non è più sufficiente, è necessario ripartizionare il pool di indice del compartimento. È possibile utilizzare il ripartizionamento automatico dell'indice del compartimento online (fare riferimento alla Sezione 21.10.1.1, «Ripartizionamento dinamico») o eseguire manualmente il ripartizionamento dell'indice del compartimento offline (fare riferimento alla Sezione 21.10.1.2, «Ripartizionamento manuale»).

21.10.1.1 Ripartizionamento dinamico

A partire da SUSE Enterprise Storage 5, è supportato il ripartizionamento del compartimento online. Viene rilevato se il numero di oggetti per compartimento raggiunge una determinata soglia e viene aumentato automaticamente il numero di partizioni utilizzate dall'indice del compartimento. Questo processo consente di ridurre il numero di voci in ciascuna partizione dell'indice del compartimento.

Il processo di rilevamento viene eseguito:

  • Quando vengono aggiunti nuovi oggetti al compartimento.

  • In un processo in background che esegue periodicamente la scansione di tutti i compartimenti. Questo è necessario per gestire i compartimenti esistenti che non vengono aggiornati.

Un compartimento per il quale è richiesto il ripartizionamento viene aggiunto alla coda reshard_log e verrà pianificato per un ripartizionamento successivo. I thread della ripartizione vengono eseguiti in background ed eseguono un ripartizionamento pianificato alla volta.

Configurazione del ripartizionamento dinamico
rgw_dynamic_resharding

Abilita o disabilita il ripartizionamento dinamico dell'indice del compartimento. I valori possibili sono "true" o "false". Il valore di default è "true".

rgw_reshard_num_logs

Numero di partizioni per il log di ripartizionamento. Il valore di default è 16.

rgw_reshard_bucket_lock_duration

Durata del bloccaggio nell'oggetto Compartimento durante il ripartizionamento. Il valore di default è 120 secondi.

rgw_max_objs_per_shard

Numero massimo di oggetti per partizione dell'indice del compartimento. Il valore di default è 10.0000 oggetti.

rgw_reshard_thread_interval

Durata massima tra i cicli di elaborazione dei thread delle ripartizioni. Il valore di default è 600 secondi.

Comandi per amministrare il processo di ripartizionamento
Aggiungere un compartimento alla coda di ripartizionamento:
cephuser@adm > radosgw-admin reshard add \
 --bucket BUCKET_NAME \
 --num-shards NEW_NUMBER_OF_SHARDS
Elencare la coda di ripartizionamento:
cephuser@adm > radosgw-admin reshard list
Elaborare/pianificare un ripartizionamento del compartimento:
cephuser@adm > radosgw-admin reshard process
Visualizzare lo stato di ripartizionamento del compartimento:
cephuser@adm > radosgw-admin reshard status --bucket BUCKET_NAME
Annullare il ripartizionamento del compartimento in sospeso:
cephuser@adm > radosgw-admin reshard cancel --bucket BUCKET_NAME

21.10.1.2 Ripartizionamento manuale

Il ripartizionamento dinamico di cui alla Sezione 21.10.1.1, «Ripartizionamento dinamico» è supportato solo per le configurazioni Object Gateway semplici. Per le configurazioni multisito, utilizzare il ripartizionamento manuale descritto nella presente sezione.

Per eseguire il ripartizionamento manuale dell'indice del compartimento offline, utilizzare il comando seguente:

cephuser@adm > radosgw-admin bucket reshard

Il comando bucket reshard consente di effettuare le seguenti operazioni:

  • Creare un nuovo set di oggetti Indice compartimento per l'oggetto specificato.

  • Distribuire tutte le voci di questi oggetti di indice.

  • Creare una nuova istanza del compartimento.

  • Collegare la nuova istanza del compartimento al compartimento in modo che tutte le nuove operazioni di indice passino attraverso i nuovi indici del compartimento.

  • Stampare il vecchio e il nuovo ID compartimento nell'output standard.

Suggerimento
Suggerimento

Quando si sceglie il numero di partizionamenti, non superare le 100.000 voci per partizionamento. I partizionamenti dell'indice del compartimento corrispondenti a numeri primi tendono a funzionare meglio in voci dell'indice del compartimento distribuite uniformemente nei partizionamenti. Ad esempio, invece di impostare 500 partizionamenti dell'indice del compartimento, è consigliabile impostarne 503, dal momento che questo è un numero primo.

Procedura 21.1: Ripartizionamento dell'indice del compartimento
  1. Assicurarsi che tutte le operazioni nel compartimento vengano interrotte

  2. Eseguire il backup dell'indice del compartimento originale:

    cephuser@adm > radosgw-admin bi list \
     --bucket=BUCKET_NAME \
     > BUCKET_NAME.list.backup
  3. Eseguire il ripartizionamento dell'indice del compartimento:

     cephuser@adm > radosgw-admin bucket reshard \
     --bucket=BUCKET_NAME \
     --num-shards=NEW_SHARDS_NUMBER
    Suggerimento
    Suggerimento: ID compartimento precedente

    Come parte del rispettivo output, questo comando consente inoltre di stampare l'ID compartimento nuovo e quello precedente.

21.10.2 Partizionamento dell'indice del compartimento per nuovi compartimenti

Sono disponibili due opzioni che influenzano il partizionamento dell'indice del compartimento:

  • Utilizzare l'opzione rgw_override_bucket_index_max_shards per le configurazioni semplici.

  • Utilizzare l'opzione bucket_index_max_shards per le configurazioni multisito.

Con l'impostazione delle opzioni su 0 si disabilita il partizionamento dell'indice del compartimento. Con un valore maggiore di 0 si abilita il partizionamento dell'indice del compartimento e si imposta il numero massimo di partizioni.

La formula seguente consente di calcolare il numero di partizioni consigliato:

number_of_objects_expected_in_a_bucket / 100000

Si tenga presente che il numero massimo di partizioni è 7877.

21.10.2.1 Configurazioni multisito

Le configurazioni multisito possono avere un pool di indice diverso per la gestione dei failover. Per configurare un numero di partizioni coerente per le zone in un gruppo di zone, impostare l'opzione bucket_index_max_shards nella configurazione del gruppo di zone:

  1. Esportare la configurazione del gruppo di zone nel file zonegroup.json:

    cephuser@adm > radosgw-admin zonegroup get > zonegroup.json
  2. Modificare il file zonegroup.json e impostare l'opzione bucket_index_max_shards per ciascuna zona con nome.

  3. Reimpostare il gruppo di zone:

    cephuser@adm > radosgw-admin zonegroup set < zonegroup.json
  4. Aggiornare il periodo. Vedere Sezione 21.13.2.6, «Aggiornare il periodo».

21.11 Integrazione di OpenStack Keystone

OpenStack Keystone è un servizio di gestione delle identità per il prodotto OpenStack. È possibile integrare Object Gateway con Keystone per configurare un gateway che accetti un token di autenticazione Keystone. Un utente autorizzato da Keystone ad accedere al gateway verrà verificato sul lato Ceph Object Gateway e verrà creato automaticamente se necessario. Object Gateway interroga Keystone periodicamente per un elenco di token revocati.

21.11.1 Configurazione di OpenStack

Prima di configurare Ceph Object Gateway, è necessario configurare OpenStack Keystone all'abilitazione del servizio Swift e fare in modo questo che punti a Ceph Object Gateway:

  1. Impostare il servizio Swift. Prima di poter utilizzare OpenStack per la convalida degli utenti Swift, creare il servizio Swift:

    tux > openstack service create \
     --name=swift \
     --description="Swift Service" \
     object-store
  2. Impostare gli endpoint. Dopo aver creato il servizio Swift, fare in modo che punti a Ceph Object Gateway. Sostituire REGION_NAME con il nome del gruppo di zone o il nome dell'area del gateway.

    tux > openstack endpoint create --region REGION_NAME \
     --publicurl   "http://radosgw.example.com:8080/swift/v1" \
     --adminurl    "http://radosgw.example.com:8080/swift/v1" \
     --internalurl "http://radosgw.example.com:8080/swift/v1" \
     swift
  3. Verificare le impostazioni. Dopo aver creato il servizio Swift e impostati gli endpoint, visualizzare questi ultimi per verificare che tutte le impostazioni siano corrette.

    tux > openstack endpoint show object-store

21.11.2 Configurazione di Ceph Object Gateway

21.11.2.1 Configurazione dei certificati SSL

Ceph Object Gateway interroga Keystone periodicamente per un elenco di token revocati. Tali richieste sono codificate e firmate. È inoltre possibile configurare Keystone in modo che vengano forniti token firmati da se stessi, a loro volta codificati e firmati. È necessario configurare il gateway in modo che possa decodificare e verificare tali messaggi firmati. Pertanto, è necessario convertire in formato "nss db" i certificati OpenSSL utilizzati da Keystone per creare le richieste:

root # mkdir /var/ceph/nss
root # openssl x509 -in /etc/keystone/ssl/certs/ca.pem \
 -pubkey | certutil -d /var/ceph/nss -A -n ca -t "TCu,Cu,Tuw"
rootopenssl x509 -in /etc/keystone/ssl/certs/signing_cert.pem \
 -pubkey | certutil -A -d /var/ceph/nss -n signing_cert -t "P,P,P"

Per consentire l'interazione tra Ceph Object Gateway e OpenStack Keystone, quest'ultimo può utilizzare un certificato SSL firmato da se stessi. Installare il certificato SSL di Keystone sul nodo sul quale è in esecuzione Ceph Object Gateway o in alternativa impostare il valore dell'opzione rgw keystone verify ssl su "false". L'impostazione di rgw keystone verify ssl su "false" significa che non verrà effettuato alcun tentativo di verifica del certificato da parte del gateway.

21.11.2.2 Configurazione delle opzioni di Object Gateway

È possibile configurare l'integrazione di Keystone utilizzando le opzioni seguenti:

rgw keystone api version

Versione dell'API Keystone. Le opzioni valide sono 2 o 3. Il valore di default è 2.

rgw keystone url

URL e numero di porta dell'API amministrativa RESTful sul server Keystone. Segue il modello SERVER_URL:PORT_NUMBER.

rgw keystone admin token

Token o segreto condiviso configurato all'interno di Keystone per le richieste amministrative.

rgw keystone accepted roles

Ruoli richiesti per provvedere alle richieste. L'impostazione di default è "Member, admin".

rgw keystone accepted admin roles

Elenco dei ruoli che consentono a un utente di ottenere privilegi amministrativi.

rgw keystone token cache size

Numero massimo di voci nella cache dei token Keystone.

rgw keystone revocation interval

Numero di secondi prima della verifica dei token revocati. Il valore di default è 15 * 60.

rgw keystone implicit tenants

Crea nuovi utenti nei rispettivi tenant con lo stesso nome. L'impostazione di default è "false".

rgw s3 auth use keystone

Se impostata su "'true", Ceph Object Gateway eseguirà l'autenticazione degli utenti tramite Keystone. L'impostazione di default è "false".

nss db path

Percorso del database NSS.

È inoltre possibile configurare il tenant del servizio Keystone, l'utente e la password per Keystone (per la versione 2.0 di OpenStack Identity API) in modo simile a quanto avviene per la configurazione dei servizi OpenStack. In tal modo, è possibile evitare di impostare il segreto condiviso rgw keystone admin token nel file di configurazione, che deve essere disabilitato negli ambienti di produzione. Le credenziali del tenant del servizio devono disporre di privilegi amministrativi. Per ulteriori dettagli, fare riferimento alla documentazione ufficiale di OpenStack Keystone (in lingua inglese). Di seguito sono riportate le opzioni di configurazione correlate:

rgw keystone admin user

Nome utente amministratore Keystone.

rgw keystone admin password

Password utente amministratore Keystone.

rgw keystone admin tenant

Tenant utente amministratore Keystone versione 2.0.

Un utente Ceph Object Gateway viene mappato a un tenant Keystone. A un utente Keystone vengono assegnati diversi ruoli, possibilmente su più tenant. Quando Ceph Object Gateway ottiene il ticket, fa riferimento ai ruoli del tenant e dell'utente assegnati a tale ticket, quindi accetta o rifiuta la richiesta in base all'impostazione definita per l'opzione rgw keystone accepted roles.

Suggerimento
Suggerimento: mappatura ai tenant OpenStack

Sebbene i tenant Swift vengano mappati per default all'utente Object Gateway, è possibile mapparli anche ai tenant OpenStack tramite l'opzione rgw keystone implicit tenants. In tal modo i container utilizzeranno lo spazio dei nomi dei tenant anziché quello globale uguale a S3 che è l'impostazione di default di Object Gateway. Per evitare di fare confusione, si consiglia di decidere il metodo di mappatura in fase di pianificazione. L'attivazione/disattivazione dell'opzione in un momento successivo influisce solo sulle richieste più recenti che vengono mappate a un tenant, mentre i compartimenti creati precedentemente continuano a risiedere in uno spazio dei nomi globale.

Per la versione 3 di OpenStack Identity API, si deve sostituire l'opzione rgw keystone admin tenant con:

rgw keystone admin domain

Domino utente amministratore Keystone.

rgw keystone admin project

Progetto utente amministratore Keystone.

21.12 Posizionamento di pool e classi di storage

21.12.1 Visualizzazione delle destinazioni di posizionamento

Le destinazioni di posizionamento consentono di controllare quali pool sono associati a un determinato compartimento. La destinazione di posizionamento di un compartimento viene selezionata al momento della creazione e non può essere modificata. Per visualizzare la regola placement_rule corrispondente, utilizzare il comando seguente:

cephuser@adm > radosgw-admin bucket stats

La configurazione del gruppo di zone contiene un elenco di destinazioni di posizionamento con una destinazione iniziale denominata "default-placement". La configurazione della zona mappa quindi ogni nome della destinazione di posizionamento del gruppo di zone allo storage locale corrispondente. Queste informazioni sul posizionamento della zona includono il nome "index_pool" per l'indice del compartimento, il nome "data_extra_pool" per i metadati relativi agli upload multipart incompleti e il nome "data_pool" per ogni classe di storage.

21.12.2 Classi di storage

Le classi di storage agevolano la personalizzazione del posizionamento dei dati di oggetto. Le regole di S3 Bucket Lifecycle consentono di automatizzare la transizione degli oggetti tra le classi di storage.

Le classi di storage vengono definite in termini di destinazioni di posizionamento. Per ogni destinazione di posizionamento del gruppo di zone sono elencate le relative classi di storage disponibili con una classe iniziale denominata "STANDARD". La configurazione della zona specifica il nome di pool "data_pool" per ciascuna delle classi di storage del gruppo di zone.

21.12.3 Configurazione dei gruppi di zone e delle zone

Per configurare il posizionamento dei gruppi di zone e delle zone, utilizzare il comando radosgw-admin. È possibile interrogare la configurazione del posizionamento del gruppo di zone tramite il comando seguente:

cephuser@adm > radosgw-admin zonegroup get
{
    "id": "ab01123f-e0df-4f29-9d71-b44888d67cd5",
    "name": "default",
    "api_name": "default",
    ...
    "placement_targets": [
        {
            "name": "default-placement",
            "tags": [],
            "storage_classes": [
                "STANDARD"
            ]
        }
    ],
    "default_placement": "default-placement",
    ...
}

Per interrogare la configurazione del posizionamento della zona, eseguire:

cephuser@adm > radosgw-admin zone get
{
    "id": "557cdcee-3aae-4e9e-85c7-2f86f5eddb1f",
    "name": "default",
    "domain_root": "default.rgw.meta:root",
    ...
    "placement_pools": [
        {
            "key": "default-placement",
            "val": {
                "index_pool": "default.rgw.buckets.index",
                "storage_classes": {
                    "STANDARD": {
                        "data_pool": "default.rgw.buckets.data"
                    }
                },
                "data_extra_pool": "default.rgw.buckets.non-ec",
                "index_type": 0
            }
        }
    ],
    ...
}
Nota
Nota: nessuna configurazione multisito precedente

Se in precedenza non è stata effettuata nessuna configurazione multisito, vengono creati un gruppo di zone e una zona "default" per l'utente e le relative modifiche apportate non saranno effettive fino al riavvio di Ceph Object Gateway. Se è stato creato un dominio per la configurazione multisito, le modifiche alla zona/al gruppo di zone verranno applicate dopo averle confermate tramite il comando radosgw-admin period update --commit.

21.12.3.1 Aggiunta di una destinazione di posizionamento

Per creare una nuova destinazione di posizionamento denominata "temporary", iniziare aggiungendola al gruppo di zone:

cephuser@adm > radosgw-admin zonegroup placement add \
      --rgw-zonegroup default \
      --placement-id temporary

Quindi, fornire le informazioni sul posizionamento della zona per la destinazione specificata:

cephuser@adm > radosgw-admin zone placement add \
      --rgw-zone default \
      --placement-id temporary \
      --data-pool default.rgw.temporary.data \
      --index-pool default.rgw.temporary.index \
      --data-extra-pool default.rgw.temporary.non-ec

21.12.3.2 Aggiunta di una classe di storage

Per aggiungere una nuova classe di storage denominata "COLD" alla destinazione "default-placement", iniziare aggiungendola al gruppo di zone:

cephuser@adm > radosgw-admin zonegroup placement add \
      --rgw-zonegroup default \
      --placement-id default-placement \
      --storage-class COLD

Quindi, fornire le informazioni sul posizionamento della zona per la classe di storage specificata:

cephuser@adm > radosgw-admin zone placement add \
      --rgw-zone default \
      --placement-id default-placement \
      --storage-class COLD \
      --data-pool default.rgw.cold.data \
      --compression lz4

21.12.4 Personalizzazione del posizionamento

21.12.4.1 Modifica del posizionamento del gruppo di zone di default

Per default, i nuovi compartimenti utilizzeranno la destinazione default_placement del gruppo di zone. È possibile modificare questa impostazione del gruppo di zone con quanto segue:

cephuser@adm > radosgw-admin zonegroup placement default \
      --rgw-zonegroup default \
      --placement-id new-placement

21.12.4.2 Modifica del posizionamento dell'utente di default

Gli utenti di Ceph Object Gateway possono sostituire la destinazione di posizionamento di default del gruppo di zone impostando un campo default_placement non vuoto nella sezione delle informazioni utente. Analogamente, la classe default_storage_class può sostituire la classe di storage STANDARD applicata per default agli oggetti.

cephuser@adm > radosgw-admin user info --uid testid
{
    ...
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    ...
}

Se la destinazione di posizionamento di un gruppo di zone contiene tag, gli utenti non potranno creare compartimenti con questa destinazione, a meno che le relative informazioni non contengano almeno un tag corrispondente nel campo "placement_tags". Ciò può essere utile per limitare l'accesso a determinati tipi di storage.

Poiché il comando radosgw-admin non è in grado di modificare direttamente questi campi, è necessario modificare manualmente il formato JSON:

cephuser@adm > radosgw-admin metadata get user:USER-ID > user.json
tux > vi user.json     # edit the file as required
cephuser@adm > radosgw-admin metadata put user:USER-ID < user.json

21.12.4.3 Modifica del posizionamento del compartimento S3 di default

Durante la creazione di un compartimento con il protocollo S3, è possibile specificare una destinazione di posizionamento come parte del LocationConstraint al fine di sostituire le destinazioni di posizionamento di default per l'utente e il gruppo di zone.

In genere, il LocationConstraint deve corrispondere all'api_name del gruppo di zone:

<LocationConstraint>default</LocationConstraint>

È possibile aggiungere una destinazione di posizionamento personalizzata all'api_name dopo i due punti:

<LocationConstraint>default:new-placement</LocationConstraint>

21.12.4.4 Modifica del posizionamento del compartimento Swift

Durante la creazione di un compartimento con il protocollo Swift, è possibile specificare una destinazione di posizionamento nell'X-Storage-Policy dell'intestazione HTTP:

X-Storage-Policy: NEW-PLACEMENT

21.12.5 Utilizzo delle classi di storage

Tutte le destinazioni di posizionamento dispongono di una classe di storage STANDARD che viene applicata per default ai nuovi oggetti. È possibile sostituire questa classe di default con la relativa default_storage_class.

Per creare un oggetto in una classe di storage non di default, specificare il nome di tale classe in un'intestazione HTTP insieme alla richiesta. Il protocollo S3 utilizza l'intestazione X-Amz-Storage-Class, mentre il protocollo Swift utilizza l'intestazione X-Object-Storage-Class.

È possibile utilizzare S3 Object Lifecycle Management per spostare i dati degli oggetti tra le classi di storage con le azioni Transition.

21.13 Object Gateway multisito

Ceph supporta diverse opzioni di configurazione multisito per Ceph Object Gateway:

Multizona

Configurazione composta da un gruppo di zone e da più zone, ognuna delle quali con una o più istanze ceph-radosgw. Ogni zona è supportata dal relativo cluster di memorizzazione Ceph. Le zone multiple all'interno di un gruppo di zone forniscono funzionalità di disaster recovery a quest'ultimo, se dovesse verificarsi un grave errore in una delle zone. Ogni zona è attiva e può ricevere operazioni di scrittura. Oltre alle funzioni di disaster recovery, più zone attive possono fungere anche da base per le reti per la consegna di contenuto.

Gruppo multizona

Ceph Object Gateway supporta più gruppi di zone, ciascuno costituito da una o più zone. Gli oggetti memorizzati nelle zone di un gruppo di zone all'interno dello stesso dominio di un altro gruppo di zone condividono uno spazio dei nomi di oggetto globale, per fare in modo che gli ID oggetto delle zone e dei gruppi di zone siano univoci.

Nota
Nota

È importante tenere presente che i gruppi di zone sincronizzano i metadati soltanto tra di loro. I dati e i metadati vengono replicati tra le zone all'interno del gruppo di zone e non vengono condivisi nel dominio.

Domini multipli

Ceph Object Gateway supporta la nozione dei domini, ovvero uno spazio dei nomi univoco a livello globale. I domini multipli sono supportati e possono contenere uno o più gruppi di zone.

È possibile configurare ciascun Object Gateway per l'esecuzione in una configurazione della zona attiva-attiva, al fine di consentire le operazioni di scrittura nelle zone non master. La configurazione multisito è memorizzata all'interno di un container denominato dominio. Il dominio memorizza gruppi di zone, zone e un intervallo di tempo con più epoche per il monitoraggio delle modifiche apportate alla configurazione. I daemon rgw gestiscono la sincronizzazione eliminando la necessità di utilizzare un agente di sincronizzazione separato. Questo approccio alla sincronizzazione consente il funzionamento di Ceph Object Gateway con una configurazione attiva-attiva invece che attiva-passiva.

21.13.1 Requisiti e presupposti

Per una configurazione multisito sono necessari almeno due cluster di memorizzazione Ceph e almeno due istanze di Ceph Object Gateway, una per ogni cluster di memorizzazione Ceph. Nella configurazione riportata di seguito si presuppone la presenza di almeno due cluster di memorizzazione Ceph in ubicazioni geograficamente separate. Tuttavia, la configurazione può funzionare nello stesso sito. Ad esempio, le zone denominate rgw1 e rgw2.

Per la configurazione multisito sono necessari un gruppo di zone master e una zona master, che sarà l'origine di riferimento per quanto riguarda tutte le operazioni dei metadati in un cluster multisito. Inoltre, ogni gruppo di zone deve contenere una zona master. I gruppi di zone possono avere una o più zone non master o secondarie. Nella presente guida, l'host rgw1 funge da zona master del gruppo di zone master e l'host rgw2 funge da zona secondaria del gruppo di zone master.

21.13.2 Configurazione di una zona master

Tutti i gateway di una configurazione multisito recuperano la rispettiva configurazione da un daemon ceph-radosgw su un host all'interno del gruppo di zone master e della zona master. Per configurare i gateway in una configurazione multisito, selezionare un'istanza ceph-radosgw per configurare il gruppo di zone master e la zona master.

21.13.2.1 Creazione di un dominio

Un dominio rappresenta uno spazio dei nomi univoco a livello globale composto da uno o più gruppi di zone contenenti una o più zone. Le zone contengono i compartimenti, che a loro volta contengono gli oggetti. Tramite i domini, Ceph Object Gateway può supportare più spazi dei nomi e le relative configurazioni sullo stesso hardware. Un dominio contiene la nozione dei periodi. Ogni periodo rappresenta lo stato della configurazione del gruppo di zone e della zona nel tempo. Ogni volta che si apporta una modifica a un gruppo di zone o a una zona, aggiornare il periodo ed eseguirne il commit. Per default, Ceph Object Gateway non crea domini per la compatibilità con le versioni precedenti. Come best practice, si consiglia di creare i domini per i nuovi cluster.

Creare un nuovo dominio denominato gold per la configurazione multisito aprendo l'interfaccia della riga di comando su un host da utilizzare nel gruppo di zone e nella zona master. Quindi, eseguire quanto riportato di seguito:

cephuser@adm > radosgw-admin realm create --rgw-realm=gold --default

Se il cluster dispone di un dominio singolo, specificare il flag --default. Se il flag --default è specificato, radosgw-admin utilizza per default questo dominio. Se il flag --default non è specificato, per aggiungere gruppi di zone e zone occorre specificare i flag --rgw-realm o ‑‑realm-id per identificare il dominio durante l'aggiunta di gruppi di zone e zone.

In seguito alla creazione del dominio, radosgw-admin ne restituisce la configurazione:

{
  "id": "4a367026-bd8f-40ee-b486-8212482ddcd7",
  "name": "gold",
  "current_period": "09559832-67a4-4101-8b3f-10dfcd6b2707",
  "epoch": 1
}
Nota
Nota

Ceph genera un ID univoco per il dominio, che ne consente la ridenominazione in caso di necessità.

21.13.2.2 Creazione di un gruppo di zone master

All'interno di un dominio deve essere presente almeno un gruppo di zone che funge da gruppo di zone master del dominio stesso. Creare un nuovo gruppo di zone master per la configurazione multisito aprendo l'interfaccia della riga di comando su un host da utilizzare nel gruppo di zone e nella zona master. Creare un gruppo di zone master denominato us eseguendo quanto riportato di seguito:

cephuser@adm > radosgw-admin zonegroup create --rgw-zonegroup=us \
--endpoints=http://rgw1:80 --master --default

Se il dominio dispone di un singolo gruppo di zone, specificare il flag ‑‑default. Se il flag ‑‑default è specificato, radosgw-admin utilizza per default questo gruppo di zone per l'aggiunta di nuove zone. Se il flag --default non è specificato, per aggiungere le zone occorre specificare i flag --rgw-zonegroup o --zonegroup-id per identificare il gruppo di zone durante l'aggiunta o la modifica delle zone.

In seguito alla creazione del gruppo di zone master, radosgw-admin ne restituisce la configurazione: Esempio:

{
 "id": "d4018b8d-8c0d-4072-8919-608726fa369e",
 "name": "us",
 "api_name": "us",
 "is_master": "true",
 "endpoints": [
     "http:\/\/rgw1:80"
 ],
 "hostnames": [],
 "hostnames_s3website": [],
 "master_zone": "",
 "zones": [],
 "placement_targets": [],
 "default_placement": "",
 "realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7"
}

21.13.2.3 Creazione di una zona master

Importante
Importante

Le zone devono essere create su un nodo Ceph Object Gateway che si trova all'interno della zona.

Creare una nuova zona master per la configurazione multisito aprendo l'interfaccia della riga di comando su un host da utilizzare nel gruppo di zone e nella zona master. Eseguire le operazioni seguenti:

cephuser@adm > radosgw-admin zone create --rgw-zonegroup=us --rgw-zone=us-east-1 \
--endpoints=http://rgw1:80 --access-key=SYSTEM_ACCESS_KEY --secret=SYSTEM_SECRET_KEY
Nota
Nota

Le opzioni --access-key e --secret non sono specificate nell'esempio precedente e vengono aggiunte alla zona al momento della creazione dell'utente nella sezione successiva.

In seguito alla creazione della zona master, radosgw-admin ne restituisce la configurazione. Esempio:

  {
      "id": "56dfabbb-2f4e-4223-925e-de3c72de3866",
      "name": "us-east-1",
      "domain_root": "us-east-1.rgw.meta:root",
      "control_pool": "us-east-1.rgw.control",
      "gc_pool": "us-east-1.rgw.log:gc",
      "lc_pool": "us-east-1.rgw.log:lc",
      "log_pool": "us-east-1.rgw.log",
      "intent_log_pool": "us-east-1.rgw.log:intent",
      "usage_log_pool": "us-east-1.rgw.log:usage",
      "reshard_pool": "us-east-1.rgw.log:reshard",
      "user_keys_pool": "us-east-1.rgw.meta:users.keys",
      "user_email_pool": "us-east-1.rgw.meta:users.email",
      "user_swift_pool": "us-east-1.rgw.meta:users.swift",
      "user_uid_pool": "us-east-1.rgw.meta:users.uid",
      "otp_pool": "us-east-1.rgw.otp",
      "system_key": {
          "access_key": "1555b35654ad1656d804",
          "secret_key": "h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=="
      },
      "placement_pools": [
          {
              "key": "us-east-1-placement",
              "val": {
                  "index_pool": "us-east-1.rgw.buckets.index",
                  "storage_classes": {
                      "STANDARD": {
                          "data_pool": "us-east-1.rgw.buckets.data"
                      }
                  },
                  "data_extra_pool": "us-east-1.rgw.buckets.non-ec",
                  "index_type": 0
              }
          }
      ],
      "metadata_heap": "",
      "realm_id": ""
  }

21.13.2.4 Eliminazione del gruppo e della zona di default

Importante
Importante

Nella procedura seguente si presuppone che sia stata eseguita una configurazione multisito tramite i sistemi appena installati che non hanno ancora iniziato a memorizzare i dati. Non eliminare la zona di default e i relativi pool se la si utilizza già per memorizzare i dati, altrimenti questi verranno eliminati e non sarà più possibile recuperarli.

L'installazione di default di Object Gateway crea un gruppo di zone di default denominato default. Eliminare la zona di default se presente. Rimuoverla innanzitutto dal gruppo di zone di default.

cephuser@adm > radosgw-admin zonegroup delete --rgw-zonegroup=default

Eliminare i pool di default dal cluster di memorizzazione Ceph, se presenti:

Importante
Importante

Nel passaggio seguente si presuppone che sia stata eseguita una configurazione multisito tramite i sistemi appena installati che non hanno ancora iniziato a memorizzare i dati. Non eliminare il gruppo di zone di default se lo si utilizza già per memorizzare i dati.

cephuser@adm > ceph osd pool rm default.rgw.control default.rgw.control --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.gc default.rgw.gc --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.log default.rgw.log --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.meta default.rgw.meta --yes-i-really-really-mean-it
Avvertimento
Avvertimento

Se il gruppo di zone di default viene eliminato, verrà eliminato anche l'utente del sistema. Se le chiavi dell'utente amministratore non vengono propagate, la funzionalità di gestione di Object Gateway del Ceph Dashboard restituirà un errore. Andare alla sezione successiva per ricreare l'utente di sistema se si procede con questo passaggio.

21.13.2.5 Creazione di utenti di sistema

I daemon ceph-radosgw devono eseguire l'autenticazione prima di eseguire il pull delle informazioni sul dominio e sul periodo. Nella zona master, creare un utente di sistema per semplificare l'autenticazione tra i daemon:

cephuser@adm > radosgw-admin user create --uid=zone.user \
--display-name="Zone User" --access-key=SYSTEM_ACCESS_KEY \
--secret=SYSTEM_SECRET_KEY --system

Annotare le variabili access_key e secret_key, poiché saranno necessarie per l'autenticazione delle zone secondarie nella zona master.

Aggiungere l'utente di sistema alla zona master:

cephuser@adm > radosgw-admin zone modify --rgw-zone=us-east-1 \
--access-key=ACCESS-KEY --secret=SECRET

Aggiornare il periodo per applicare le modifiche:

cephuser@adm > radosgw-admin period update --commit

21.13.2.6 Aggiornare il periodo

Dopo aver aggiornato la configurazione della zona master, aggiornare il periodo:

cephuser@adm > radosgw-admin period update --commit

In seguito all'aggiornamento del periodo, radosgw-admin ne restituisce la configurazione. Esempio:

{
  "id": "09559832-67a4-4101-8b3f-10dfcd6b2707", "epoch": 1, "predecessor_uuid": "", "sync_status": [], "period_map":
  {
    "id": "09559832-67a4-4101-8b3f-10dfcd6b2707", "zonegroups": [], "short_zone_ids": []
  }, "master_zonegroup": "", "master_zone": "", "period_config":
  {
     "bucket_quota": {
     "enabled": false, "max_size_kb": -1, "max_objects": -1
     }, "user_quota": {
       "enabled": false, "max_size_kb": -1, "max_objects": -1
     }
  }, "realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7", "realm_name": "gold", "realm_epoch": 1
}
Nota
Nota

Tramite l'aggiornamento del periodo viene modificata l'epoca e ci si assicura che le altre zone ricevano la configurazione aggiornata.

21.13.2.7 Avvio di Gateway

Sull'host di Object Gateway, avviare e abilitare il servizio Ceph Object Gateway. Per identificare l'FSID univoco del cluster, eseguire ceph fsid. Per identificare il nome del daemon di Object Gateway, eseguire ceph orch ps --hostname HOSTNAME.

cephuser@ogw > systemctl start ceph-FSID@DAEMON_NAME
cephuser@ogw > systemctl enable ceph-FSID@DAEMON_NAME

21.13.3 Configurazione delle zone secondarie

Le zone all'interno di un gruppo di zone replicano tutti i dati per fare in modo che in ogni zona siano presenti gli stessi dati. Durante la creazione di una zona secondaria, effettuare tutte le operazioni seguenti su un host identificato per servire tale zona.

Nota
Nota

Per aggiungere una terza zona, attenersi alle stesse procedure seguite per l'aggiunta della zona secondaria. Utilizzare un nome diverso per la zona.

Importante
Importante

Le operazioni dei metadati, come la creazione di un utente, devono essere eseguite su un host all'interno della zona master. La zona master e la zona secondaria possono ricevere le operazioni dei compartimenti, ma la zona secondaria reindirizza tali operazioni alla zona master. Se la zona master è inattiva, le operazioni dei compartimenti non andranno a buon fine.

21.13.3.1 Esecuzione del pull del dominio

Utilizzando il percorso URL, la chiave di accesso e il segreto della zona master nel gruppo di zone master, importare la configurazione del dominio nell'host. Per importare un dominio non di default, specificare il dominio tramite le opzioni di configurazione --rgw-realm o --realm-id.

cephuser@adm > radosgw-admin realm pull --url=url-to-master-zone-gateway --access-key=access-key --secret=secret
Nota
Nota

Tramite l'importazione del dominio viene recuperata anche la configurazione corrente del periodo, che viene contrassegnato come attuale anche sull'host remoto.

Se questo dominio è il dominio di default o l'unico dominio, contrassegnarlo come dominio di default.

cephuser@adm > radosgw-admin realm default --rgw-realm=REALM-NAME

21.13.3.2 Creazione di una zona secondaria

Creare una zona secondaria per la configurazione multisito aprendo l'interfaccia della riga di comando su un host da utilizzare nella zona secondaria. Specificare l'ID del gruppo di zone, il nome della nuova zona e l'endpoint corrispondente. Non utilizzare il flag --master. Per default, tutte le zone vengono eseguite in una configurazione attiva-attiva. Se la zona secondaria non deve accettare le operazioni di scrittura, specificare il flag --read-only per creare una configurazione attiva-passiva tra la zona master e la zona secondaria. Inoltre, specificare le variabili access_key e secret_key dell'utente di sistema generato memorizzate nella zona master del gruppo di zone master. Eseguire le operazioni seguenti:

cephuser@adm > radosgw-admin zone create --rgw-zonegroup=ZONE-GROUP-NAME\
                            --rgw-zone=ZONE-NAME --endpoints=URL \
                            --access-key=SYSTEM-KEY --secret=SECRET\
                            --endpoints=http://FQDN:80 \
                            [--read-only]

Esempio:

cephuser@adm > radosgw-admin zone create --rgw-zonegroup=us --endpoints=http://rgw2:80 \
--rgw-zone=us-east-2 --access-key=SYSTEM_ACCESS_KEY --secret=SYSTEM_SECRET_KEY
{
  "id": "950c1a43-6836-41a2-a161-64777e07e8b8",
  "name": "us-east-2",
  "domain_root": "us-east-2.rgw.data.root",
  "control_pool": "us-east-2.rgw.control",
  "gc_pool": "us-east-2.rgw.gc",
  "log_pool": "us-east-2.rgw.log",
  "intent_log_pool": "us-east-2.rgw.intent-log",
  "usage_log_pool": "us-east-2.rgw.usage",
  "user_keys_pool": "us-east-2.rgw.users.keys",
  "user_email_pool": "us-east-2.rgw.users.email",
  "user_swift_pool": "us-east-2.rgw.users.swift",
  "user_uid_pool": "us-east-2.rgw.users.uid",
  "system_key": {
      "access_key": "1555b35654ad1656d804",
      "secret_key": "h7GhxuBLTrlhVUyxSPUKUV8r\/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=="
  },
  "placement_pools": [
      {
          "key": "default-placement",
          "val": {
              "index_pool": "us-east-2.rgw.buckets.index",
              "data_pool": "us-east-2.rgw.buckets.data",
              "data_extra_pool": "us-east-2.rgw.buckets.non-ec",
              "index_type": 0
          }
      }
  ],
  "metadata_heap": "us-east-2.rgw.meta",
  "realm_id": "815d74c2-80d6-4e63-8cfc-232037f7ff5c"
}
Importante
Importante

Nei passaggi seguenti si presuppone che sia stata eseguita una configurazione multisito tramite i sistemi appena installati che non hanno ancora iniziato a memorizzare i dati. Non eliminare la zona di default e i relativi pool se la si utilizza già per memorizzare i dati, altrimenti questi andranno persi e non sarà più possibile recuperarli.

Eliminare la zona di default se necessario:

cephuser@adm > radosgw-admin zone rm --rgw-zone=default

Eliminare i pool di default dal cluster di memorizzazione Ceph se necessario:

cephuser@adm > ceph osd pool rm default.rgw.control default.rgw.control --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.gc default.rgw.gc --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.log default.rgw.log --yes-i-really-really-mean-it
cephuser@adm > ceph osd pool rm default.rgw.users.uid default.rgw.users.uid --yes-i-really-really-mean-it

21.13.3.3 Aggiornamento del file di configurazione Ceph

Aggiornare il file di configurazione Ceph sugli host della zona secondaria aggiungendo l'opzione di configurazione rgw_zone e il nome della zona secondaria alla voce dell'istanza.

Per farlo, eseguire il comando seguente:

cephuser@adm > ceph config set SERVICE_NAME rgw_zone us-west

21.13.3.4 Aggiornamento del periodo

Dopo aver aggiornato la configurazione della zona master, aggiornare il periodo:

cephuser@adm > radosgw-admin period update --commit
{
  "id": "b5e4d3ec-2a62-4746-b479-4b2bc14b27d1",
  "epoch": 2,
  "predecessor_uuid": "09559832-67a4-4101-8b3f-10dfcd6b2707",
  "sync_status": [ "[...]"
  ],
  "period_map": {
      "id": "b5e4d3ec-2a62-4746-b479-4b2bc14b27d1",
      "zonegroups": [
          {
              "id": "d4018b8d-8c0d-4072-8919-608726fa369e",
              "name": "us",
              "api_name": "us",
              "is_master": "true",
              "endpoints": [
                  "http:\/\/rgw1:80"
              ],
              "hostnames": [],
              "hostnames_s3website": [],
              "master_zone": "83859a9a-9901-4f00-aa6d-285c777e10f0",
              "zones": [
                  {
                      "id": "83859a9a-9901-4f00-aa6d-285c777e10f0",
                      "name": "us-east-1",
                      "endpoints": [
                          "http:\/\/rgw1:80"
                      ],
                      "log_meta": "true",
                      "log_data": "false",
                      "bucket_index_max_shards": 0,
                      "read_only": "false"
                  },
                  {
                      "id": "950c1a43-6836-41a2-a161-64777e07e8b8",
                      "name": "us-east-2",
                      "endpoints": [
                          "http:\/\/rgw2:80"
                      ],
                      "log_meta": "false",
                      "log_data": "true",
                      "bucket_index_max_shards": 0,
                      "read_only": "false"
                  }

              ],
              "placement_targets": [
                  {
                      "name": "default-placement",
                      "tags": []
                  }
              ],
              "default_placement": "default-placement",
              "realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7"
          }
      ],
      "short_zone_ids": [
          {
              "key": "83859a9a-9901-4f00-aa6d-285c777e10f0",
              "val": 630926044
          },
          {
              "key": "950c1a43-6836-41a2-a161-64777e07e8b8",
              "val": 4276257543
          }

      ]
  },
  "master_zonegroup": "d4018b8d-8c0d-4072-8919-608726fa369e",
  "master_zone": "83859a9a-9901-4f00-aa6d-285c777e10f0",
  "period_config": {
      "bucket_quota": {
          "enabled": false,
          "max_size_kb": -1,
          "max_objects": -1
      },
      "user_quota": {
          "enabled": false,
          "max_size_kb": -1,
          "max_objects": -1
      }
  },
  "realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7",
  "realm_name": "gold",
  "realm_epoch": 2
}
Nota
Nota

Tramite l'aggiornamento del periodo viene modificata l'epoca e ci si assicura che le altre zone ricevano la configurazione aggiornata.

21.13.3.5 Avvio di Object Gateway

Sull'host di Object Gateway, avviare e abilitare il servizio Ceph Object Gateway:

cephuser@adm > ceph orch start rgw.us-east-2

21.13.3.6 Verifica dello stato di sincronizzazione

Una volta configurata la zona secondaria, verificare lo stato di sincronizzazione. La sincronizzazione copia nella zona secondaria gli utenti e i compartimenti creati nella zona master.

cephuser@adm > radosgw-admin sync status

L'output fornisce lo stato delle operazioni di sincronizzazione. Esempio:

realm f3239bc5-e1a8-4206-a81d-e1576480804d (gold)
    zonegroup c50dbb7e-d9ce-47cc-a8bb-97d9b399d388 (us)
         zone 4c453b70-4a16-4ce8-8185-1893b05d346e (us-west)
metadata sync syncing
              full sync: 0/64 shards
              metadata is caught up with master
              incremental sync: 64/64 shards
    data sync source: 1ee9da3e-114d-4ae3-a8a4-056e8a17f532 (us-east)
                      syncing
                      full sync: 0/128 shards
                      incremental sync: 128/128 shards
                      data is caught up with source
Nota
Nota

Le zone secondarie accettano le operazioni dei compartimenti; tuttavia, le reindirizzano alla zona master ed eseguono la sincronizzazione con quest'ultima per ricevere i risultati di tali operazioni. Se la zona master è inattiva, le operazioni dei compartimenti eseguite sulla zona secondaria non andranno a buon fine, ma le operazioni degli oggetti riusciranno correttamente.

21.13.4 Manutenzione generale di Object Gateway

21.13.4.1 Verifica dello stato di sincronizzazione

È possibile interrogare le informazioni sullo stato della replica di una zona con:

cephuser@adm > radosgw-admin sync status
        realm b3bc1c37-9c44-4b89-a03b-04c269bea5da (gold)
    zonegroup f54f9b22-b4b6-4a0e-9211-fa6ac1693f49 (us)
         zone adce11c9-b8ed-4a90-8bc5-3fc029ff0816 (us-west)
        metadata sync syncing
              full sync: 0/64 shards
              incremental sync: 64/64 shards
              metadata is behind on 1 shards
              oldest incremental change not applied: 2017-03-22 10:20:00.0.881361s
data sync source: 341c2d81-4574-4d08-ab0f-5a2a7b168028 (us-east)
                  syncing
                  full sync: 0/128 shards
                  incremental sync: 128/128 shards
                  data is caught up with source
          source: 3b5d1a3f-3f27-4e4a-8f34-6072d4bb1275 (us-3)
                  syncing
                  full sync: 0/128 shards
                  incremental sync: 128/128 shards
                  data is caught up with source

21.13.4.2 Modifica della zona dei metadata master

Importante
Importante

Prestare la massima attenzione quando si modifica la zona dei metadata master. Se una zona non ha terminato la sincronizzazione dei metadati dalla zona master corrente, non sarà in grado di servire alcuna voce rimanente quando viene promossa al ruolo di master e queste modifiche andranno perse. Per questo motivo, prima di promuoverla come master, si consiglia di attendere che lo stato di sincronizzazione radosgw-admin della zona raggiunga lo stesso livello della sincronizzazione dei metadati. Analogamente, se le modifiche ai metadati sono in corso di elaborazione nella zona master corrente, mentre è in corso la promozione di un'altra zona al ruolo di master, è probabile che queste modifiche andranno perse. Per evitarlo, si consiglia di disattivare le istanze di Object Gateway sulla zona master precedente. In seguito alla promozione di un'altra zona, il rispettivo nuovo periodo può essere recuperato con il pull del periodo di radosgw-admin ed è possibile riavviare i gateway.

Per promuovere una zona (ad esempio, la zona us-west nel gruppo di zone us) a metadata master, eseguire i comandi seguenti su tale zona:

cephuser@ogw > radosgw-admin zone modify --rgw-zone=us-west --master
cephuser@ogw > radosgw-admin zonegroup modify --rgw-zonegroup=us --master
cephuser@ogw > radosgw-admin period update --commit

In questo modo viene generato un nuovo periodo che verrà inviato ad altre zone dalle istanze di Object Gateway nella zona us-west.

21.13.5 Esecuzione del failover e del disaster recovery

Qualora la zona master dovesse venire meno, eseguire il failover nella zona secondaria per il disaster recovery.

  1. Rendere la zona secondaria la zona master e di default. Esempio:

    cephuser@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --master --default

    Per default, Ceph Object Gateway viene eseguito in una configurazione attiva-attiva. Se si è configurato il cluster per l'esecuzione in una configurazione attiva-passiva, la zona secondaria è di sola lettura. Rimuovere lo stato --read-only per consentire alla zona di ricevere le operazioni di scrittura. Esempio:

    cephuser@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --master --default \
                                                       --read-only=false
  2. Aggiornare il periodo per applicare le modifiche:

    cephuser@adm > radosgw-admin period update --commit
  3. Riavviare Ceph Object Gateway:

    cephuser@adm > ceph orch restart rgw

Se la zona master precedente viene recuperata, ripristinare l'operazione.

  1. Dalla zona recuperata, eseguire il pull della configurazione del dominio più recente dall'attuale zona master.

    cephuser@adm > radosgw-admin realm pull --url=URL-TO-MASTER-ZONE-GATEWAY \
                               --access-key=ACCESS-KEY --secret=SECRET
  2. Rendere la zona recuperata la zona master e di default:

    cephuser@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --master --default
  3. Aggiornare il periodo per applicare le modifiche:

    cephuser@adm > radosgw-admin period update --commit
  4. Riavviare Ceph Object Gateway nella zona recuperata:

    cephuser@adm > ceph orch restart rgw@rgw
  5. Se la configurazione della zona secondaria deve essere in sola lettura, aggiornare la zona secondaria:

    cephuser@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --read-only
  6. Aggiornare il periodo per applicare le modifiche:

    cephuser@adm > radosgw-admin period update --commit
  7. Riavviare Ceph Object Gateway nella zona secondaria:

    cephuser@adm > ceph orch restart@rgw

22 Ceph iSCSI Gateway

Questo capitolo è incentrato sui task amministrativi correlati a iSCSI Gateway. Per la procedura di distribuzione, fare riferimento a Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.4.3.5 “Distribuzione di iSCSI Gateway”.

22.1 Destinazioni gestite ceph-iscsi

Questo capitolo illustra come eseguire la connessione a destinazioni gestite ceph-iscsi da client sui quali è in esecuzione Linux, Microsoft Windows o VMware.

22.1.1 Connessione a open-iscsi

La connessione a destinazioni iSCSI supportate da ceph-iscsi con open-iscsi è un processo a due passaggi. Innanzi tutto l'iniziatore deve rilevare le destinazioni iSCSI disponibili sull'host gateway, quindi deve eseguire il login e mappare le unità logiche (LU) disponibili.

Per entrambi i passaggi è richiesto che il daemon open-iscsi sia in esecuzione. Il modo in cui si avvia il daemon open-iscsi dipende dalla distribuzione Linux corrente:

  • Sugli host SUSE Linux Enterprise Server (SLES) e Red Hat Enterprise Linux (RHEL), eseguire systemctl start iscsid (o service iscsid start se systemctl non è disponibile).

  • Sugli host Debian e Ubuntu, eseguire systemctl start open-iscsi (o service open-iscsi start).

Se sull'host dell'iniziatore viene eseguito SUSE Linux Enterprise Server, consultare la pagina all'indirizzo https://documentation.suse.com/sles/15-SP2/html/SLES-all/cha-iscsi.html#sec-iscsi-initiator per ulteriori informazioni su come eseguire la connessione a una destinazione iSCSI.

Per qualsiasi altra distribuzione Linux che supporta open-iscsi, procedere per rilevare le destinazioni sul gateway ceph-iscsi in uso (in questo esempio viene utilizzato iscsi1.example.com come indirizzo del portale; per l'accesso multipath ripetere i passaggi con iscsi2.example.com):

root # iscsiadm -m discovery -t sendtargets -p iscsi1.example.com
192.168.124.104:3260,1 iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol

Quindi, eseguire il login al portale. Se il login viene completato correttamente, tutte le unità logiche supportate da RBD presenti sul portale saranno immediatamente disponibili sul bus SCSI del sistema:

root # iscsiadm -m node -p iscsi1.example.com --login
Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol, portal: 192.168.124.104,3260] (multiple)
Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol, portal: 192.168.124.104,3260] successful.

Ripetere il processo per gli altri indirizzi IP o host del portale.

Se nel sistema è installata l'utility lsscsi, utilizzarla per enumerare i dispositivi SCSI disponibili nel sistema:

lsscsi
[8:0:0:0]    disk    SUSE     RBD              4.0   /dev/sde
[9:0:0:0]    disk    SUSE     RBD              4.0   /dev/sdf

In una configurazione multipath (dove due dispositivi iSCSI connessi rappresentano un'unica e medesima unità logica), è inoltre possibile esaminare lo stato del dispositivo multipath con l'utility multipath:

root # multipath -ll
360014050cf9dcfcb2603933ac3298dca dm-9 SUSE,RBD
size=49G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 8:0:0:0 sde 8:64 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
`- 9:0:0:0 sdf 8:80 active ready running

Adesso è possibile utilizzare il dispositivo multipath come qualsiasi dispositivo di blocco. Ad esempio, è possibile utilizzare il dispositivo come volume fisico per Linux Logical Volume Management (LVM) oppure è possibile creare semplicemente un file system su di esso. Nell'esempio riportato di seguito è illustrato come creare un file system XFS su un volume iSCSI multipath appena connesso:

root # mkfs -t xfs /dev/mapper/360014050cf9dcfcb2603933ac3298dca
log stripe unit (4194304 bytes) is too large (maximum is 256KiB)
log stripe unit adjusted to 32KiB
meta-data=/dev/mapper/360014050cf9dcfcb2603933ac3298dca isize=256    agcount=17, agsize=799744 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=12800000, imaxpct=25
         =                       sunit=1024   swidth=1024 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=6256, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Poiché XFS è un file system non in cluster, è possibile montarlo solo su un singolo nodo dell'iniziatore iSCSI in un determinato momento.

Se ogni volta che si desidera interrompere l'uso delle unità logiche iSCSI associate a una determinata destinazione, eseguire il comando seguente:

root # iscsiadm -m node -p iscsi1.example.com --logout
Logging out of session [sid: 18, iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol, portal: 192.168.124.104,3260]
Logout of [sid: 18, target: iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol, portal: 192.168.124.104,3260] successful.

Come con la rilevazione e il login, è necessario ripetere la procedura di logout per tutti gli indirizzi IP o i nomi host del portale.

22.1.1.1 Configurazione multipath

La configurazione multipath viene aggiornata sui client o sugli iniziatori ed è indipendente da qualsiasi configurazione ceph-iscsi. Selezionare una strategia prima di utilizzare la memorizzazione a blocchi. Dopo aver modificato /etc/multipath.conf, riavviare multipathd con

root # systemctl restart multipathd

Per una configurazione attiva-passiva con nomi intuitivi, aggiungere

defaults {
  user_friendly_names yes
}

a /etc/multipath.conf. Dopo aver connesso le destinazioni, eseguire

root # multipath -ll
mpathd (36001405dbb561b2b5e439f0aed2f8e1e) dm-0 SUSE,RBD
size=2.0G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 2:0:0:3 sdl 8:176 active ready running
|-+- policy='service-time 0' prio=1 status=enabled
| `- 3:0:0:3 sdj 8:144 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
  `- 4:0:0:3 sdk 8:160 active ready running

Notare lo stato di ciascun collegamento. Per una configurazione attiva-attiva, aggiungere

defaults {
  user_friendly_names yes
}

devices {
  device {
    vendor "(LIO-ORG|SUSE)"
    product "RBD"
    path_grouping_policy "multibus"
    path_checker "tur"
    features "0"
    hardware_handler "1 alua"
    prio "alua"
    failback "immediate"
    rr_weight "uniform"
    no_path_retry 12
    rr_min_io 100
  }
}

a /etc/multipath.conf. Riavviare multipathd ed eseguire

root # multipath -ll
mpathd (36001405dbb561b2b5e439f0aed2f8e1e) dm-3 SUSE,RBD
size=2.0G features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
`-+- policy='service-time 0' prio=50 status=active
  |- 4:0:0:3 sdj 8:144 active ready running
  |- 3:0:0:3 sdk 8:160 active ready running
  `- 2:0:0:3 sdl 8:176 active ready running

22.1.2 Connessione di Microsoft Windows (iniziatore iSCSI Microsoft)

Per eseguire la connessione a una destinazione iSCSI SUSE Enterprise Storage da un server Windows 2012, seguire la procedura indicata di seguito:

  1. Aprire Windows Server Manager. Da Dashboard, selezionare Tools (Strumenti) › iSCSI Initiator (Iniziatore iSCSI). Viene visualizzata la finestra di dialogo iSCSI Initiator Properties (Proprietà iniziatore iSCSI). Selezionare la scheda Rilevazione:

    Proprietà iniziatore iSCSI
    Figura 22.1: Proprietà iniziatore iSCSI
  2. Nella finestra di dialogo Discover Target Portal (Rileva portale di destinazione) immettere il nome host o l'indirizzo IP della destinazione nel campo Target (Destinazione), quindi fare clic su OK:

    Rilevazione portale di destinazione
    Figura 22.2: Rilevazione portale di destinazione
  3. Ripetere il processo per tutti gli altri nomi host o indirizzi IP del gateway Al termine, rivedere l'elenco Portali di destinazione:

    Portali di destinazione
    Figura 22.3: Portali di destinazione
  4. Quindi, passare alla scheda Destinazioni e rivedere le destinazioni rilevate.

    Destinazioni
    Figura 22.4: Destinazioni
  5. Fare clic su Esegui connessione nella scheda Destinazioni. Viene visualizzata la finestra di dialogo Connect To Target (Connetti a destinazione). Selezionare la casella di controllo Enable Multi-path (Abilita multipath) per abilitare I/O multipath (MPIO), quindi fare clic su OK:

  6. Quando si chiude la finestra di dialogo Connect to Target (Connetti a destinazione), selezionare Properties (Proprietà) per rivedere le proprietà della destinazione:

    Proprietà destinazione iSCSI
    Figura 22.5: Proprietà destinazione iSCSI
  7. Selezionare Dispositivi e fare clic su MPIO per rivedere la configurazione multipath I/O:

    Dettagli dispositivo
    Figura 22.6: Dettagli dispositivo

    L'impostazione di default per Policy di bilanciamento del carico è Round Robin con sottoinsieme. Se si preferisce una configurazione solo failover, modificare l'impostazione in Solo failover.

In tal modo si conclude la configurazione dell'iniziatore iSCSI. I volumi iSCSI adesso sono disponibili come qualsiasi altro dispositivo SCSI ed è possibile inizializzarli per utilizzarli come volumi e unità. Fare clic su OK per chiudere la finestra di dialogo iSCSI Initiator Properties (Proprietà iniziatore iSCSI) e continuare con il ruolo File and Storage Services (Servizi file e memorizzazione) nel dashboard di Server Manager.

Osservare il volume appena connesso. Viene identificato come SUSE RBD SCSI Multi-Path Drive (Unità multipath SCSI RBD SUSE) sul bus iSCSI e inizialmente è contrassegnato con lo stato Offline e un tipo di tabella delle partizioni Unknown (Sconosciuta). Se il nuovo volume non viene visualizzato immediatamente, selezionare Rescan Storage (Effettua di nuovo scansione memorizzazione) dalla casella di riepilogo Tasks (Task) per effettuare di nuovo la scansione del bus iSCSI.

  1. Fare clic con il pulsante destro del mouse sul volume iSCSI e selezionare New Volume (Nuovo volume) dal menu di scelta rapida. Viene visualizzata la New Volume Wizard (Procedura guidata per il nuovo volume). Fare clic su Avanti, evidenziare il volume iSCSI appena connesso e fare clic su Avanti per iniziare.

    Procedura guidata per il nuovo volume
    Figura 22.7: Procedura guidata per il nuovo volume
  2. Inizialmente il dispositivo è vuoto e non contiene una tabella delle partizioni. Quando richiesto, confermare la finestra di dialogo in cui viene indicato che il volume verrà inizializzato con una tabella delle partizioni GPT:

    Prompt del disco offline
    Figura 22.8: Prompt del disco offline
  3. Selezionare le dimensioni del volume. Di norma si utilizza l'intera capacità del dispositivo. Assegnare quindi una lettera di unità o un nome directory in cui sarà disponibile il volume appena creato. Quindi, selezionare un a file system da creare sul nuovo volume e infine confermare le selezioni con Crea per completare la creazione del volume:

    Conferma selezioni volume
    Figura 22.9: Conferma selezioni volume

    Al termine del processo, rivedere i risultati e fare clic su Chiudi per concludere l'inizializzazione dell'unità. Una volta completata l'inizializzazione, il volume (e il rispettivo file system NTFS) diventa disponibile come un'unità locale appena inizializzata.

22.1.3 Connessione di VMware

  1. Per eseguire la connessione a volumi iSCSI gestiti da ceph-iscsi, è necessario che sia configurato un adattatore software iSCSI. Se nella configurazione vSphere non è presente alcun adattatore di questo tipo, crearne uno selezionando Configurazione › Adattatori di memorizzazione › Aggiungi › iSCSI Software initiator (Iniziatore software iSCSI).

  2. Quando disponibili, selezionare le proprietà dell'adattatore facendo clic con il pulsante destro del mouse sull'adattatore e selezionando Proprietà dal menu di scelta rapida:

    Proprietà iniziatore iSCSI
    Figura 22.10: Proprietà iniziatore iSCSI
  3. Nella finestra di dialogo iSCSI Software Initiator (Iniziatore software iSCSI), fare clic sul pulsante Configure (Configura). Accedere quindi alla scheda Dynamic Discovery (Rilevazione dinamica) e selezionare Add (Aggiungi).

  4. Immettere l'indirizzo IP o il nome host del gateway iSCSI ceph-iscsi. Se si eseguono più servizi iSCSI Gateway in una configurazione di failover, ripetere il passaggio per tutti i gateway che vengono attivati.

    Aggiunta del server di destinazione
    Figura 22.11: Aggiunta del server di destinazione

    Una volta eseguito l'accesso a tutti i servizi iSCSI Gateway, fare clic su OK nella finestra di dialogo per iniziare una nuova scansione dell'adattatore iSCSI.

  5. Al completamento della nuova scansione, il nuovo dispositivo iSCSI viene visualizzato sotto l'elenco Adattatori di memorizzazione nel riquadro Dettagli. Per i dispositivi multipath adesso è possibile fare clic con il pulsante destro del mouse sull'adattatore e selezionare Gestisci percorsi nel menu di scelta rapida:

    Gestione dei dispositivi multipath
    Figura 22.12: Gestione dei dispositivi multipath

    Adesso dovrebbero essere visualizzati tutti i percorsi con un indicatore luminoso verde in corrispondenza dello Stato. Uno dei percorsi deve essere contrassegnato come Attivo (I/O) e tutti gli altri semplicemente come Attivo:

    Elenco dei percorsi per multipath
    Figura 22.13: Elenco dei percorsi per multipath
  6. Adesso è possibile passare da Adattatori di memorizzazione all'elemento etichettato Storage (Memorizzazione). Nell'angolo in alto a destra del riquadro, selezionare Add Storage... (Aggiungi memorizzazione...) per visualizzare la finestra di dialogo Add Storage (Aggiungi memorizzazione). Quindi, selezionare Disk/LUN (Disco/LUN) e fare clic su Avanti. Il dispositivo iSCSI appena creato viene visualizzato nell'elenco Seleziona disco/LUN. Selezionarlo e fare clic su Avanti per continuare:

    Finestra di dialogo Aggiungi memorizzazione
    Figura 22.14: Finestra di dialogo Aggiungi memorizzazione

    Fare clic su Avanti per accettare il layout del disco di default disk.

  7. Nel riquadro Properties (Proprietà), assegnare un nome al nuovo archivio dati e fare clic su Next (Avanti). Accettare l'impostazione di default per utilizzare l'intero spazio del volume per l'archivio dati o selezionare Custom Space Setting (Impostazione spazio personalizzato) per un archivio dati più piccolo:

    Impostazione spazio personalizzato
    Figura 22.15: Impostazione spazio personalizzato

    Fare clic su Finish (Fine) per completare la creazione dell'archivio dati.

    Il nuovo archivio dati viene visualizzato nell'elenco degli archivi dati ed è possibile selezionarlo per recuperare i dettagli. Adesso è possibile utilizzare il volume iSCSI supportato ceph-iscsi come qualsiasi altro archivio dati vSphere.

    Panoramica dell'archivio dati iSCSI
    Figura 22.16: Panoramica dell'archivio dati iSCSI

22.2 Conclusioni

ceph-iscsi è un componente chiave di SUSE Enterprise Storage 7 che consente di accedere a uno storage a blocchi distribuito e altamente disponibile da qualsiasi server o client in grado di leggere il protocollo iSCSI. Mediante l'uso di ceph-iscsi su uno o più host gateway iSCSI, le immagini Ceph RBD diventano disponibili come unità logiche (LU) associate a destinazioni iSCSI, cui è possibile accedere nella modalità facoltativa di bilanciamento del carico ad elevata disponibilità.

Poiché tutta la configurazione ceph-iscsi è memorizzata nell'archivio dati Ceph RADOS, gli host gateway ceph-iscsi sono di conseguenza sprovvisti di stato permanente, pertanto è possibile sostituirli, aumentarli o ridurli in base alle esigenze. Come risultato, SUSE Enterprise Storage 7 consente ai clienti SUSE di eseguire una tecnologia di storage aziendale effettivamente distribuita, altamente disponibile, resiliente e con funzioni di riparazione automatica sull'hardware utilizzato e su una piattaforma interamente open source.

23 File system in cluster

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 Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.4.3.3 “Distribuzione dei Metadata Server”.

23.1 Montaggio di CephFS

Una volta creato il file system ed MDS è attivo, si è pronti per montare il file da un host client.

23.1.1 Preparazione del client

Se sull'host client è in esecuzione SUSE Linux Enterprise 12 SP2 o versioni successive, 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 7 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.

Importante
Importante

Senza il pacchetto ceph-common (e pertanto senza l'helper mount.ceph), occorrerà utilizzare gli IP dei monitor al posto del loro nome, poiché il client kernel non sarà in grado di eseguire la risoluzione del nome.

La sintassi mount di base è:

root # 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 Creazione di un file segreto

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:

Procedura 23.1: Creazione di una chiave segreta
  1. Visualizzare la chiave per l'utente specificato in un file portachiavi:

    cephuser@adm > cat /etc/ceph/ceph.client.admin.keyring
  2. 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==
  3. Creare un file in cui il nome utente costituisce parte del nome file, ad esempio /etc/ceph/admin.secret per l'utente admin.

  4. Incollare il valore della chiave nel file creato al passaggio precedente.

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

23.1.3 Montaggio di CephFS

È 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==
Suggerimento
Suggerimento: specifica di più monitor

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
Importante
Importante: accesso in lettura alla directory radice

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.

23.2 Smontaggio di CephFS

Per smontare CephFS, utilizzare il comando umount:

root # umount /mnt/cephfs

23.3 Montaggio di CephFS in /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

23.4 Più daemon MDS attivi (MDS attivo-attivo)

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.

23.4.1 Utilizzo dell'MDS attivo-attivo

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.

23.4.2 Aumento delle dimensioni del cluster attivo MDS

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:

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 2
cephuser@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".

Importante
Importante: daemon in standby

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.

23.4.3 Riduzione del numero di livelli

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:

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 1
cephuser@adm > ceph status
  [...]
  services:
    [...]
    mds: cephfs-1/1/1 up  {0=node2=up:active}, 1 up:standby
    [...]

23.4.4 Aggiunta manuale di un albero della directory a un livello

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

23.5 Gestione del failover

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.

23.5.1 Configurazione della riproduzione in standby

È possibile configurare ciascun file system CephFS per aggiungere daemon standby-replay. Questi daemon standby-replay seguono il journal dei metadati dell'MDS attivo per ridurre il tempo di failover nel caso in cui quest'ultimo dovesse diventare non disponibile. Ogni MDS attivo può essere seguito da un solo daemon standby-replay.

Configurare la riproduzione in standby su un file system con il comando seguente:

cephuser@adm > ceph fs set FS-NAME allow_standby_replay BOOL

Se impostati, i monitor assegneranno i daemon standby-replay disponibili per fare in modo che seguano gli MDS attivi su tale file system.

Una volta che un MDS entra in stato di riproduzione in standby, verrà utilizzato solo come standby per il livello seguito. Se un altro livello genera un errore, il daemon standby-replay non verrà utilizzato come sostituto, anche se non ve ne sono altri in standby disponibili. Per questo motivo, se si utilizza la riproduzione in standby, è consigliabile che per ogni MDS attivo sia presente un daemon standby-replay.

23.6 Impostazione delle quote CephFS

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

23.6.1 Limitazioni delle quote CephFS

L'uso delle quote con CephFS pone le limitazioni seguenti:

Le quote sono cooperative e non concorrenziali.

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.

Le quote non sono precise.

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 implementate nel client kernel a partire dalla versione 4.17.

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 7. 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. I kernel SLE12-SP3 (e versioni successive) includono già i backport necessari per la gestione delle quote.

In presenza di restrizioni di montaggio basate sul percorso, prestare attenzione quando si configurano le quote.

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). Se si applicano restrizioni di accesso basate sul percorso, assicurarsi di configurare la quota sulla directory a cui il client può accedere (ad esempio /home/user o /home/user/quota_dir).

23.6.2 Configurazione delle quote CephFS

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

cephuser@mds > setfattr -n ceph.quota.max_bytes -v 100000000 /SOME/DIRECTORY

Per impostare una quota di 10.000 file, eseguire:

cephuser@mds > setfattr -n ceph.quota.max_files -v 10000 /SOME/DIRECTORY

Per visualizzare l'impostazione della quota, eseguire:

cephuser@mds > getfattr -n ceph.quota.max_bytes /SOME/DIRECTORY
cephuser@mds > getfattr -n ceph.quota.max_files /SOME/DIRECTORY
Nota
Nota: quota non impostata

Se il valore dell'attributo esteso è "0", la quota non è impostata.

Per rimuovere una quota, eseguire:

cephuser@mds > setfattr -n ceph.quota.max_bytes -v 0 /SOME/DIRECTORY
cephuser@mds > setfattr -n ceph.quota.max_files -v 0 /SOME/DIRECTORY

23.7 Gestione degli snapshot CephFS

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.

Importante
Importante: file system multipli

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.

23.7.1 Creazione di snapshot

La funzione delle snapshot CephFS è abilitata per default sui nuovi file system. Per abilitarla sui file system esistenti, eseguire:

cephuser@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.

Nota
Nota

Si tratta di una sottodirectory virtuale. Non è riportata nell'elenco di directory della directory superiore, ma il nome .snap non può essere utilizzato come nome di file o directory. Per accedere alla directory .snap, è necessario farlo esplicitamente, ad esempio:

tux > ls -la /CEPHFS_MOUNT/.snap/
Importante
Importante: limitazioni dei client kernel

I client kernel CephFS hanno una limitazione: non sono in grado di gestire più di 400 snapshot in un file system. 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.

Suggerimento
Suggerimento: nome personalizzato della sottodirectory degli snapshot

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

23.7.2 Eliminazione degli snapshot

Per eliminare una snapshot, rimuovere la relativa sottodirectory all'interno della directory .snap:

tux > rmdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME

24 Esportazione dei dati Ceph tramite Samba

Questo capitolo descrive come esportare i dati memorizzati in un cluster Ceph tramite una condivisione Samba/CIFS per potervi accedere con facilità dai computer client Windows*. Contiene inoltre informazioni utili per la configurazione di un gateway Samba Ceph in modo che si unisca ad Active Directory nel dominio Windows* per eseguire l'autenticazione e l'autorizzazione degli utenti.

Nota
Nota: prestazioni del gateway Samba

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 CephFS tramite un gateway Samba potrebbe ridurre notevolmente le prestazioni dell'applicazione rispetto ai client Ceph nativi.

24.1 Esportazione di CephFS tramite la condivisione Samba

Avvertimento
Avvertimento: accesso su più protocolli

I client CephFS e NFS nativi non sono limitati dai blocchi di file ottenuti tramite Samba e viceversa. I dati delle applicazioni basate sul blocco di file su più protocolli potrebbero risultare danneggiati se l'accesso ai percorsi della condivisione Samba supportati da CephFS viene effettuato in altri modi.

24.1.1 Configurazione ed esportazione dei pacchetti Samba

Per configurare ed esportare una condivisione Samba, è necessario che siano installati i pacchetti seguenti: samba-ceph e samba-winbind. Installarli se non lo sono:

cephuser@smb > zypper install samba-ceph samba-winbind

24.1.2 Esempio di gateway singolo

Per prepararsi all'esportazione di una condivisione Samba, scegliere un nodo appropriato da utilizzare come gateway Samba. Il nodo deve disporre dell'accesso alla rete del client Ceph, oltre che di sufficienti risorse di CPU, memoria e networking.

La funzionalità di failover può essere fornita con CTDB e SUSE Linux Enterprise High Availability Extension. Per ulteriori informazioni sulla configurazione ad alta disponibilità, fare riferimento alla Sezione 24.1.3, «Configurazione dell'elevata disponibilità».

  1. Accertare che nel cluster sia già esistente un CephFS operativo.

  2. Creare un portachiavi gateway Samba specifico sul nodo admin Ceph e copiarlo in entrambi i nodi gateway Samba:

    cephuser@adm > ceph auth get-or-create client.samba.gw mon 'allow r' \
     osd 'allow *' mds 'allow *' -o ceph.client.samba.gw.keyring
    cephuser@adm > scp ceph.client.samba.gw.keyring SAMBA_NODE:/etc/ceph/

    Sostituire SAMBA_NODE con il nome del nodo gateway Samba.

  3. I passaggi seguenti vengono eseguiti sul nodo gateway Samba. Installare Samba insieme al pacchetto di integrazione Ceph:

    cephuser@smb > sudo zypper in samba samba-ceph
  4. Sostituire i contenuti di default del file /etc/samba/smb.conf con quanto segue:

    [global]
      netbios name = SAMBA-GW
      clustering = no
      idmap config * : backend = tdb2
      passdb backend = tdbsam
      # disable print server
      load printers = no
      smbd: backgroundqueue = no
    
    [SHARE_NAME]
      path = CEPHFS_MOUNT
      read only = no
      oplocks = no
      kernel share modes = no

    Il percorso CEPHFS_MOUNT riportato sopra deve essere montato prima dell'avvio di Samba con una configurazione di condivisione del kernel CephFS. Vedere Sezione 23.3, «Montaggio di CephFS in /etc/fstab».

    La configurazione di condivisione sopra utilizza il client CephFS del kernel Linux, consigliato per motivi di prestazioni. In alternativa, è possibile utilizzare anche il modulo vfs_ceph Samba per la comunicazione con il cluster Ceph. Le istruzioni sono riportate di seguito per scopi di legacy e non sono consigliate per nuove le distribuzioni Samba:

    [SHARE_NAME]
      path = /
      vfs objects = ceph
      ceph: config_file = /etc/ceph/ceph.conf
      ceph: user_id = samba.gw
      read only = no
      oplocks = no
      kernel share modes = no
    Suggerimento
    Suggerimento: oplocks e modalità di condivisione

    Gli oplocks (noti anche come lease SMB2+) consentono di ottenere migliori prestazioni tramite un'aggressiva memorizzazione nella cache del client, ma sono poco sicuri se Samba è distribuito con altri client CephFS, come mount.ceph, FUSE o NFS Ganesha del kernel.

    Se l'accesso al percorso del file system CephFS è gestito esclusivamente da Samba, è possibile abilitare il parametro degli oplocks in sicurezza.

    Attualmente, è necessario disabilitare kernel share modes nelle condivisioni in esecuzione con il modulo vfs di CephFS per consentire il corretto funzionamento del file serving.

    Importante
    Importante: autorizzazione dell'accesso

    Samba mappa gli utenti e i gruppi SMB agli account locali. È possibile assegnare agli utenti locali una password per l'accesso alla condivisione Samba tramite:

    root # smbpasswd -a USERNAME

    Per operazioni I/O corrette, l'elenco di controllo dell'accesso (ACL) del percorso della condivisione deve consentire l'accesso all'utente connesso tramite Samba. È possibile modificare l'ACL effettuando un montaggio temporaneo tramite il client del kernel CephFS e utilizzando le utility chmod, chown o setfacl rispetto al percorso della condivisione. Ad esempio, per consentire l'accesso a tutti gli utenti, eseguire:

    root # chmod 777 MOUNTED_SHARE_PATH

24.1.2.1 Avvio dei servizi Samba

Avviare o riavviare i servizi Samba stand-alone utilizzando i comandi seguenti:

root # systemctl restart smb.service
root # systemctl restart nmb.service
root # systemctl restart winbind.service

Per assicurarsi che i servizi Samba vengano avviati al momento dell'avvio, abilitarli tramite:

root # systemctl enable smb.service
root # systemctl enable nmb.service
root # systemctl enable winbind.service
Suggerimento
Suggerimento: servizi nmb e winbind facoltativi

Se non è necessaria l'esplorazione di condivisione di rete, non occorre abilitare e avviare il servizio nmb.

Il servizio winbind è necessario soltanto se viene configurato come membro del dominio Active Directory. Vedere Sezione 24.2, «Unione di gateway Samba e Active Directory».

24.1.3 Configurazione dell'elevata disponibilità

Importante
Importante: failover invisibile all'utente non supportato

Sebbene la disponibilità della distribuzione multi-nodo Samba + CTDB sia molto più elevata rispetto a quella a nodo singolo (vedere il Capitolo 24, Esportazione dei dati Ceph tramite Samba), il failover invisibile all'utente lato client non è supportato. In caso di errore del nodo gateway Samba, è probabile che si verifichi una breve interruzione delle attività delle applicazioni.

Questa sezione fornisce un esempio di come configurare una configurazione ad alta disponibilità a due nodi dei server Samba. La configurazione richiede SUSE Linux Enterprise High Availability Extension. I due nodi sono denominati earth (192.168.1.1) e mars (192.168.1.2).

Per informazioni su SUSE Linux Enterprise High Availability Extension, vedere https://documentation.suse.com/sle-ha/15-SP1/.

Inoltre, due indirizzi IP virtuali mobili consentono ai client di connettersi al servizio indipendentemente dal nodo fisico sul quale è in esecuzione. 192.168.1.10 è utilizzato per amministrazione del cluster con Hawk2 e 192.168.2.1 esclusivamente per esportazioni CIFS. Ciò semplifica la successiva applicazione delle limitazioni di sicurezza.

La procedura seguente descrive l'installazione di esempio. Ulteriori informazioni sono disponibili all'indirizzo https://documentation.suse.com/sle-ha/15-SP2/html/SLE-HA-all/art-sleha-install-quick.html.

  1. Creare un portachiavi gateway Samba specifico sul nodo admin e copiarlo su entrambi i nodi:

    cephuser@adm > ceph auth get-or-create client.samba.gw mon 'allow r' \
        osd 'allow *' mds 'allow *' -o ceph.client.samba.gw.keyring
    cephuser@adm > scp ceph.client.samba.gw.keyring earth:/etc/ceph/
    cephuser@adm > scp ceph.client.samba.gw.keyring mars:/etc/ceph/
  2. La configurazione SLE ad elevata disponibilità richiede un dispositivo di isolamento per evitare una situazione split-brain quando i nodi del cluster attivi non sono più sincronizzati. A questo scopo, è possibile utilizzare un'immagine RBD Ceph con il dispositivo di blocco Stonith (SBD, Stonith Block Device). Per ulteriori dettagli, fare riferimento alla https://documentation.suse.com/sle-ha/15-SP2/html/SLE-HA-all/cha-ha-storage-protect.html#sec-ha-storage-protect-fencing-setup.

    Se non è ancora esistente, creare un pool RBD denominato rbd (vedere la Sezione 18.1, «Creazione di un pool») e associarlo a rbd (vedere la Sezione 18.5.1, «Associazione di pool a un'applicazione»). Quindi, creare un'immagine RBD correlata chiamata sbd01:

    cephuser@adm > ceph osd pool create rbd
    cephuser@adm > ceph osd pool application enable rbd rbd
    cephuser@adm > rbd -p rbd create sbd01 --size 64M --image-shared
  3. Preparare earth e mars per ospitare il servizio Samba:

    1. Prima di continuare, verificare che siano installati i seguenti pacchetti: ctdb, tdb-tools, e samba.

      root # zypper in ctdb tdb-tools samba samba-ceph
    2. Assicurarsi che i servizi Samba e CTDB siano interrotti e disabilitati:

      root # systemctl disable ctdb
      root # systemctl disable smb
      root # systemctl disable nmb
      root # systemctl disable winbind
      root # systemctl stop ctdb
      root # systemctl stop smb
      root # systemctl stop nmb
      root # systemctl stop winbind
    3. Aprire la porta 4379 del firewall su tutti i nodi. Questo passaggio è necessario affinché CTDB comunichi con altri nodi del cluster.

  4. Su earth, creare i file di configurazione per Samba, che verranno in seguito sincronizzati con mars.

    1. Inserire un elenco di indirizzi IP privati dei nodi del gateway Samba nel file /etc/ctdb/nodes. Alla pagina della documentazione (man 7 ctdb) sono disponibili ulteriori dettagli.

      192.168.1.1
      192.168.1.2
    2. Configurare Samba. Aggiungere le righe seguenti nella sezione [global] di /etc/samba/smb.conf. Utilizzare il nome host prescelto al posto di CTDB-SERVER (tutti i nodi del cluster compaiono in effetti come un grande nodo con questo nome). Aggiungere inoltre una definizione della condivisione, ad esempio SHARE_NAME:

      [global]
        netbios name = SAMBA-HA-GW
        clustering = yes
        idmap config * : backend = tdb2
        passdb backend = tdbsam
        ctdbd socket = /var/lib/ctdb/ctdb.socket
        # disable print server
        load printers = no
        smbd: backgroundqueue = no
      
      [SHARE_NAME]
        path = /
        vfs objects = ceph
        ceph: config_file = /etc/ceph/ceph.conf
        ceph: user_id = samba.gw
        read only = no
        oplocks = no
        kernel share modes = no

      Tenere presente che i file /etc/ctdb/nodes e /etc/samba/smb.conf devono corrispondere in tutti i nodi gateway Samba.

  5. Installare ed eseguire il bootstrap del cluster SUSE Linux Enterprise High Availability.

    1. Registrare SUSE Linux Enterprise High Availability Extension su earth e mars:

      root@earth # SUSEConnect -r ACTIVATION_CODE -e E_MAIL
      root@mars # SUSEConnect -r ACTIVATION_CODE -e E_MAIL
    2. installazione ha-cluster-bootstrap su entrambi i nodi:

      root@earth # zypper in ha-cluster-bootstrap
      root@mars # zypper in ha-cluster-bootstrap
    3. Mappare l'immagine RBD sbd01 a entrambi i gateway Samba tramite rbdmap.service.

      Modificare /etc/ceph/rbdmap e aggiungere una voce per l'immagine SBD:

      rbd/sbd01 id=samba.gw,keyring=/etc/ceph/ceph.client.samba.gw.keyring

      Abilitare e avviare rbdmap.service:

      root@earth # systemctl enable rbdmap.service && systemctl start rbdmap.service
      root@mars # systemctl enable rbdmap.service && systemctl start rbdmap.service

      Il dispositivo /dev/rbd/rbd/sbd01 deve essere disponibile su entrambi i gateway Samba.

    4. Inizializzare il cluster su earth e lasciare che mars si unisca.

      root@earth # ha-cluster-init
      root@mars # ha-cluster-join -c earth
      Importante
      Importante

      Durante il processo di inizializzazione e unione del cluster, verrà richiesto se si desidera utilizzare SBD. Confermare con y e specificare /dev/rbd/rbd/sbd01 come percorso al dispositivo di memorizzazione.

  6. Verificare lo stato del cluster. Dovrebbero essere visibili due nodi aggiunti al cluster:

    root@earth # crm status
    2 nodes configured
    1 resource configured
    
    Online: [ earth mars ]
    
    Full list of resources:
    
     admin-ip       (ocf::heartbeat:IPaddr2):       Started earth
  7. Eseguire i comandi seguenti su earth per configurare la risorsa CTDB:

    root@earth # crm configure
    crm(live)configure# primitive ctdb ocf:heartbeat:CTDB params \
        ctdb_manages_winbind="false" \
        ctdb_manages_samba="false" \
        ctdb_recovery_lock="!/usr/lib64/ctdb/ctdb_mutex_ceph_rados_helper
            ceph client.samba.gw cephfs_metadata ctdb-mutex"
        ctdb_socket="/var/lib/ctdb/ctdb.socket" \
            op monitor interval="10" timeout="20" \
            op start interval="0" timeout="200" \
            op stop interval="0" timeout="100"
    crm(live)configure# primitive smb systemd:smb \
        op start timeout="100" interval="0" \
        op stop timeout="100" interval="0" \
        op monitor interval="60" timeout="100"
    crm(live)configure# primitive nmb systemd:nmb \
        op start timeout="100" interval="0" \
        op stop timeout="100" interval="0" \
        op monitor interval="60" timeout="100"
    crm(live)configure# primitive winbind systemd:winbind \
        op start timeout="100" interval="0" \
        op stop timeout="100" interval="0" \
        op monitor interval="60" timeout="100"
    crm(live)configure# group g-ctdb ctdb winbind nmb smb
    crm(live)configure# clone cl-ctdb g-ctdb meta interleave="true"
    crm(live)configure# commit
    Suggerimento
    Suggerimento: primitive nmb e winbind facoltativi

    Se non è necessaria l'esplorazione di condivisione di rete, non occorre aggiungere il primitive nmb.

    Il primitive winbind è necessario soltanto se viene configurato come membro del dominio Active Directory. Vedere Sezione 24.2, «Unione di gateway Samba e Active Directory».

    Il binario /usr/lib64/ctdb/ctdb_mutex_ceph_rados_helper nell'opzione di configurazione ctdb_recovery_lock ha i parametri CLUSTER_NAME, CEPHX_USER, RADOS_POOL, e RADOS_OBJECT in questo ordine.

    È possibile aggiungere un ulteriore parametro di timeout del blocco per ignorare il valore di default utilizzato (10 secondi). Un valore più elevato consentirà di aumentare la durata di failover del master di recupero CTDB, mentre se viene impostato un valore più basso, il master di recupero potrebbe venire rilevato erroneamente come disattivato, innescando ripetutamente il failover.

  8. Aggiungere un indirizzo IP di cluster:

    crm(live)configure# primitive ip ocf:heartbeat:IPaddr2
        params ip=192.168.2.1 \
        unique_clone_address="true" \
        op monitor interval="60" \
        meta resource-stickiness="0"
    crm(live)configure# clone cl-ip ip \
        meta interleave="true" clone-node-max="2" globally-unique="true"
    crm(live)configure# colocation col-with-ctdb 0: cl-ip cl-ctdb
    crm(live)configure# order o-with-ctdb 0: cl-ip cl-ctdb
    crm(live)configure# commit

    Se unique_clone_address è impostato su true, l'agente della risorsa IPaddr2 aggiunge un ID clone all'indirizzo specificato, portando a tre diversi indirizzi IP, che non sono di solito necessari, ma aiutano per il bilanciamento di carico. Per ulteriori informazioni su questo argomento, vedere https://documentation.suse.com/sle-ha/15-SP2/html/SLE-HA-all/cha-ha-lb.html.

  9. Controllare il risultato:

    root@earth # crm status
    Clone Set: base-clone [dlm]
         Started: [ factory-1 ]
         Stopped: [ factory-0 ]
     Clone Set: cl-ctdb [g-ctdb]
         Started: [ factory-1 ]
         Started: [ factory-0 ]
     Clone Set: cl-ip [ip] (unique)
         ip:0       (ocf:heartbeat:IPaddr2):       Started factory-0
         ip:1       (ocf:heartbeat:IPaddr2):       Started factory-1
  10. Eseguire un test da un computer client. Su un client Linux, eseguire il seguente comando per vedere se è possibile copiare i file dal e nel sistema:

    root # smbclient //192.168.2.1/myshare

24.1.3.1 Riavvio delle risorse Samba ad elevata disponibilità

Se la configurazione di Samba o CTBD viene modificata, potrebbe essere necessario riavviare le risorse ad elevata disponibilità per applicare tali modifiche. Questa operazione può essere eseguita tramite:

root # crm resource restart cl-ctdb

24.2 Unione di gateway Samba e Active Directory

È possibile configurare il gateway Samba Ceph come membro del dominio Samba con supporto Active Directory (AD). In qualità di membro del dominio Samba, è possibile utilizzare nei file e nelle directory del CephFS esportato i gruppi e gli utenti di dominio riportati negli elenchi di controllo dell'accesso (ACL) locali.

24.2.1 Preparazione dell'installazione di Samba

Questa sezione presenta la procedura preliminare da seguire prima della configurazione di Samba. Se si inizia da un ambiente pulito, sarà possibile evitare confusione e assicurarsi che nessun file dell'installazione Samba precedente venga mischiato con la nuova installazione del membro del dominio.

Suggerimento
Suggerimento: sincronizzazione degli orologi

Tutti gli orologi dei nodi gateway Samba devono essere sincronizzati con il controller del dominio Active Directory. Gli sfasamenti di orario possono comportare errori di autenticazione.

Verificare che non siano in esecuzione processi di Samba o di memorizzazione dei nomi nella cache:

cephuser@smb > ps ax | egrep "samba|smbd|nmbd|winbindd|nscd"

Se nell'output vengono elencati i processi samba, smbd, nmbd, winbindd o nscd, interromperli.

Se in precedenza è stata eseguita un'installazione Samba su questo host, rimuovere il file /etc/samba/smb.conf. Rimuovere inoltre tutti i file di database Samba, ad esempio i file *.tdb and *.ldb. Per visualizzare un elenco delle directory contenenti i database Samba, eseguire:

cephuser@smb > smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"

24.2.2 Verifica del DNS

Active Directory (AD) utilizza il DNS per individuare altri controller del dominio (DC) e servizi, come Kerberos. Pertanto, i membri del domino e i server Active Directory devono essere in grado di risolvere le zone DNS di Active Directory.

Verificare che il DNS sia configurato correttamente e che la ricerca diretta e inversa vengano risolte correttamente, ad esempio:

cephuser@adm > nslookup DC1.domain.example.com
Server:         10.99.0.1
Address:        10.99.0.1#53

Name:   DC1.domain.example.com
Address: 10.99.0.1
cephuser@adm > 10.99.0.1
Server:        10.99.0.1
Address:	10.99.0.1#53

1.0.99.10.in-addr.arpa	name = DC1.domain.example.com.

24.2.3 Risoluzione dei record SRV

Active Directory utilizza i record SRV per l'individuazione dei servizi, come Kerberos e LDAP. Per verificare che i record SRV vengano risolti correttamente, utilizzare la shell interattiva nslookup, ad esempio:

cephuser@adm > nslookup
Default Server:  10.99.0.1
Address:  10.99.0.1

> set type=SRV
> _ldap._tcp.domain.example.com.
Server:  UnKnown
Address:  10.99.0.1

_ldap._tcp.domain.example.com   SRV service location:
          priority       = 0
          weight         = 100
          port           = 389
          svr hostname   = dc1.domain.example.com
domain.example.com      nameserver = dc1.domain.example.com
dc1.domain.example.com  internet address = 10.99.0.1

24.2.4 Configurazione di Kerberos

Samba supporta i back-end Heimdal e MIT Kerberos. Per configurare Kerberos sul membro del dominio, impostare quanto segue nel file /etc/krb5.conf:

[libdefaults]
	default_realm = DOMAIN.EXAMPLE.COM
	dns_lookup_realm = false
	dns_lookup_kdc = true

Nell'esempio precedente Kerberos viene configurato per il dominio DOMAIN.EXAMPLE.COM. Non si consiglia di impostare altri parametri nel file /etc/krb5.conf. Se il file /etc/krb5.conf contiene una riga include, non funzionerà: occorre rimuovere tale riga.

24.2.5 Risoluzione del nome host locale

Quando viene eseguita l'unione a un host sul dominio, Samba tenta di registrare il nome host nella zona DNS di Active Directory. A questo scopo, l'utility net deve essere in grado di risolvere il nome host tramite DNS o utilizzando una voce corretta nel file /etc/hosts.

Per verificare che il nome host venga risolto correttamente, utilizzare il comando getent hosts:

cephuser@adm > getent hosts example-host
10.99.0.5      example-host.domain.example.com    example-host

Il nome host e il nome di dominio completo (FQDN) non devono identificarsi con l'indirizzo IP 127.0.0.1 o altri indirizzi IP diversi da quello utilizzato nell'interfaccia LAN del membro del domino. Se non viene visualizzato nessun output o se l'host viene risolto sull'indirizzo IP errato e DHCP non è in uso, impostare la voce corretta nel file /etc/hosts:

127.0.0.1      localhost
10.99.0.5      example-host.samdom.example.com    example-host
Suggerimento
Suggerimento: DHCP ed /etc/hosts

Se si utilizza DHCP, verificare che la riga "127.0.0.1" sia presente soltanto in /etc/hosts. Se continuano a verificarsi problemi, contattare l'amministratore del server DHCP.

Se occorre aggiungere alias al nome host del computer, aggiungerli alla fine della riga che inizia con l'indirizzo IP del computer (non alla riga "127.0.01").

24.2.6 Configurazione di Samba

Questa sezione fornisce informazioni sulle specifiche opzioni di configurazione da includere nel di configurazione di Samba.

L'appartenenza al dominio Active Directory è configurata principalmente tramite l'impostazione di security = ADS insieme al dominio Kerberos e ai parametri di mappatura ID appropriati nella sezione [global] di /etc/samba/smb.conf.

[global]
  security = ADS
  workgroup = DOMAIN
  realm = DOMAIN.EXAMPLE.COM
  ...

24.2.6.1 Scelta del back-end per la mappatura ID in winbindd

Se è necessario assegnare agli utenti diverse shell di login e/o diversi percorsi alla home directory Unix o se si desidera invece che gli utenti abbiano lo stesso ID in generale, utilizzare il back-end "ad" winbind e aggiungere gli attributi RFC2307 ad Active Directory.

Importante
Importante: attributi RFC2307 e numeri di ID

Gli attributi RFC2307 non vengono aggiunti automaticamente durante la creazione di utenti o gruppi.

I numeri di ID rilevati su un controller del dominio (compresi nell'intervallo di 3000000) non sono attributi RFC2307 e non verranno utilizzati nei membri del dominio Unix. Se si necessita degli stessi numeri di ID in generale, aggiungere gli attributi uidNumber e gidNumber ad Active Directory e utilizzare il back-end "ad" winbind nei membri del dominio Unix. Se si decide di aggiungere gli attributi uidNumber e gidNumber ad Active Directory, non utilizzare i numeri nell'intervallo di 3000000.

Se gli utenti utilizzeranno il controller del dominio di Active Directory Samba soltanto per scopi di autenticazione e non per la memorizzazione dei dati o per eseguire il login, è possibile utilizzare il back-end "rid" winbind. Ciò consente di calcolare gli ID utente e gruppo dal RID Windows*. Se si utilizza la stessa sezione [global] di smb.conf in ogni membro del dominio Unix, si otterranno gli stessi ID. Se si utilizza il back-end "rid", non è necessario aggiungere nulla ad Active Directory e gli attributi RFC2307 verranno ignorati. Se si utilizza il back-end "rid", impostare i parametri template shell e template homedir in smb.conf. Queste impostazioni sono globali e tutti gli utenti ottengono la stessa shell di login e lo stesso percorso della home directory Unix (a differenza degli attributi RFC2307, in cui è possibile impostare shell e percorsi alla home directory Unix individuali).

È disponibile un'altra modalità di configurazione di Samba, relativa allo scenario in cui è necessario che gli utenti e i gruppi abbiano lo stesso ID in generale, ma che soltanto gli utenti dispongano della stessa shell di login e utilizzino lo stesso percorso della home directory Unix. In questo caso vengono utilizzati il back-end "ad" winbind e le righe modello in smb.conf. In questo modo, è necessario soltanto aggiungere gli attributi uidNumber e gidNumber ad Active Directory.

Suggerimento
Suggerimento: ulteriori informazioni sui back-end per la mappatura degli ID

Altri dettagli e sui back-end di mappatura degli ID sono disponibili nella relativa documentazione: man 8 idmap_ad, man 8 idmap_rid e man 8 idmap_autorid.

24.2.6.2 Impostazione degli intervalli di ID utente e gruppo

Dopo aver individuato il back-end winbind da utilizzare, è necessario specificare gli intervalli da applicare con l'opzione idmap config in smb.conf. Per default, su un membro del dominio Unix, sono presenti più blocchi di ID utente e gruppo:

Tabella 24.1: Blocchi ID utente e gruppo di default
IDIntervallo
0-999Utenti e gruppi di sistema locali.
A partire da 1000Utenti e gruppi Unix locali.
A partire da 10000Utenti e gruppi DOMAIN.

Come è possibile vedere dagli intervalli riportati sopra, è consigliabile non far iniziare gli intervalli "*" o "DOMAIN" da un valore inferiore a 999, poiché potrebbero interferire con gli utenti e i gruppi di sistema locali. Dal momento che è consigliabile inoltre lasciare uno spazio per gli utenti e i gruppi Unix locali, un buon compromesso è far iniziare gli intervalli idmap config da 3000.

È necessario stabilire un valore potenziale relativo alla crescita di "DOMAIN" e se si intendono creare domini attendibili. Quindi, è possibile impostare gli intervalli idmap config come segue:

Tabella 24.2: Intervalli ID
DominioIntervallo
*3000-7999
DOMINIO10000-999999
TRUSTED1000000-9999999

24.2.6.3 Mappatura dell'account dell'amministratore del dominio all'utente root locale

Samba consente di mappare gli account di dominio a un account locale. Utilizzare questa funzione per eseguire operazioni di file sul file system del membro del domino come utente diverso dall'account che ha richiesto l'operazione sul client.

Suggerimento
Suggerimento: mappatura dell'amministratore del dominio (facoltativo)

La mappatura dell'amministratore del dominio all'account root locale è facoltativa. Configurarla solo se l'amministratore del dominio deve poter eseguire operazioni di file sul membro del dominio tramite le autorizzazioni root. Tenere presente che la mappatura dell'amministratore all'account root non consente di eseguire il login come "Amministratore" ai membri del dominio Unix.

Per mappare l'amministratore del dominio all'account root locale, seguire la procedura indicata di seguito:

  1. Aggiungere il parametro seguente alla sezione [global] del file smb.conf:

    username map = /etc/samba/user.map
  2. Creare il file /etc/samba/user.map con il contenuto seguente:

    !root = DOMAIN\Administrator
Importante
Importante

Se si utilizza il back-end di mappatura ID "ad", non impostare l'attributo uidNumber per l'account dell'amministratore del dominio. Se tale attributo è impostato per l'account, il valore sostituisce l'UID "0" locale dell'utente root e la mappatura non riesce.

Per ulteriori dettagli, vedere il parametro username map nella documentazione smb.conf (man 5 smb.conf).

24.2.7 Unione al dominio Active Directory

Per unire l'host a un'Active Directory, eseguire:

cephuser@smb > net ads join -U administrator
Enter administrator's password: PASSWORD
Using short domain name -- DOMAIN
Joined EXAMPLE-HOST to dns domain 'DOMAIN.example.com'

24.2.8 Configurazione del Name Service Switch

Per rendere gli utenti e i gruppi del domino disponibili sul sistema locale, è necessario abilitare la libreria Name Service Switch (NSS). Aggiungere la voce winbind ai database seguenti nel file /etc/nsswitch.conf:

passwd: files winbind
group:  files winbind
Importante
Importante: aspetti da considerare
  • Mantenere la voce files come prima origine di entrambi i database. In questo modo, NSS cercherà gli utenti e i gruppi del dominio nei file /etc/passwd e /etc/group prima di interrogare il servizio winbind.

  • Non aggiungere la voce winbind al database shadow di NSS, poiché potrebbe causare un errore dell'utility wbinfo.

  • Non utilizzare gli stessi nomi utente nel file /etc/passwd locale e nel dominio.

24.2.9 Avvio dei servizi

In seguito alle modifiche della configurazione, riavviare i servizi Samba come descritto nella Sezione 24.1.2.1, «Avvio dei servizi Samba» o nella Sezione 24.1.3.1, «Riavvio delle risorse Samba ad elevata disponibilità».

24.2.10 Test della connettività di winbindd

24.2.10.1 Invio di un ping winbindd

Per verificare se il servizio winbindd è in grado di eseguire la connessione ai controller del dominio (DC) Active Directory o a un controller di dominio primario (PDC), immettere:

cephuser@smb > wbinfo --ping-dc
checking the NETLOGON for domain[DOMAIN] dc connection to "DC.DOMAIN.EXAMPLE.COM" succeeded

Se il comando precedente non riesce, verificare che il servizio winbindd sia in esecuzione e che il file smb.conf sia configurato correttamente.

24.2.10.2 Ricerca di utenti e gruppi del dominio

Tramite la libreria libnss_winbind è possibile effettuare una ricerca degli utenti e dei gruppi del dominio. Ad esempio, per cercare l'utente del domino "DOMAIN\demo01":

cephuser@smb > getent passwd DOMAIN\\demo01
DOMAIN\demo01:*:10000:10000:demo01:/home/demo01:/bin/bash

Per cercare il gruppo del domino "Domain Users":

cephuser@smb > getent group "DOMAIN\\Domain Users"
DOMAIN\domain users:x:10000:

24.2.10.3 Assegnazione di autorizzazioni di file a utenti e gruppi del dominio

Tramite la libreria NSS, è possibile utilizzare i gruppi e gli account utente del dominio nei comandi. Ad esempio, per impostare il proprietario di un file sull'utente del dominio "demo01" e il gruppo sul gruppo del dominio "Domain Users", immettere:

cephuser@smb > chown "DOMAIN\\demo01:DOMAIN\\domain users" file.txt

25 NFS Ganesha

NFS Ganesha è un server NFS che viene eseguito in uno spazio di indirizzamento 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. Per istruzioni sull'installazione, vedere Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.4.3.6 “Distribuzione di NFS Ganesha”.

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 del CephFS nativo.

Ogni servizio NFS Ganesha è composto da una gerarchia di configurazione contenente:

  • Un ganesha.conf di bootstrap

  • Un oggetto di configurazione comune RADOS per ciascun servizio

  • Un oggetto di configurazione RADOS per ciascuna esportazione

La configurazione di bootstrap è la configurazione minima per l'avvio del daemon nfs-ganesha all'interno di un container. Ciascuna configurazione di bootstrap conterrà una direttiva %url che include eventuali configurazioni aggiuntive dell'oggetto di configurazione comune RADOS. L'oggetto di configurazione comune può includere ulteriori direttive %url per ciascuna delle esportazioni NFS definite negli oggetti di configurazione RADOS di esportazione.

Struttura di NFS Ganesha
Figura 25.1: Struttura di NFS Ganesha

25.1 Creazione di un servizio NFS

Per specificare la distribuzione dei servizi Ceph, si consiglia di creare un file con formattazione YAML contenente la specifica dei servizi da distribuire. È possibile creare un file della specifica separato per ogni tipo di servizio oppure specificare più tipi di servizi (o tutti) in un unico file.

A seconda dell'opzione scelta, per creare un servizio NFS Ganesha, sarà necessario aggiornare o creare un file con formattazione YAML pertinente. Per ulteriori informazioni sulla creazione del file, vedere Book “Guida alla distribuzione”, Chapter 5 “Distribuzione con cephadm”, Section 5.4.2 “Specifica del servizio e del posizionamento”.

Dopo aver aggiornato o creato il file eseguire quanto riportato di seguito per creare un servizio nfs-ganesha:

cephuser@adm > ceph orch apply -i FILE_NAME

25.2 Avvio o riavvio di NFS Ganesha

Per avviare il servizio NFS Ganesha, eseguire:

cephuser@adm > ceph orch start nfs.SERVICE_ID

Per riavviare il servizio NFS Ganesha, eseguire:

cephuser@adm > ceph orch restart nfs.SERVICE_ID

Se si desidera riavviare soltanto un singolo daemon NFS Ganesha, eseguire:

cephuser@adm > ceph orch daemon restart nfs.SERVICE_ID

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 la moratoria di NFS.

25.3 Elenco di oggetti nel pool di recupero NFS

Eseguire quanto riportato di seguito per elencare gli oggetti nel pool di recupero NFS:

cephuser@adm > rados --pool POOL_NAME --namespace NAMESPACE_NAME ls

25.4 Creazione di un'esportazione NFS

Eseguire quanto riportato di seguito per creare un'esportazione NFS.

Nota
Nota

Modificare il blocco FSAL in modo che includa l'ID e la chiave di accesso segreta dell'utente cephx desiderato.

cephuser@adm > rados --pool POOL_NAME --namespace NAMESPACE_NAME put export-1 export-1

25.5 Verifica dell'esportazione NFS

NFS v4 crea un elenco di esportazioni nella radice di uno pseudo file system. È possibile verificare che le condivisioni NFS vengano esportate montando / del nodo del server NFS Ganesha:

root # mount -t nfs nfs_ganesha_server_hostname:/ /path/to/local/mountpoint
root # ls /path/to/local/mountpoint cephfs
Nota
Nota: NFS Ganesha è disponibile solo nella versione v4

Per default, cephadm configurerà un server NFS v4. NFS v4 non interagisce con rpcbind o con il daemon mountd. Gli strumenti del client NFS, come showmount, non visualizzeranno nessuna esportazione configurata.

25.6 Montaggio dell'esportazione NFS

Per montare la condivisione NFS esportata su un host client, eseguire:

root # mount -t nfs nfs_ganesha_server_hostname:/ /path/to/local/mountpoint

25.7 Cluster NFS Ganesha multipli

È possibile definire più cluster NFS Ganesha per:

  • Separare i cluster NFS Ganesha per l'accesso a CephFS.

Parte V Integrazione con gli strumenti di virtualizzazione

  • 26 libvirt e Ceph
  • La libreria libvirt consente di creare uno strato di astrazione della macchina virtuale tra le interfacce dell'Hypervisor e le applicazioni software che le utilizzano. Con libvirt, sviluppatori e amministratori di sistema possono focalizzarsi su un framework di gestione, un'API e un'interfaccia shel…

  • 27 Ceph come back-end per l'istanza QEMU KVM
  • Il caso di utilizzo Ceph più frequente riguarda l'inserimento di immagini di dispositivi di blocco nelle macchine virtuali. Ad esempio, un utente può creare un'immagine "golden" con un sistema operativo e qualsiasi software pertinente in una configurazione ideale. L'utente, quindi, effettua uno snap…

26 libvirt e Ceph

La libreria libvirt consente di creare uno strato di astrazione della macchina virtuale tra le interfacce dell'Hypervisor e le applicazioni software che le utilizzano. Con libvirt, sviluppatori e amministratori di sistema possono focalizzarsi su un framework di gestione, un'API e un'interfaccia shell (virsh) comuni a Hypervisor diversi, tra cui QEMU/KVM, Xen, LXC o VirtualBox.

I dispositivi di blocco Ceph supportano QEMU/KVM. È possibile utilizzare i dispositivi di blocco Ceph con software che si interfaccia con libvirt. Nella soluzione cloud si utilizza libvirt per l'iterazione con QEMU/KVM e quest'ultimo esegue l'iterazione con i dispositivi di blocco Ceph tramite librbd.

Per creare macchine virtuali in cui vengono utilizzati dispositivi di blocco Ceph, seguire le procedure riportate nelle sezioni seguenti. Negli esempi, sono stati utilizzati libvirt-pool per il nome pool, client.libvirt per il nome utente e new-libvirt-image per il nome immagine. È possibile utilizzare qualsiasi valore desiderato, ma assicurarsi di sostituire tali valori quando si eseguono i comandi nelle procedure successive.

26.1 Configurazione di Ceph con libvirt

Per configurare Ceph per l'uso con libvirt, eseguire i seguenti passaggi:

  1. Creare un pool. Nell'esempio seguente viene utilizzato il nome pool libvirt-pool con 128 gruppi di posizionamento.

    cephuser@adm > ceph osd pool create libvirt-pool 128 128

    Verificare l'esistenza del pool.

    cephuser@adm > ceph osd lspools
  2. Creare un utente Ceph. Nell'esempio seguente viene utilizzato il nome utente Ceph client.libvirt e si fa riferimento a libvirt-pool.

    cephuser@adm > ceph auth get-or-create client.libvirt mon 'profile rbd' osd \
     'profile rbd pool=libvirt-pool'

    Verificare l'esistenza del nome.

    cephuser@adm > ceph auth list
    Nota
    Nota: nome utente o ID

    libvirt accederà a Ceph tramite l'ID libvirt, non il nome Ceph client.libvirt. Per una spiegazione dettagliata della differenza tra ID e nome, vedere Sezione 30.2.1.1, «Utente» (in lingua inglese).

  3. Utilizzare QEMU per creare un'immagine nel pool RBD. Nell'esempio seguente viene utilizzato il nome immagine new-libvirt-image e si fa riferimento a libvirt-pool.

    Suggerimento
    Suggerimento: ubicazione del file portachiavi

    La chiave utente libvirt è memorizzata in un file portachiavi ubicato nella directory /etc/ceph. Occorre assegnare al file portachiavi un nome appropriato in cui sia incluso il nome del cluster Ceph a cui appartiene. Per il nome del cluster di default "ceph", il nome del file portachiavi è /etc/ceph/ceph.client.libvirt.keyring.

    Se il portachiavi non esiste, crearlo con:

    cephuser@adm > ceph auth get client.libvirt > /etc/ceph/ceph.client.libvirt.keyring
    root # qemu-img create -f raw rbd:libvirt-pool/new-libvirt-image:id=libvirt 2G

    Verificare l'esistenza dell'immagine.

    cephuser@adm > rbd -p libvirt-pool ls

26.2 Preparazione del programma di gestione VM

È possibile utilizzare libvirt senza un programma di gestione VM, ma è più semplice creare prima il dominio con virt-manager.

  1. Installare un programma di gestione delle macchine virtuali.

    root # zypper in virt-manager
  2. Preparare/effettuare il download di un'immagine del sistema operativo che si desidera eseguire come virtualizzato.

  3. Avviare il programma di gestione delle macchine virtuali.

    virt-manager

26.3 Creazione di una macchina virtuale (VM)

Per creare una VM con virt-manager, eseguire i passaggi seguenti:

  1. Scegliere la connessione dall'elenco, fare clic con il pulsante destro del mouse su di essa e selezionare New (Nuovo).

  2. Importare l'immagine disco esistente specificando il percorso di memorizzazione esistente. Specificare il tipo di sistema operativo, le impostazioni della memoria e il nome della macchina virtuale, ad esempio libvirt-virtual-machine.

  3. Completare la configurazione e avviare la VM.

  4. Verificare l'esistenza del dominio appena creato con sudo virsh list. Se necessario, specificare la stringa di connessione, come

    virsh -c qemu+ssh://root@vm_host_hostname/system list
    Id    Name                           State
    -----------------------------------------------
    [...]
     9     libvirt-virtual-machine       running
  5. Eseguire il login alla VM e interromperla prima di configurarla per l'uso con Ceph.

26.4 Configurazione della macchina virtuale (VM)

Questo capitolo è incentrato sulla configurazione delle VM per l'integrazione con Ceph mediante l'uso di virsh. Spesso per i comandi virsh sono richiesti i privilegi radice (sudo) e non verranno restituiti i risultati appropriati né notifiche in merito ai privilegi radice richiesti. Per informazioni sui comandi virsh, fare riferimento a man 1 virsh (deve essere installato il pacchetto libvirt-client).

  1. Aprire il file di configurazione con virsh edit vm-domain-name.

    root # virsh edit libvirt-virtual-machine
  2. In <devices> deve essere presente una voce <disk>.

    <devices>
        <emulator>/usr/bin/qemu-system-SYSTEM-ARCH</emulator>
        <disk type='file' device='disk'>
          <driver name='qemu' type='raw'/>
          <source file='/path/to/image/recent-linux.img'/>
          <target dev='vda' bus='virtio'/>
          <address type='drive' controller='0' bus='0' unit='0'/>
        </disk>

    Sostituire /path/to/image/recent-linux.img con il percorso dell'immagine del sistema operativo.

    Importante
    Importante

    Utilizzare sudo virsh edit al posto di un editor di testo. Se si modifica il file di configurazione in /etc/libvirt/qemu con un editor di testo, è possibile che libvirt non riconosca la modifica. Se è presente una discrepanza tra i contenuti del file XML in /etc/libvirt/qemu e il risultato di sudo virsh dumpxml vm-domain-name, la VM potrebbe non funzionare correttamente.

  3. Aggiungere l'immagine Ceph RBD creata precedentemente come voce <disk>.

    <disk type='network' device='disk'>
            <source protocol='rbd' name='libvirt-pool/new-libvirt-image'>
                    <host name='monitor-host' port='6789'/>
            </source>
            <target dev='vda' bus='virtio'/>
    </disk>

    Sostituire monitor-host con il nome host e sostituire il pool e/o il nome immagine secondo necessità. È possibile aggiungere più voci <host> per i Ceph Monitor. L'attributo dev è il nome dispositivo logico che verrà visualizzato nella directory /dev della VM. L'attributo bus facoltativo indica il tipo di dispositivo disco da emulare. Le impostazioni valide sono specifiche per il driver (ad esempio ide, scsi, virtio, xen, usb o sata).

  4. salvataggio del file.

  5. Se nel cluster Ceph è abilitata l'autenticazione (impostazione di default), è necessario generare un segreto. Aprire l'editor desiderato e creare un file denominato secret.xml con il contenuto seguente:

    <secret ephemeral='no' private='no'>
            <usage type='ceph'>
                    <name>client.libvirt secret</name>
            </usage>
    </secret>
  6. Definire il segreto.

    root # virsh secret-define --file secret.xml
    <uuid of secret is output here>
  7. Ottenere la chiave client.libvirt e salvare la stringa chiave in un file.

    cephuser@adm > ceph auth get-key client.libvirt | sudo tee client.libvirt.key
  8. Impostare l'UUID del segreto.

    root # virsh secret-set-value --secret uuid of secret \
    --base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xml

    È inoltre necessario impostare manualmente il segreto aggiungendo la seguente voce <auth> all'elemento <disk> immesso precedentemente (sostituendo il valore uuid con il risultato dell'esempio della riga di comando di cui sopra).

    root # virsh edit libvirt-virtual-machine

    Quindi, aggiungere l'elemento <auth></auth> al file di configurazione del dominio:

    ...
    </source>
    <auth username='libvirt'>
            <secret type='ceph' uuid='9ec59067-fdbc-a6c0-03ff-df165c0587b8'/>
    </auth>
    <target ...
    Nota
    Nota

    L'ID di esempio è libvirt, non il nome Ceph client.libvirt generato al passaggio 2 della Sezione 26.1, «Configurazione di Ceph con libvirt». Assicurarsi di utilizzare il componente ID del nome Ceph generato. Se per qualche motivo è necessario generare di nuovo il segreto, si dovrà eseguire sudo virsh secret-undefine uuid prima di eseguire di nuovo sudo virsh secret-set-value.

26.5 Riepilogo

Una volta configurata la VM per l'uso con Ceph, è possibile avviarla. Per verificare che la VM e Ceph comunichino tra loro, è possibile eseguire la procedura seguente.

  1. Verificare che Ceph sia in esecuzione:

    cephuser@adm > ceph health
  2. Verificare che la VM sia in esecuzione:

    root # virsh list
  3. Verificare che la VM stia comunicando con Ceph. Sostituire vm-domain-name con il nome di dominio della VM:

    root # virsh qemu-monitor-command --hmp vm-domain-name 'info block'
  4. Verificare che il dispositivo di &target dev='hdb' bus='ide'/> venga visualizzato in /dev o in /proc/partitions:

    tux > ls /dev
    tux > cat /proc/partitions

27 Ceph come back-end per l'istanza QEMU KVM

Il caso di utilizzo Ceph più frequente riguarda l'inserimento di immagini di dispositivi di blocco nelle macchine virtuali. Ad esempio, un utente può creare un'immagine "golden" con un sistema operativo e qualsiasi software pertinente in una configurazione ideale. L'utente, quindi, effettua uno snapshot dell'immagine. Infine, l'utente clona lo snapshot (di solito molte volte, vedere Sezione 20.3, «Snapshot» per ulteriori informazioni). La capacità di creare cloni copia su scrittura di uno snapshot significa che Ceph è in grado di fornire rapidamente immagini di dispositivi di blocco alle macchine virtuali, perché il client non deve effettuare il download di un'immagine intera ogni volta che esegue lo spin-up di una nuova macchina virtuale.

I dispositivi di blocco Ceph possono essere integrati con le macchine virtuali QEMU. Per ulteriori informazioni su QEMU KVM, vedere https://documentation.suse.com/sles/15-SP2/html/SLES-all/part-virt-qemu.html (in lingua inglese).

27.1 Installazione di qemu-block-rbd

Per utilizzare i dispositivi di blocco Ceph, è necessario che in QEMU sia installato il driver appropriato. Verificare che il pacchetto qemu-block-rbd sia installato e installarlo se necessario:

root # zypper install qemu-block-rbd

27.2 Uso di QEMU

Nella riga di comando QEMU ci si aspetta che venga specificato il nome pool e il nome immagine. È anche possibile specificare il nome di uno snapshot.

qemu-img command options \
rbd:pool-name/image-name@snapshot-name:option1=value1:option2=value2...

Ad esempio, se si specificano le opzioni id e conf si potrebbe ottenere:

qemu-img command options \
rbd:pool_name/image_name:id=glance:conf=/etc/ceph/ceph.conf

27.3 Creazione di immagini con QEMU

È possibile creare un'immagine del dispositivo di blocco da QEMU. Specificare rbd, il nome pool e il nome dell'immagine che si desidera creare. Si devono specificare anche le dimensioni dell'immagine.

qemu-img create -f raw rbd:pool-name/image-name size

Esempio:

qemu-img create -f raw rbd:pool1/image1 10G
Formatting 'rbd:pool1/image1', fmt=raw size=10737418240 nocow=off cluster_size=0
Importante
Importante

Il formato dati raw è effettivamente la sola opzione di formato sensibile da utilizzare con RBD. Tecnicamente si potrebbero utilizzare altri formati supportati da QEMU, come qcow2, ma in tal modo si aggiungerebbe ulteriore overhead e il volume non sarebbe sicuro per la migrazione in tempo reale della macchina virtuale quando la memorizzazione nella cache è abilitata.

27.4 Ridimensionamento delle immagini con QEMU

È possibile ridimensionare un'immagine del dispositivo di blocco da QEMU. Specificare rbd, il nome pool e il nome dell'immagine che si desidera ridimensionare. Si devono specificare anche le dimensioni dell'immagine.

qemu-img resize rbd:pool-name/image-name size

Esempio:

qemu-img resize rbd:pool1/image1 9G
Image resized.

27.5 Recupero delle informazioni sull'immagine con QEMU

È possibile recuperare informazioni sull'immagine del dispositivo di blocco da QEMU. Specificare rbd, il nome pool e il nome dell'immagine.

qemu-img info rbd:pool-name/image-name

Esempio:

qemu-img info rbd:pool1/image1
image: rbd:pool1/image1
file format: raw
virtual size: 9.0G (9663676416 bytes)
disk size: unavailable
cluster_size: 4194304

27.6 Esecuzione di QEMU con RBD

Con QEMU è possibile accedere a un'immagine come un dispositivo di blocco virtuale direttamente tramite librbd. In tal modo si evita un ulteriore passaggio contestuale ed è possibile sfruttare la memorizzazione nella cache RBD.

È possibile utilizzare qemu-img per convertire le immagini della macchina virtuale esistenti in immagini del dispositivo di blocco Ceph. Ad esempio, se si dispone di un'immagine qcow2, si potrebbe eseguire:

qemu-img convert -f qcow2 -O raw sles12.qcow2 rbd:pool1/sles12

Per eseguire un avvio della macchina virtuale da tale immagine, si potrebbe eseguire:

root # qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12

La memorizzazione nella cache RBD può migliorare le prestazioni in modo significativo. Le opzioni di cache QEMU controllano la memorizzazione nella cache librbd caching:

root # qemu -m 1024 -drive format=rbd,file=rbd:pool1/sles12,cache=writeback

Per ulteriori informazioni sulla memorizzazione nella cache RBD, fare riferimento alla Sezione 20.5, «Impostazioni della cache».

27.7 Abilitazione dell'operazione di scarto e TRIM

I dispositivi di blocco Ceph supportano l'operazione di scarto. Vale a dire che un guest può inviare richieste TRIM per consentire a un dispositivo di blocco Ceph di recuperare spazio inutilizzato. Tale operazione può essere abilitata nel guest tramite il montaggio di XFS con l'opzione di scarto.

Affinché questa sia disponibile nel guest, è necessario abilitarla esplicitamente per il dispositivo di blocco. A tal fine, specificare una discard_granularity associata all'unità:

root # qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12,id=drive1,if=none \
-device driver=ide-hd,drive=drive1,discard_granularity=512
Nota
Nota

Nell'esempio di cui sopra è utilizzato il driver IDE. Il driver virtio non supporta l'opzione di scarto.

Se si utilizza libvirt, modificare il file di configurazione del dominio libvirt utilizzando virsh edit per includere il valore xmlns:qemu. Aggiungere quindi un qemu:commandline block come secondario per tale dominio. Nell'esempio seguente è illustrato come impostare due dispositivi con qemu id= su valori discard_granularity diversi.

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
 <qemu:commandline>
  <qemu:arg value='-set'/>
  <qemu:arg value='block.scsi0-0-0.discard_granularity=4096'/>
  <qemu:arg value='-set'/>
  <qemu:arg value='block.scsi0-0-1.discard_granularity=65536'/>
 </qemu:commandline>
</domain>

27.8 Impostazione delle opzioni cache QEMU

Le opzioni cache QEMU corrispondono alle seguenti impostazioni cache RBD Ceph.

Writeback:

rbd_cache = true

Write-through:

rbd_cache = true
rbd_cache_max_dirty = 0

Nessuno:

rbd_cache = false

Le impostazioni cache QEMU sostituiscono le impostazioni di default Ceph (impostazioni non impostate esplicitamente nel file di configurazione Ceph). Se si impostano esplicitamente le impostazioni cache RBD nel file di configurazione Ceph, (fare riferimento alla Sezione 20.5, «Impostazioni della cache»), le impostazioni Ceph sostituiscono le impostazioni della cache QEMU. Se si configurano le impostazioni cache nella riga di comando QEMU, le rispettive impostazioni sostituiscono quelle del file di configurazione Ceph.

Parte VI Configurazione di un cluster

  • 28 Configurazione del cluster Ceph
  • Questo capitolo descrive come configurare il cluster Ceph utilizzando le opzioni apposite.

  • 29 Moduli di Ceph Manager
  • L'architettura di Ceph Manager (per una breve presentazione, consultare questo riferimento: Book “Guida alla distribuzione”, Chapter 1 “SES e Ceph”, Section 1.2.3 “Daemon e nodi Ceph”) consente di estendere le sue funzionalità tramite i moduli, come "dashboard" (vedere il Parte I, «Ceph Dashboard»),…

  • 30 Autenticazione con cephx
  • Per identificare i client e proteggerli da attacchi man-in-the-middle, in Ceph è disponibile il rispettivo sistema di autenticazione cephx. I client in questo contesto sono utenti umani, come l'utente amministratore, o servizi/daemon correlati a Ceph, ad esempio OSD, monitoraggi o Object Gateway.

28 Configurazione del cluster Ceph

Questo capitolo descrive come configurare il cluster Ceph utilizzando le opzioni apposite.

28.1 Configurazione del file ceph.conf

cephadm utilizza un file ceph.conf di base che contiene soltanto un insieme minimo di opzioni per la connessione ai MON, l'autenticazione e il recupero delle informazioni di configurazione. Nella maggior parte dei casi, ciò è limitato all'opzione mon_host (anche se è possibile evitarlo utilizzando i record DNS SRV).

Importante
Importante

Il file ceph.conf non funge più da posizione centrale per la memorizzazione della configurazione del cluster, a favore del database di configurazione (vedere la Sezione 28.2, «Database di configurazione»).

Se tuttavia è necessario modificare la configurazione del cluster tramite il file ceph.conf, ad esempio perché si utilizza un client che non è in grado di supportare le opzioni di lettura dal database di configurazione, è necessario eseguire il comando seguente e mantenere e distribuire il file ceph.conf nell'intero cluster:

cephuser@adm > ceph config set mgr mgr/cephadm/manage_etc_ceph_ceph_conf false

28.1.1 Accesso a ceph.conf nelle immagini del container

Nonostante i daemon Ceph vengano eseguiti all'interno dei container, è possibile comunque accedere al relativo file di configurazione ceph.conf, montato in bind mount, come il file seguente sul sistema host:

/var/lib/ceph/CLUSTER_FSID/DAEMON_NAME/config

Sostituire CLUSTER_FSID con l'FSID univoco del cluster in esecuzione così come restituito dal comando ceph fsid e DAEMON_NAME con il nome del daemon specifico così come riportato dal comando ceph orch ps. Esempio:

/var/lib/ceph/b4b30c6e-9681-11ea-ac39-525400d7702d/osd.2/config

Per modificare la configurazione di un daemon, modificare il relativo file config e riavviarlo:

root # systemctl restart ceph-CLUSTER_FSID-DAEMON_NAME

Esempio:

root # systemctl restart ceph-b4b30c6e-9681-11ea-ac39-525400d7702d-osd.2
Importante
Importante

Tutte le impostazioni personalizzate andranno perse dopo che cephadm ripeterà la distribuzione del daemon.

28.2 Database di configurazione

I Ceph Monitor gestiscono un database centrale delle opzioni di configurazione che influiscono sul comportamento dell'intero cluster.

28.2.1 Sezioni e maschere di configurazione

Le opzioni di configurazione archiviate dal MON possono risiedere in una sezione globale oppure in una sezione del tipo di daemon o di un daemon specifico. Le opzioni possono disporre inoltre di una maschera associata per limitare ulteriormente i daemon o i client a cui sono applicate. Le maschere presentano due forme:

  • TYPE:LOCATION, dove TYPE indica una proprietà CRUSH, come rack oppure host, e LOCATION indica un valore relativo a tale proprietà.

    Ad esempio, host:example_host limiterà l'opzione soltanto ai daemon o ai client in esecuzione su un determinato host.

  • CLASS:DEVICE_CLASS, dove DEVICE_CLASS indica il nome di una classe di dispositivi CRUSH, come hdd o ssd. Ad esempio, class:ssd limiterà l'opzione soltanto agli OSD supportati dai dispositivi SSD. Questa maschera non ha alcun effetto sui daemon o i client non OSD.

28.2.2 Impostazione e lettura delle opzioni di configurazione

Utilizzare i comandi seguenti per impostare o leggere le opzioni di configurazione del cluster. Il parametro WHO può essere il nome di una sezione, una maschera o entrambe, separate da una barra (/). Ad esempio, osd/rack:foo rappresenta tutti i daemon OSD nel rack denominato foo.

ceph config dump

Esegue il dump di tutto il database di configurazione per l'intero cluster.

ceph config get WHO

Esegue il dump della configurazione per un daemon o client specifico (ad esempio, mds.a) archiviato nel database di configurazione.

ceph config set WHO OPTION VALUE

Imposta l'opzione di configurazione sul valore specificato nel database di configurazione.

ceph config show WHO

Mostra la configurazione in esecuzione segnalata per un daemon in esecuzione. Se sono in uso anche dei file di configurazione locali o se le opzioni sono state sostituite nella riga di comando o al runtime, queste impostazioni possono differire da quelle archiviate dai monitor. L'origine dei valori di opzione è riportata come parte dell'output.

ceph config assimilate-conf -i INPUT_FILE -o OUTPUT_FILE

Importa un file di configurazione specificato come INPUT_FILE e archivia le opzioni valide nel database di configurazione. Le impostazioni non riconosciute, non valide o che non possono essere controllate dal monitor verranno restituite in un file abbreviato archiviato come OUTPUT_FILE. Questo comando è utile per eseguire la transizione dai file di configurazione esistenti alla configurazione centralizzata basata su monitor.

28.2.3 Configurazione dei daemon al runtime

Nella maggior parte dei casi, Ceph consente di apportare modifiche alla configurazione di un daemon al runtime. Ciò è utile, ad esempio, se è necessario aumentare o diminuire il numero di output di log o durante l'ottimizzazione del cluster di runtime.

È possibile aggiornare i valori delle opzioni di configurazione con il comando seguente:

cephuser@adm > ceph config set DAEMON OPTION VALUE

Ad esempio, per regolare il livello di log di debug su un OSD specifico, eseguire:

cephuser@adm > ceph config set osd.123 debug_ms 20
Nota
Nota

Se la stessa opzione è personalizzata anche in un file di configurazione locale, l'impostazione del monitor verrà ignorata poiché ha un livello di priorità inferiore rispetto al file di configurazione.

28.2.3.1 Sostituzione dei valori

È possibile modificare temporaneamente un valore di opzione tramite i sottocomandi tell o daemon. Tale modifica influisce soltanto sul processo in esecuzione e viene eliminata in seguito al riavvio del daemon o del processo.

Esistono due modi per sostituire i valori:

  • Utilizzare il sottocomando tell per inviare un messaggio a un daemon specifico da un qualsiasi nodo del cluster:

    cephuser@adm > ceph tell DAEMON config set OPTION VALUE

    Esempio:

    cephuser@adm > ceph tell osd.123 config set debug_osd 20
    Suggerimento
    Suggerimento

    Il sottocomando tell accetta i caratteri jolly come identificatori del daemon. Ad esempio, per regolare il livello di debug su tutti i daemon OSD, eseguire:

    cephuser@adm > ceph tell osd.* config set debug_osd 20
  • Utilizzare il sottocomando daemon per connettersi a un processo del daemon specifico tramite un socket in /var/run/ceph dal nodo su cui è in esecuzione il processo:

    cephuser@adm > ceph daemon DAEMON config set OPTION VALUE

    Esempio:

    cephuser@adm > ceph daemon osd.4 config set debug_osd 20
Suggerimento
Suggerimento

Durante la visualizzazione delle impostazioni di runtime con il comando ceph config show (vedere la Sezione 28.2.3.2, «Visualizzazione delle impostazioni di runtime»), i valori temporaneamente sostituiti vengono mostrati con un valore override di origine.

28.2.3.2 Visualizzazione delle impostazioni di runtime

Per visualizzare tutte le opzioni impostate per un daemon:

cephuser@adm > ceph config show-with-defaults osd.0

Per visualizzare tutte le opzioni non di default impostate per un daemon:

cephuser@adm > ceph config show osd.0

Per ispezionare un'opzione specifica:

cephuser@adm > ceph config show osd.0 debug_osd

È possibile inoltre connettersi a un daemon in esecuzione dal nodo su cui è in esecuzione tale processo e osservarne la configurazione:

cephuser@adm > ceph daemon osd.0 config show

Per visualizzare soltanto le impostazioni non di default:

cephuser@adm > ceph daemon osd.0 config diff

Per ispezionare un'opzione specifica:

cephuser@adm > ceph daemon osd.0 config get debug_osd

28.3 Archivio config-key

config-key è un servizio per utilizzo generico offerto dai Ceph Monitor. Semplifica la gestione delle chiavi di configurazione tramite la memorizzazione permanente delle coppie di chiave-valore. config-key è utilizzato principalmente dagli strumenti e dai daemon Ceph.

Suggerimento
Suggerimento

Dopo aver aggiunto una nuova chiave o averne modificata una esistente, riavviare il servizio interessato per applicare le modifiche. Nel Capitolo 14, Funzionamento dei servizi Ceph è possibile trovare ulteriori dettagli sull'attivazione dei servizi Ceph.

Utilizzare il comando config-key per eseguire l'archivio config-key. Il comando config-key utilizza i sottocomandi seguenti:

ceph config-key rm KEY

Elimina la chiave specificata.

ceph config-key exists KEY

Verifica la presenza della chiave specificata.

ceph config-key get KEY

Recupera il valore della chiave specificata.

ceph config-key ls

Elenca tutte le chiavi.

ceph config-key dump

Esegue il dump di tutte le chiavi e dei relativi valori.

ceph config-key set KEY VALUE

Archivia la chiave specificata con il valore specificato.

28.3.1 iSCSI Gateway

iSCSI Gateway utilizza l'archivio config-key per salvare o leggere le relative opzioni di configurazione. Tutte le chiavi relative a iSCSI Gateway dispongono del prefisso iscsi, ad esempio:

iscsi/trusted_ip_list
iscsi/api_port
iscsi/api_user
iscsi/api_password
iscsi/api_secure

Se ad esempio sono necessari due insiemi di opzioni di configurazione, estendere il prefisso con un'altra parola chiave descrittiva, come datacenterA e datacenterB:

iscsi/datacenterA/trusted_ip_list
iscsi/datacenterA/api_port
[...]
iscsi/datacenterB/trusted_ip_list
iscsi/datacenterB/api_port
[...]

28.4 Ceph OSD e BlueStore

28.4.1 Configurazione del ridimensionamento automatico della cache

È possibile configurare BlueStore sul ridimensionamento automatico delle cache se tc_malloc è configurato come allocatore di memoria e l'impostazione bluestore_cache_autotune è abilitata. Attualmente, questa opzione è abilitata per default. BlueStore tenterà di mantenere l'utilizzo della memoria heap dell'OSD al di sotto delle dimensioni di destinazione definite tramite l'opzione di configurazione osd_memory_target. Si tratta di un algoritmo best-effort e le cache non si ridurranno oltre le dimensioni specificate da osd_memory_cache_min. I rapporti della cache verranno selezionati in base a una gerarchia di priorità. Se le informazioni di priorità non sono disponibili, vengono utilizzate come fallback le opzioni bluestore_cache_meta_ratio e bluestore_cache_kv_ratio.

bluestore_cache_autotune

Ottimizza automaticamente i rapporti assegnati a diverse cache BlueStore restando nei valori minimi. L'impostazione di default è True.

osd_memory_target

Se tc_malloc e bluestore_cache_autotune sono abilitate, cerca di mantenere questo numero di byte mappati alla memoria.

Nota
Nota

Questo numero potrebbe non corrispondere esattamente all'utilizzo della memoria RSS del processo. Anche se di norma la quantità totale di memoria heap mappata dal processo non deve essere molto lontana da questo valore di destinazione, non vi sono garanzie che il kernel recupererà la memoria non mappata.

osd_memory_cache_min

Se tc_malloc e bluestore_cache_autotune sono abilitate, consente di impostare la quantità minima di memoria utilizzata per le cache.

Nota
Nota

Se viene impostato un valore troppo basso, può verificarsi un notevole trashing della cache.

28.5 Ceph Object Gateway

È possibile influenzare il comportamento di Object Gateway utilizzando diverse opzioni. Se un'opzione non viene specificata, ne viene utilizzato il valore di default. Di seguito è riportato un elenco completo delle opzioni di Object Gateway:

28.5.1 Impostazioni generali

rgw_frontends

Configura i front-end HTTP. Specificare più front-end in un elenco separato da virgole. Ogni configurazione di front-end può includere un elenco di opzioni separate da spazi, in cui ogni opzione è nel formato "key=value" o "key". L'impostazione di default è beast port=7480.

rgw_data

Imposta l'ubicazione dei file di dati per Object Gateway. L'impostazione di default è /var/lib/ceph/radosgw/CLUSTER_ID.

rgw_enable_apis

Abilita le API specificate. L'impostazione di default è "s3, swift, swift_auth, admin All APIs".

rgw_cache_enabled

Abilita o disabilita la cache di Object Gateway. L'impostazione di default è true.

rgw_cache_lru_size

Numero di voci nella cache di Object Gateway. Il valore di default è 10000.

rgw_socket_path

Percorso del socket per il socket di dominio. FastCgiExternalServer utilizza questo socket. Se non viene specificato nessun percorso del socket, Object Gateway non verrà eseguito come server esterno. Il percorso specificato qui deve essere lo stesso del percorso specificato nel file rgw.conf.

rgw_fcgi_socket_backlog

Backlog del socket per fcgi. Il valore di default è 1024.

rgw_host

Host dell'istanza di Object Gateway. Può essere un indirizzo IP o un nome host. Il valore di default è 0.0.0.0.

rgw_port

Numero di porta in cui l'istanza è in ascolto delle richieste. Se non è specificato, Object Gateway esegue il FastCGI esterno.

rgw_dns_name

Nome DNS del dominio servito.

rgw_script_uri

Valore alternativo di SCRIPT_URI se non impostato nella richiesta.

rgw_request_uri

Valore alternativo di REQUEST_URI se non impostato nella richiesta.

rgw_print_continue

Se attiva, abilitare 100-continue. L'impostazione di default è true.

rgw_remote_addr_param

Parametro dell'indirizzo remoto. Ad esempio, il campo HTTP contenente l'indirizzo remoto o l'indirizzo X-Forwarded-For se è attivo un proxy inverso. L'impostazione di default è REMOTE_ADDR.

rgw_op_thread_timeout

Timeout espresso in secondi per i thread aperti. Il valore di default è 600.

rgw_op_thread_suicide_timeout

Timeout espresso in secondi prima del termine del processo di Object Gateway. Se è impostata a 0 (default), questa impostazione è disabilitata.

rgw_thread_pool_size

Numero di thread per il server Oggetto beast. Aumentare il valore se è necessario provvedere a più richieste. Il valore di default è 100 thread.

rgw_num_rados_handles

Numero di handle del cluster RADOS per Object Gateway. Adesso per ciascun thread di lavoro Object Gateway viene selezionato un handle RADOS permanente. Questa opzione potrebbe diventare obsoleta e rimossa dalle release future. Il valore di default è 1.

rgw_num_control_oids

Numero di oggetti di notifica utilizzati per la sincronizzazione della cache tra diverse istanze di Object Gateway. Il valore di default è 8.

rgw_init_timeout

Numero di secondi prima che Object Gateway smetta di tentare di effettuare l'inizializzazione. Il valore di default è 30.

rgw_mime_types_file

Percorso e ubicazione dei tipi MIME. Utilizzata per il rilevamento automatico Swift dei tipi di oggetto. L'impostazione di default è /etc/mime.types.

rgw_gc_max_objs

Numero massimo di oggetti che possono essere gestiti dal recupero spazio in un ciclo di elaborazione di recupero spazio. Il valore di default è 32.

rgw_gc_obj_min_wait

Tempo di attesa minimo prima che l'oggetto venga rimosso e gestito dal processo di recupero spazio. Il valore di default è 2 * 3600.

rgw_gc_processor_max_time

Durata massima tra l'inizio di due cicli di elaborazione di recupero spazio consecutivi. Il valore di default è 3600.

rgw_gc_processor_period

Durata del ciclo di elaborazione di recupero spazio. Il valore di default è 3600.

rgw_s3_success_create_obj_status

Risposta alternativa di stato riuscito per create-obj. Il valore di default è 0.

rgw_resolve_cname

Determina se Object Gateway deve utilizzare il record DNS CNAME del campo del nome host della richiesta (se il nome host non è uguale al nome DNS di Object Gateway). L'impostazione di default è false.

rgw_obj_stripe_size

Dimensioni di striping di oggetto per gli oggetti Object Gateway. Il valore di default è 4 << 20.

rgw_extended_http_attrs

Aggiunge un nuovo set di attributi che è possibile impostare su un'entità (ad esempio un utente, un compartimento o un oggetto). È possibile impostare tali attributi aggiuntivi tramite i campi dell'intestazione HTTP quando si inserisce o si modifica l'entità tramite il metodo POST. Se impostati, questi attributi verranno restituiti come campi HTTP durante la richiesta GET/HEAD sull'entità. L'impostazione di default è content_foo, content_bar, x-foo-bar.

rgw_exit_timeout_secs

Numero di secondi in cui restare in attesa di un processo prima dell'uscita senza condizioni. Il valore di default è 120.

rgw_get_obj_window_size

Dimensioni in byte della finestra di una singola richiesta di oggetto. Il valore di default è 16 << 20.

rgw_get_obj_max_req_size

Dimensioni massime della richiesta di una singola operazione GET inviata al cluster di memorizzazione Ceph. Il valore di default è 4 << 20.

rgw_relaxed_s3_bucket_names

Abilita le regole minime del nome del compartimento S3 per i compartimenti dell'area US. L'impostazione di default è false.

rgw_list_buckets_max_chunk

Numero massimo di compartimenti da recuperare durante un'operazione singola quando vengono elencati i compartimenti dell'utente. Il valore di default è 1000.

rgw_override_bucket_index_max_shards

Rappresenta il numero di partizioni dell'oggetto di indice del compartimento. Se viene impostata a 0 (default), il partizionamento non verrà eseguito. Si sconsiglia di impostare un valore troppo elevato (ad esempio 1000) poiché ciò aumenta i costi di creazione dell'elenco dei compartimenti. Impostare questa variabile nelle sezioni client o global per applicarla automaticamente ai comandi radosgw-admin.

rgw_curl_wait_timeout_ms

Timeout espresso in millisecondi per determinate chiamate curl. Il valore di default è 1000.

rgw_copy_obj_progress

Abilita l'output dell'avanzamento dell'oggetto durante le operazioni di copia più lunghe. L'impostazione di default è true.

rgw_copy_obj_progress_every_bytes

Byte minimi tra gli output dell'avanzamento della copia. Il valore di default è 1024 * 1024.

rgw_admin_entry

Punto di entrata di un URL della richiesta admin. L'impostazione di default è admin.

rgw_content_length_compat

Abilita la gestione di compatibilità delle richieste FCGI con le opzioni CONTENT_LENGTH E HTTP_CONTENT_LENGTH impostate. L'impostazione di default è false.

rgw_bucket_quota_ttl

Intervallo di tempo espresso in secondi durante il quale le informazioni sulla quota memorizzate nella cache sono attendibili. Dopo questo timeout, le informazioni sulla quota verranno recuperate nuovamente dal cluster. Il valore di default è 600.

rgw_user_quota_bucket_sync_interval

Intervallo di tempo espresso in secondi durante il quale le informazioni sulla quota del compartimento vengono accumulate prima della sincronizzazione con il cluster. Durante questo intervallo, le altre istanze di Object Gateway non visualizzeranno le modifiche apportate alle statistiche sulla quota del compartimento relative alle operazioni su tale istanza. Il valore di default è 180.

rgw_user_quota_sync_interval

Intervallo di tempo espresso in secondi durante il quale le informazioni sulla quota utenti vengono accumulate prima della sincronizzazione con il cluster. Durante questo intervallo, le altre istanze di Object Gateway non visualizzeranno le modifiche apportate alle statistiche sulla quota utenti relative alle operazioni su tale istanza. Il valore di default è 180.

rgw_bucket_default_quota_max_objects

Numero massimo di default di oggetti per compartimento. Viene impostata per i nuovi utenti se non viene specificata nessuna quota e non ha effetto sugli utenti esistenti. Impostare questa variabile nelle sezioni client o global per applicarla automaticamente ai comandi radosgw-admin. Il valore di default è -1.

rgw_bucket_default_quota_max_size

Capacità massima di default di ciascun compartimento espressa in byte. Viene impostata per i nuovi utenti se non viene specificata nessuna quota e non ha effetto sugli utenti esistenti. Il valore di default è -1.

rgw_user_default_quota_max_objects

Numero massimo di default di oggetti per utente. Sono inclusi tutti gli oggetti in tutti i compartimenti di proprietà dell'utente. Viene impostata per i nuovi utenti se non viene specificata nessuna quota e non ha effetto sugli utenti esistenti. Il valore di default è -1.

rgw_user_default_quota_max_size

Valore delle dimensioni massime della quota utenti espresso in byte impostato per i nuovi utenti se non viene specificata nessun'altra quota. Non ha effetto sugli utenti esistenti. Il valore di default è -1.

rgw_verify_ssl

Verifica i certificati SSL durante la creazione delle richieste. L'impostazione di default è true.

rgw_max_chunk_size

Dimensioni massime di una porzione di dati che verrà letta in una singola operazione. Se si aumenta il valore a 4 MB (4194304) si otterranno prestazioni migliori durante l'elaborazione di oggetti di grandi dimensioni. Il valore di default è 128 kB (131072).

Impostazioni multisito
rgw_zone

Nome della zona per l'istanza del gateway. Se non viene impostata nessuna zona, è possibile configurare un valore di default in tutto il cluster con il comando radosgw-admin zone default.

rgw_zonegroup

Nome del gruppo di zone per l'istanza del gateway. Se non viene impostato nessun gruppo di zone, è possibile configurare un valore di default in tutto il cluster con il comando radosgw-admin zonegroup default.

rgw_realm

Nome del dominio per l'istanza del gateway. Se non viene impostato nessun dominio, è possibile configurare un valore di default in tutto il cluster con il comando radosgw-admin realm default.

rgw_run_sync_thread

Se nel dominio sono presenti altre zone da cui eseguire la sincronizzazione, generare dei thread per gestire la sincronizzazione dei dati e dei metadati. L'impostazione di default è true.

rgw_data_log_window

Finestra delle voci del log dei dati in secondi. Il valore di default è 30.

rgw_data_log_changes_size

Numero di voci nella memoria da mettere in attesa per il log delle modifiche dei dati. Il valore di default è 1000.

rgw_data_log_obj_prefix

Prefisso del nome di oggetto del log dei dati. L'impostazione di default è "data_log".

rgw_data_log_num_shards

Numero di partizioni (oggetti) su cui conservare il log delle modifiche dei dati. Il valore di default è 128.

rgw_md_log_max_shards

Numero massimo di partizioni per il log dei metadati. Il valore di default è 64.

Impostazioni Swift
rgw_enforce_swift_acls

Applica le impostazioni dell'elenco di controllo dell'accesso (ACL) Swift. L'impostazione di default è true.

rgw_swift_token_expiration

Tempo espresso in secondi per la scadenza di un token Swift. Il valore di default è 24 * 3600.

rgw_swift_url

URL dell'API Swift di Ceph Object Gateway.

rgw_swift_url_prefix

Prefisso URL dello StorageURL Swift che precede la porzione di testo "/v1". Ciò consente di eseguire più istanze del gateway sullo stesso host. Per ragioni di compatibilità, se per questa variabile di configurazione non viene impostato alcun valore, verrà utilizzato il valore "/swift" di default. Utilizzare il prefisso esplicito "/" come inizio dello StorageURL dalla radice.

Avvertimento
Avvertimento

Questa opzione non funzionerà se viene impostata su "/" e se l'API S3 è abilitata. Tenere presente che la disabilitazione di S3 non consentirà la distribuzione di Object Gateway nella configurazione multisito.

rgw_swift_auth_url

URL di default per la verifica dei token di autenticazione v1 quando l'autenticazione Swift interna non è utilizzata.

rgw_swift_auth_entry

Punto di entrata di un URL di autenticazione Swift. L'impostazione di default è auth.

rgw_swift_versioning_enabled

Abilita il controllo versioni dell'oggetto dell'API Object Storage di OpenStack. Ciò consente ai client di inserire l'attributo X-Versions-Location sui container di cui deve essere creata una versione. L'attributo specifica il nome del container in cui sono memorizzate le versioni archiviate. Deve essere di proprietà dello stesso utente del container con versione per motivi di verifica del controllo dell'accesso (gli ACL non sono presi in considerazione). Non è possibile creare una versione per tali container con il meccanismo di controllo versioni dell'oggetto S3. L'impostazione di default è false.

Impostazioni del logging
rgw_log_nonexistent_bucket

Abilita Object Gateway per il logging di una richiesta relativa a un compartimento inesistente. L'impostazione di default è false.

rgw_log_object_name

Formato di registrazione di un nome oggetto. Per i dettagli sugli identificatori del formato, consultare la documentazione man 1 date. L'impostazione di default è %Y-%m-%d-%H-%i-%n.

rgw_log_object_name_utc

Specifica se nel nome oggetto registrato è inclusa l'ora UTC. Se è impostata su false (default), viene utilizzata l'ora locale.

rgw_usage_max_shards

Numero massimo di partizioni per la registrazione dell'utilizzo. Il valore di default è 32.

rgw_usage_max_user_shards

Numero massimo di partizioni utilizzate per la registrazione dell'utilizzo di un singolo utente. Il valore di default è 1.

rgw_enable_ops_log

Abilita la registrazione di ciascuna operazione Object Gateway riuscita. L'impostazione di default è false.

rgw_enable_usage_log

Abilita il log di utilizzo. L'impostazione di default è false.

rgw_ops_log_rados

Specifica se scrivere il log delle operazioni sul back-end del cluster di memorizzazione Ceph. L'impostazione di default è true.

rgw_ops_log_socket_path

Socket del dominio Unix per i log delle operazioni di scrittura.

rgw_ops_log_data_backlog

Dimensioni dei dati massime del backlog dei dati per i log delle operazioni scritte su un socket del dominio Unix. Il valore di default è 5 << 20.

rgw_usage_log_flush_threshold

Numero di voci modificate unite nel log di utilizzo prima dello svuotamento sincrono. Il valore di default è 1024.

rgw_usage_log_tick_interval

Svuota il log di utilizzo in sospeso ogni "n" secondi. Il valore di default è 30.

rgw_log_http_headers

Elenco con valori separati da virgole delle intestazioni HTTP da includere nelle voci del log. I nomi delle intestazioni non fanno distinzione tra lettere maiuscole e minuscole e utilizzano il nome completo dell'intestazione con le parole separate da caratteri di sottolineatura. Ad esempio, "http_x_forwarded_for", "http_x_special_k".

rgw_intent_log_object_name

Formato di registrazione del nome oggetto dell'intent log. Per i dettagli sugli identificatori del formato, consultare la documentazione man 1 date. L'impostazione di default è "%Y-%m-%d-%i-%n".

rgw_intent_log_object_name_utc

Specifica se nel nome oggetto dell'intent log è inclusa l'ora UTC. Se è impostata su false (default), viene utilizzata l'ora locale.

Impostazioni Keystone
rgw_keystone_url

URL del server Keystone.

rgw_keystone_api_version

Versione (2 o 3) di OpenStack Identity API da utilizzare per la comunicazione con il server Keystone. Il valore di default è 2.

rgw_keystone_admin_domain

Nome del dominio OpenStack con privilegi di amministratore quando è in uso OpenStack Identity API v3.

rgw_keystone_admin_project

Nome del progetto OpenStack con privilegi di amministratore quando è in uso OpenStack Identity API v3. Se non viene impostata, verrà utilizzato il valore di rgw keystone admin tenant.

rgw_keystone_admin_token

Token amministratore Keystone (segreto condiviso). In Object Gateway, l'autenticazione tramite il token amministratore ha la priorità sull'autenticazione con le credenziali di amministratore (opzioni rgw keystone admin user, rgw keystone admin password, rgw keystone admin tenant, rgw keystone admin project e rgw keystone admin domain). La funzione del token amministratore è considerata obsoleta.

rgw_keystone_admin_tenant

Nome del tenant OpenStack con privilegi di amministratore (tenant del servizio) quando è in uso OpenStack Identity API v2.

rgw_keystone_admin_user

Nome dell'utente OpenStack con privilegi di amministratore per l'autenticazione Keystone (utente del servizio) quando è in uso OpenStack Identity API v2.

rgw_keystone_admin_password

Password dell'utente amministratore OpenStack quando è in uso OpenStack Identity API v2.

rgw_keystone_accepted_roles

Ruoli richiesti per provvedere alle richieste. L'impostazione di default è "Member, admin".

rgw_keystone_token_cache_size

Numero massimo di voci in ciascuna cache dei token Keystone. Il valore di default è 10000.

rgw_keystone_revocation_interval

Numero di secondi tra le verifiche della revoca dei token. Il valore di default è 15 * 60.

rgw_keystone_verify_ssl

Verifica i certificati SSL durante la creazione di richieste di token per Keystone. L'impostazione di default è true.

28.5.1.1 Note aggiuntive

rgw_dns_name

Consente ai client di utilizzare i compartimenti di tipo vhost.

L'accesso di tipo vhost fa riferimento all'uso di bucketname.s3-endpoint/object-path, diverso dall'accesso di tipo path: s3-endpoint/bucket/object.

Se rgw dns name è impostato, verificare che il client S3 sia configurato sull'indirizzamento delle richieste all'endpoint specificato da rgw dns name.

28.5.2 Configurazione dei front-end HTTP

28.5.2.1 Oggetto beast

port, ssl_port

Numeri di porte di attesa IPv4 e IPv6. È possibile specificare più numeri di porte:

port=80 port=8000 ssl_port=8080

Il valore di default è 80.

endpoint, ssl_endpoint

Indirizzi di attesa nel formato "address[:port]", dove l'indirizzo è una stringa di indirizzo IPv4 in formato decimale separato da punti o un indirizzo IPv6 in notazione esadecimale racchiuso tra parentesi quadre. Se viene specificato un endpoint IPv6, verranno attesi solo indirizzi IPv6. Il numero di porta facoltativo di default è 80 per endpoint e 443 per ssl_endpoint. È possibile specificare più indirizzi:

endpoint=[::1] endpoint=192.168.0.100:8000 ssl_endpoint=192.168.0.100:8080
ssl_private_key

Percorso facoltativo del file di chiave privata utilizzato per gli endpoint abilitati per SSL. Se non è specificato, viene utilizzato il file ssl_certificate come chiave privata.

tcp_nodelay

Se specificata, l'opzione del socket disabiliterà l'algoritmo Nagle sulla connessione. Vale a dire che i pacchetti verranno inviati non appena possibile invece di attendere un buffer o un timeout completo.

Il valore "1" disabilita l'algoritmo Nagle per tutti i socket.

Il valore "0" mantiene abilitato l'algoritmo Nagle (default).

Esempio 28.1: Configurazione oggetto Beast di esempio
cephuser@adm > ceph config set rgw.myrealm.myzone.ses-min1.kwwazo \
 rgw_frontends beast port=8000 ssl_port=443 \
 ssl_certificate=/etc/ssl/ssl.crt \
 error_log_file=/var/log/radosgw/beast.error.log

28.5.2.2 CivetWeb

porta

Numero di porta di attesa. Per le porte abilitate per SSL, aggiungere un suffisso "s" (ad esempio "443s"). Per associare un indirizzo IPv4 o IPv6 specifico, utilizzare il formato "address:port". È possibile specificare più endpoint aggiungendoli con il simbolo "+" o specificando diverse opzioni:

port=127.0.0.1:8000+443s
port=8000 port=443s

Il valore di default è 7480.

num_threads

Numero di thread generati da Civetweb per la gestione delle connessioni HTTP in entrata. Questa impostazione consente di limitare effettivamente il numero di connessioni simultanee di cui il front-end è in grado di occuparsi.

Il valore di default è quello specificato dall'opzione rgw_thread_pool_size.

request_timeout_ms

Intervallo di tempo espresso in millisecondi durante il quale Civitweb resta in attesa di altri dati in entrata prima di abbandonare l'operazione.

Il valore di default è 30.000 millisecondi.

access_log_file

Percorso del file di log di accesso. È possibile specificare un percorso completo o un percorso relativo alla directory di lavoro attuale. Se non è specificato (default), gli accessi non vengono registrati.

error_log_ file

Percorso del file di log degli errori. È possibile specificare un percorso completo o un percorso relativo alla directory di lavoro attuale. Se non è specificato (default), gli errori non vengono registrati.

Esempio 28.2: Configurazione Civetweb di esempio in /etc/ceph/ceph.conf
cephuser@adm > ceph config set rgw.myrealm.myzone.ses-min2.ingabw \
 rgw_frontends civetweb port=8000+443s request_timeout_ms=30000 \
 error_log_file=/var/log/radosgw/civetweb.error.log

28.5.2.3 Opzioni comuni

ssl_certificate

Percorso del file di certificato SSL utilizzato per gli endpoint abilitati per SSL.

prefisso

Stringa di prefisso inserita nell'URI di tutte le richieste. Ad esempio, un front-end solo Swift può fornire un prefisso URI /swift.

29 Moduli di Ceph Manager

L'architettura di Ceph Manager (per una breve presentazione, consultare questo riferimento: Book “Guida alla distribuzione”, Chapter 1 “SES e Ceph”, Section 1.2.3 “Daemon e nodi Ceph”) consente di estendere le sue funzionalità tramite i moduli, come "dashboard" (vedere il Parte I, «Ceph Dashboard»), "prometheus" (vedere il Capitolo 16, Monitoraggio e creazione di avvisi) o "servizio di bilanciamento".

Per visualizzare un elenco di tutti i moduli disponibili, eseguire:

cephuser@adm > ceph mgr module ls
{
        "enabled_modules": [
                "restful",
                "status"
        ],
        "disabled_modules": [
                "dashboard"
        ]
}

Per abilitare o disabilitare un modulo specifico, eseguire:

cephuser@adm > ceph mgr module enable MODULE-NAME

Esempio:

cephuser@adm > ceph mgr module disable dashboard

Per visualizzare un elenco dei servizi forniti dai moduli abilitati, eseguire:

cephuser@adm > ceph mgr services
{
        "dashboard": "http://myserver.com:7789/",
        "restful": "https://myserver.com:8789/"
}

29.1 Servizio di bilanciamento

Il modulo del servizio di bilanciamento consente di ottimizzare la distribuzione del gruppo di posizionamento (PG) sugli OSD per una distribuzione più bilanciata. Anche se attivato per default, il modulo è inattivo. Supporta le due modalità seguenti: crush-compat e upmap.

Suggerimento
Suggerimento: configurazione e stato attuali del servizio di bilanciamento

Per visualizzare le informazioni sulla configurazione e sullo stato attuali del servizio di bilanciamento, eseguire:

cephuser@adm > ceph balancer status

29.1.1 Modalità "crush-compat"

Nella modalità "crush-compat", il servizio di bilanciamento regola il valore reweight-sets degli OSD per ottenere una migliore distribuzione dei dati. Sposta i gruppi di posizionamento tra gli OSD, attivando temporaneamente lo stato HEALTH_WARN sul cluster derivante dalla posizione errata dei gruppi di posizionamento.

Suggerimento
Suggerimento: attivazione della modalità

Anche se "crush-compat" è la modalità di default, si consiglia di attivarla esplicitamente:

cephuser@adm > ceph balancer mode crush-compat

29.1.2 Pianificazione ed esecuzione del bilanciamento dei dati

Tramite il modulo del servizio di bilanciamento, è possibile pianificare il bilanciamento dei dati. È quindi possibile eseguire manualmente tale pianificazione oppure impostare il bilanciamento continuo dei gruppi di posizionamento tramite il servizio di bilanciamento.

La scelta di eseguire il servizio di bilanciamento in modalità automatica o manuale dipende da diversi fattori, come lo squilibrio dei dati attuali, le dimensioni del cluster, il numero di gruppi di posizionamento o l'attività I/O. Si consiglia di creare una pianificazione iniziale e di eseguirla quando il carico I/O sul cluster è ridotto. Infatti, lo squilibrio iniziale sarà probabilmente notevole ed è quindi consigliabile mantenere basso l'impatto sui client. Dopo l'iniziale esecuzione manuale, considerare l'attivazione della modalità automatica e monitorare il traffico di ribilanciamento in condizioni di carico I/O normale. I miglioramenti apportati alla distribuzione del gruppo di posizionamento devono essere ponderati in base al traffico di ribilanciamento creato dal servizio di bilanciamento.

Suggerimento
Suggerimento: frazione mobile dei gruppi di posizionamento (PG)

Durante il processo di bilanciamento, il modulo del servizio di bilanciamento limita i movimenti del gruppo di posizionamento per fare in modo che ne venga spostata soltanto una frazione configurabile. Il valore di default è 5% ed è possibile regolare la frazione, ad esempio sul 9%, eseguendo il comando seguente:

cephuser@adm > ceph config set mgr target_max_misplaced_ratio .09

Per creare ed eseguire una pianificazione del bilanciamento, seguire la procedura indicata di seguito:

  1. Controllare il punteggio del cluster corrente:

    cephuser@adm > ceph balancer eval
  2. Creare una pianificazione. Ad esempio, "great_plan":

    cephuser@adm > ceph balancer optimize great_plan
  3. Verificare i cambiamenti implicati dall'uso di "great_plan":

    cephuser@adm > ceph balancer show great_plan
  4. Controllare il punteggio potenziale del cluster se si dovesse decidere di applicare "great_plan":

    cephuser@adm > ceph balancer eval great_plan
  5. Eseguire "great_plan" per una sola volta:

    cephuser@adm > ceph balancer execute great_plan
  6. Osservare il bilanciamento del cluster con il comando ceph -s. Se si è soddisfatti del risultato, attivare il bilanciamento automatico:

    cephuser@adm > ceph balancer on

    Se in un secondo momento si decide di disattivare il bilanciamento automatico, eseguire:

    cephuser@adm > ceph balancer off
Suggerimento
Suggerimento: bilanciamento automatico senza pianificazione iniziale

È possibile attivare il bilanciamento automatico senza eseguire una pianificazione iniziale. In questo caso, l'esecuzione del ribilanciamento dei gruppi di posizionamento potrebbe impiegare molto tempo.

29.2 Abilitazione del modulo di telemetria

Il plug-in di telemetria consente di inviare i dati anonimi del progetto Ceph relativi al cluster su cui è in esecuzione il plug-in.

Questo componente (che richiede il consenso esplicito) contiene contatori e statistiche sulla modalità di distribuzione del cluster, sulla versione di Ceph, sulla distribuzione degli host e su altri parametri, che consentono di comprendere meglio l'utilizzo di Ceph. Non contiene nessun dato sensibile come nomi dei pool, nomi e contenuto di oggetti o nomi host.

Lo scopo del modulo di telemetria consiste nel fornire agli sviluppatori un ciclo di feedback automatizzato per agevolare il calcolo dei tassi di adozione, il controllo o l'individuazione degli aspetti da approfondire o convalidare ulteriormente durante la configurazione per evitare risultati indesiderati.

Nota
Nota

Per essere in grado di inviare i dati su HTTPS ai server upstream, il modulo di telemetria richiede i nodi Ceph Manager. Assicurarsi che i firewall aziendali consentano questa azione.

  1. Per abilitare il modulo di telemetria:

    cephuser@adm > ceph mgr module enable telemetry
    Nota
    Nota

    Questo comando consente soltanto di visualizzare i dati a livello locale. Questo comando non condivide i dati con la community di Ceph.

  2. Per consentire al modulo di telemetria di avviare la condivisione dei dati:

    cephuser@adm > ceph telemetry on
  3. Per disabilitare la condivisione dei dati di telemetria:

    cephuser@adm > ceph telemetry off
  4. Per generare un rapporto JSON stampabile:

    cephuser@adm > ceph telemetry show
  5. Per aggiungere un contatto e una descrizione al rapporto:

    cephuser@adm > ceph config set mgr mgr/telemetry/contact John Doe john.doe@example.com
    cephuser@adm > ceph config set mgr mgr/telemetry/description 'My first Ceph cluster'
  6. Per default, il modulo compila e invia un nuovo rapporto ogni 24 ore. Per modificare questo intervallo:

    cephuser@adm > ceph config set mgr mgr/telemetry/interval HOURS

30 Autenticazione con cephx

Per identificare i client e proteggerli da attacchi man-in-the-middle, in Ceph è disponibile il rispettivo sistema di autenticazione cephx. I client in questo contesto sono utenti umani, come l'utente amministratore, o servizi/daemon correlati a Ceph, ad esempio OSD, monitoraggi o Object Gateway.

Nota
Nota

Il protocollo cephx non indirizza la cifratura dati nel trasporto, come TLS/SSL.

30.1 Architettura di autenticazione

cephx utilizza chiavi segrete condivise per l'autenticazione, vale a dire che sia il client che i Ceph Monitor dispongono di una copia della chiave segreta del client. Il protocollo di autenticazione consente a entrambe le parti di provare a vicenda l'esistenza di una copia della chiave senza rivelarla effettivamente. In tal modo se esegue un'autenticazione reciproca, che assicura sia all'utente sia al cluster che entrambi possiedono rispettivamente la chiave segreta e la copia della stessa.

Una funzione di scalabilità della chiave di Ceph consente di evitare un'interfaccia centralizzata nell'archivio dati Ceph. Ciò significa che i client Ceph possono interagire direttamente con gli OSD. Per proteggere i dati, in Ceph è disponibile il sistema di autenticazione cephx, che consente di autenticare i client Ceph.

Ciascun monitoraggio in grado di autenticare client e distribuire chiavi, pertanto non si verifica alcun single point of failure o collo di bottiglia quando si utilizza cephx. Il monitoraggio restituisce una struttura di dati di autenticazione nella quale è inclusa una chiave sessione quando si ottengono i servizi Ceph. Tale chiave sessione è cifrata con la chiave segreta permanente del client in modo che solo quest'ultimo sia in grado di richiedere servizi dai Ceph monitor. La chiave sessione viene quindi utilizzata dal client per richiedere i rispettivi servizi desiderati dal monitoraggio e questo a sua volta fornisce un ticket tramite il quale il client eseguirà l'autenticazione negli OSD in cui vengono effettivamente gestiti i dati. I Ceph monitor e gli OSD condividono un segreto in modo che il client possa utilizzare il ticket fornito dal monitoraggio con qualsiasi OSD o server di metadati nel cluster. Poiché i ticket cephx hanno una scadenza, l'autore di un attacco non può utilizzare un ticket scaduto o una chiave sessione ottenuti in modo illecito.

Per utilizzare cephx, l'amministratore deve prima configurare i client/gli utenti. Nel seguente diagramma, l'utente client.admin richiama ceph auth get-or-create-key dalla riga di comando per generare un nome utente e una chiave segreta. Nel sottosistema auth di Ceph vengono generati nome utente e chiave, quindi viene memorizzata una copia con il o i monitoraggio e il segreto dell'utente viene trasmesso di nuovo all'utente client.admin. Vale a dire che client e monitoraggio condividono una chiave segreta.

Autenticazione cephx di base
Figura 30.1: Autenticazione cephx di base

Per eseguire l'autenticazione con il monitoraggio, il client trasmette al monitoraggio il nome utente. Il monitoraggio genera una chiave sessione che viene cifrata con la chiave segreta associata al nome utente e il ticket cifrato viene trasmesso di nuovo al client. I dati con la chiave segreta condivisa vengono quindi decifrati nel client in modo da recuperare la chiave sessione. La chiave sessione consente di identificare l'utente per la sessione attuale. Il client richiede quindi un ticket correlato all'utente, che viene firmato dalla chiave sessione. Il monitoraggio genera un ticket, che viene poi cifrato con la chiave segreta dell'utente e trasmesso di nuovo al client. Il ticket viene quindi decifrato dal client e utilizzato per firmare le richieste agli OSD e ai server di metadati nel cluster.

Autenticazione cephx
Figura 30.2: Autenticazione cephx

Il protocollo cephx consente di autenticare le comunicazioni in corso tra il computer client e i server Ceph. Ciascun messaggio inviato tra un client e un server dopo l'autenticazione iniziale viene firmato mediante l'uso di un ticket che può essere verificato da monitoraggi, OSD, e server di metadati tramite il rispettivo segreto condiviso.

Autenticazione cephx - MDS e OSD
Figura 30.3: Autenticazione cephx - MDS e OSD
Importante
Importante

La protezione offerta da questa autenticazione viene applicata tra il client Ceph e gli host del cluster Ceph. L'autenticazione non viene estesa oltre il client Ceph. Se un utente accede al client Ceph da un host remoto, l'autenticazione Ceph non viene applicata alla connessione tra l'host dell'utente e l'host client.

30.2 Gestione delle chiavi

In questa sezione sono descritti gli utenti del client Ceph e le rispettive autenticazioni e autorizzazioni con il cluster di memorizzazione Ceph. Gli utenti sono individui o attori di sistema, come le applicazioni, che utilizzano i client Ceph per interagire con i daemon del cluster di memorizzazione Ceph.

Quando Ceph viene eseguito con l'autenticazione e l'autorizzazione abilitate (abilitate per default), è necessario specificare un nome utente e un portachiavi contenente la chiave segreta dell'utente specificato (di solito tramite riga di comando). Se non si specifica un nome utente, Ceph utilizzerà client.admin come nome utente di default. Se non si specifica un portachiavi, Ceph ne ricercherà uno tramite l'impostazione del portachiavi nel file di configurazione Ceph. Ad esempio, se si esegue il comando ceph health senza specificare un nome utente o un portachiavi, il comando viene interpretato da Ceph nel seguente modo:

cephuser@adm > ceph -n client.admin --keyring=/etc/ceph/ceph.client.admin.keyring health

In alternativa, è possibile utilizzare la variabile di ambiente CEPH_ARGS per evitare di immettere di nuovo il nome utente e il segreto.

30.2.1 Informazioni di background

Indipendentemente dal tipo di client Ceph (ad esempio, dispositivo di blocco, spazio di memorizzazione degli oggetti, file system, API nativa), Ceph memorizza tutti i dati come oggetti nei pool. Gli utenti Ceph devono disporre dell'accesso ai pool per leggere e scrivere i dati. Inoltre, gli utenti Ceph devono eseguire le autorizzazioni per utilizzare i comandi amministrativi Ceph. Di seguito sono spiegati i concetti per comprendere come gestire gli utenti Ceph.

30.2.1.1 Utente

Un utente è un individuo o un attore di sistema, come ad esempio un'applicazione. La creazione di utenti consente di controllare chi (o cosa) può accedere al cluster di memorizzazione Ceph, ai rispettivi pool e ai dati in essi contenuti.

Ceph utilizza tipi di utenti. Ai fini della gestione degli utenti, il tipo sarà sempre client. Ceph identifica gli utenti nella forma delimitata da un punto (.), costituita dal tipo di utente e ID utente. Ad esempio, TYPE.ID, client.admin o client.user1. Il motivo dell'uso del tipo di utente sta nel fatto che anche i Ceph monitor, gli OSD e i server di metadati utilizzano il protocollo cephx, ma non sono client. La distinzione del tipo di utenti consente di distinguere gli utenti del client dagli altri, semplificando il controllo degli accessi, nonché il monitoraggio e la tracciabilità degli utenti.

A volte non è semplice capire qual è il tipo di utente. A seconda di come viene utilizzata, la riga di comando di Ceph consente infatti di specificare l'utente con o senza tipo. Se si specifica --user o --id, è possibile omettere il tipo. client.user1 può quindi essere immesso semplicemente come user1. Se si specifica --name o -n, è necessario indicare il tipo e il nome, ad esempio client.user1. Laddove possibile, come best practice si consiglia di utilizzare anche il tipo e il nome.

Nota
Nota

Un utente del cluster di memorizzazione Ceph non è lo stesso di un'unità di memorizzazione degli oggetti Ceph o di un utente del file system Ceph. Ceph Object Gateway utilizza un utente del cluster di memorizzazione Ceph per la comunicazione tra il daemon del gateway e il cluster di memorizzazione, ma il gateway dispone di una funzionalità di gestione degli utenti propria per gli utenti finali. Nel file system Ceph viene utilizzata la semantica POSIX. Lo spazio utente associato a esso non è lo stesso dell'utente di un cluster di memorizzazione Ceph.

30.2.1.2 Autorizzazione e funzionalità

In Ceph, con il termine "capabilities" (caps, funzionalità) si intende l'autorizzazione di un utente autenticato a praticare la funzionalità di monitoraggio, OSD e server dei metadati. Le capacità possono inoltre limitare l'accesso ai dati all'interno di un pool o di uno spazio dei nomi del pool. Le funzionalità di un utente vengono impostate da un utente amministrativo Ceph durante la creazione o l'aggiornamento di un utente.

La sintassi delle funzionalità presenta la forma seguente:

daemon-type 'allow capability' [...]

Di seguito è riportato un elenco di funzionalità per ciascun tipo di servizio:

Funzionalità di monitoraggio

includono r, w, x e allow profile cap.

mon 'allow rwx'
mon 'allow profile osd'
Funzionalità OSD

includono r, w, x, class-read, class-write e profile osd. Le funzionalità OSD consentono inoltre le impostazioni di pool spazio dei nomi.

osd 'allow capability' [pool=poolname] [namespace=namespace-name]
Funzionalità MDS

richiedono semplicemente allow o è possibile lasciare vuoto.

mds 'allow'

Le voci seguenti descrivono ciascuna funzionalità:

allow

Precede le impostazioni di accesso per un daemon. Implica rw solo per MDS.

r

Fornisce all'utente l'accesso in lettura. Richiesta con monitoraggi per il recupero della mappa CRUSH.

w

Fornisce all'utente l'accesso in scrittura agli oggetti.

x

Fornisce all'utente la funzionalità di chiamare metodi di classe (lettura e scrittura) per eseguire operazioni auth nei monitoraggi.

class-read

Fornisce all'utente la funzionalità di chiamare metodi di lettura di classe. Sottoinsieme di x.

class-write

Fornisce all'utente la funzionalità di chiamare metodi di scrittura di classe. Sottoinsieme di x.

*

Fornisce all'utente autorizzazioni per la lettura, scrittura ed esecuzione di un determinato daemon/pool, nonché la capacità di eseguire comandi amministrativi.

profile osd

Fornisce all'utente le autorizzazioni per connettere un OSD ad altri OSD o monitoraggi. Concessa sugli OSD per abilitarli a gestire il traffico heartbeat delle repliche e le segnalazioni dello stato.

profile mds

Fornisce all'utente le autorizzazioni per connettere un MDS ad altri MDS o monitoraggi.

profile bootstrap-osd

Fornisce all'utente le autorizzazioni per eseguire il bootstrap su un OSD. Delegata agli strumenti di distribuzione in modo che dispongano delle autorizzazioni per aggiungere chiavi quando si esegue il bootstrap di un OSD.

profile bootstrap-mds

Fornisce all'utente le autorizzazioni per eseguire il bootstrap su un server dei metadati. Delegata agli strumenti di distribuzione in modo che dispongano delle autorizzazioni per aggiungere chiavi quando si esegue il bootstrap di un server dei metadati.

30.2.1.3 Pool

Un pool è una partizione logica in cui vengono memorizzati i dati degli utenti. Nelle distribuzioni Ceph, è prassi comune creare un pool come partizione logica per tipi di dati simili. Ad esempio, quando si distribuisce Ceph come back end per OpenStack, una distribuzione tipica comprende pool per volumi, immagini, backup, macchine virtuali e utenti come client.glance o client.cinder.

30.2.2 Gestione degli utenti

La funzionalità di gestione degli utenti offre agli amministratori del cluster Ceph la possibilità di creare, aggiornare ed eliminare utenti direttamente nel cluster Ceph.

Quando si creano o si eliminano utenti nel cluster Ceph, potrebbe essere necessario distribuire chiavi ai client in modo che possano essere aggiunte ai portachiavi. Per informazioni, vedere Sezione 30.2.3, «Gestione dei portachiavi».

30.2.2.1 Elenco degli utenti

Per elencare gli utenti nel cluster, eseguire quanto riportato di seguito:

cephuser@adm > ceph auth list

Ceph elencherà tutti gli utenti nel cluster. Ad esempio, in un cluster con due nodi, l'output ceph auth list ha un aspetto simile:

installed auth entries:

osd.0
        key: AQCvCbtToC6MDhAATtuT70Sl+DymPCfDSsyV4w==
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.1
        key: AQC4CbtTCFJBChAAVq5spj0ff4eHZICxIOVZeA==
        caps: [mon] allow profile osd
        caps: [osd] allow *
client.admin
        key: AQBHCbtT6APDHhAA5W00cBchwkQjh3dkKsyPjw==
        caps: [mds] allow
        caps: [mon] allow *
        caps: [osd] allow *
client.bootstrap-mds
        key: AQBICbtTOK9uGBAAdbe5zcIGHZL3T/u2g6EBww==
        caps: [mon] allow profile bootstrap-mds
client.bootstrap-osd
        key: AQBHCbtT4GxqORAADE5u7RkpCN/oo4e5W0uBtw==
        caps: [mon] allow profile bootstrap-osd
Nota
Nota: notazione TYPE.ID

Si noti che viene applicata la notazione TYPE.ID per gli utenti in modo che osd.0 specifichi un utente di tipo osd con ID 0. client.admin è un utente di tipo client con ID admin. Inoltre, ogni voce presenta una voce key: value e una o più voci caps:.

È possibile utilizzare l'opzione -o filename con ceph auth list per salvare l'output in un file.

30.2.2.2 Ottenimento delle informazioni sugli utenti

Per recuperare un utente, una chiave e funzionalità specifiche, eseguire quanto riportato di seguito:

cephuser@adm > ceph auth get TYPE.ID

Esempio:

cephuser@adm > ceph auth get client.admin
exported keyring for client.admin
[client.admin]
	key = AQA19uZUqIwkHxAAFuUwvq0eJD4S173oFRxe0g==
	caps mds = "allow"
	caps mon = "allow *"
 caps osd = "allow *"

Gli sviluppatori possono eseguire anche:

cephuser@adm > ceph auth export TYPE.ID

Il comando auth export è identico a auth get, ma consente anche di stampare l'ID autenticazione interno.

30.2.2.3 Aggiunta di utenti

Con l'aggiunta di un utente si creano un nome utente (TYPE.ID), una chiave segreta e tutte le funzionalità incluse nel comando utilizzato per creare l'utente.

La chiave di un utente consente a quest'ultimo di eseguire l'autenticazione con il cluster di memorizzazione Ceph. Le funzionalità dell'utente gli forniscono le autorizzazione in lettura, scrittura o esecuzione nei Ceph monitor (mon), Ceph OSD (osd) server dei metadati Ceph (mds).

Per aggiungere un utente sono disponibili alcuni comandi:

ceph auth add

Questo comando è il modo canonico per aggiungere un utente. Consente di creare l'utente, generare una chiave e aggiungere tutte le funzionalità specificate.

ceph auth get-or-create

Questo comando è spesso il modo più pratico per creare un utente perché restituisce un formato keyfile con nome utente (tra parentesi) e chiave. Se l'utente esiste già, questo comando restituisce semplicemente il nome utente e la chiave nel formato keyfile. È possibile utilizzare l'opzione -o filename per salvare l'output in un file.

ceph auth get-or-create-key

Questo comando è un modo pratico per creare un utente e restituire (solo) la chiave utente. È utile per i client per i quali è necessaria solo la chiave (ad esempio libvirt). Se l'utente esiste già, questo comando restituisce semplicemente la chiave. È possibile utilizzare l'opzione -o filename per salvare l'output in un file.

Quando si creano utenti del client, è possibile creare un utente senza alcuna funzionalità. Un utente privo di funzionalità può eseguire solo ed esclusivamente l'autenticazione. Tale client non è in grado di recuperare la mappa del cluster dal monitoraggio. È tuttavia possibile creare un utente senza funzionalità se si desidera rinviare l'aggiunta delle funzionalità in un momento successivo mediante l'uso del comando ceph auth caps.

Un utente tipico dispone almeno delle funzionalità di lettura sul Ceph monitor e delle funzionalità di lettura e scrittura sui Ceph OSD. Inoltre, le autorizzazioni OSD di un utente sono spesso limitate per l'accesso a un determinato pool.

cephuser@adm > ceph auth add client.john mon 'allow r' osd \
 'allow rw pool=liverpool'
cephuser@adm > ceph auth get-or-create client.paul mon 'allow r' osd \
 'allow rw pool=liverpool'
cephuser@adm > ceph auth get-or-create client.george mon 'allow r' osd \
 'allow rw pool=liverpool' -o george.keyring
cephuser@adm > ceph auth get-or-create-key client.ringo mon 'allow r' osd \
 'allow rw pool=liverpool' -o ringo.key
Importante
Importante

Se si forniscono a un utente le funzionalità per gli OSD, ma non si limita l'accesso a un determinato pool, l'utente potrà accedere a tutti i pool nel cluster.

30.2.2.4 Modifica delle funzionalità utente

Il comando ceph auth caps consente di specificare un utente e di modificarne le funzionalità. Quando si impostano nuove funzionalità, quelle attuali verranno sovrascritte. Per visualizzare le funzionalità attuali, eseguire ceph auth get USERTYPE.USERID. Per aggiungere funzionalità, è necessario specificare anche le funzionalità esistenti quando si utilizza la forma seguente:

cephuser@adm > ceph auth caps USERTYPE.USERID daemon 'allow [r|w|x|*|...] \
     [pool=pool-name] [namespace=namespace-name]' [daemon 'allow [r|w|x|*|...] \
     [pool=pool-name] [namespace=namespace-name]']

Esempio:

cephuser@adm > ceph auth get client.john
cephuser@adm > ceph auth caps client.john mon 'allow r' osd 'allow rw pool=prague'
cephuser@adm > ceph auth caps client.paul mon 'allow rw' osd 'allow r pool=prague'
cephuser@adm > ceph auth caps client.brian-manager mon 'allow *' osd 'allow *'

Per rimuovere una funzionalità, è possibile reimpostarla. Se si desidera che l'utente non disponga di alcun accesso a un determinato daemon impostato precedentemente, specificare una stringa vuota:

cephuser@adm > ceph auth caps client.ringo mon ' ' osd ' '

30.2.2.5 Eliminazione di utenti

Per eliminare un utente, utilizzare ceph auth del:

cephuser@adm > ceph auth del TYPE.ID

dove TYPE è un client, osd, mon o mds e ID è il nome utente o l'ID del daemon.

Se sono stati creati utenti con autorizzazioni esclusivamente per un pool non più esistente, considerare di eliminare anche tali utenti.

30.2.2.6 Stampa di una chiave utente

Per stampare una chiave di autenticazione dell'utente nell'output standard, eseguire quanto riportato di seguito:

cephuser@adm > ceph auth print-key TYPE.ID

dove TYPE è un client, osd, mon o mds e ID è il nome utente o l'ID del daemon.

È utile stampare una chiave utente quando è necessario popolare il software del client con una chiave utente (come libvirt), come nell'esempio seguente:

root # mount -t ceph host:/ mount_point \
-o name=client.user,secret=`ceph auth print-key client.user`

30.2.2.7 Importazione di utenti

Per importare uno o più utenti, utilizzare ceph auth import e specificare un portachiavi:

cephuser@adm > ceph auth import -i /etc/ceph/ceph.keyring
Nota
Nota

Nel cluster di memorizzazione Ceph verranno aggiunti nuovi utenti, le rispettive chiavi e funzionalità e verranno aggiornati gli utenti esistenti, insieme alle rispettive chiavi e funzionalità.

30.2.3 Gestione dei portachiavi

Quando si accede a Ceph tramite il cliente Ceph, questo ricercherà un portachiavi locale. In Ceph l'impostazione dei portachiavi è preimpostata per default con i quattro nomi seguenti, quindi non è necessario impostarli nel file di configurazione Ceph a meno che non si desideri ignorare le impostazioni di default:

/etc/ceph/cluster.name.keyring
/etc/ceph/cluster.keyring
/etc/ceph/keyring
/etc/ceph/keyring.bin

La metavariabile cluster è il nome del cluster Ceph definito dal nome del file di configurazione Ceph. ceph.conf significa che il nome del cluster è ceph, pertanto ceph.keyring. La metavariabile name è il tipo di utente e l'ID utente, ad esempio client.admin, pertanto ceph.client.admin.keyring.

Dopo aver creato un utente (ad esempio client.ringo), è necessario ottenere la chiave e aggiungerla a un portachiavi in un client Ceph in modo che l'utente possa accedere al cluster di memorizzazione Ceph.

Nella Sezione 30.2, «Gestione delle chiavi» è spiegato come elencare, ottenere, aggiungere, modificare ed eliminare utenti direttamente nel cluster di memorizzazione Ceph. Ceph, tuttavia, fornisce anche l'utility ceph-authtool per consentire la gestione dei portachiavi da un client Ceph.

30.2.3.1 Creazione di un portachiavi

Quando si utilizzano le procedure indicate nella Sezione 30.2, «Gestione delle chiavi» per creare utenti, è necessario fornire chiavi utente ai client Ceph in modo che il client possa recuperare la chiave per l'utente specificato ed eseguire l'autenticazione con il cluster di memorizzazione Ceph. I client Ceph accedono ai portachiavi per ricercare un nome utente e recuperare la chiave dell'utente:

cephuser@adm > ceph-authtool --create-keyring /path/to/keyring

Quando si crea un portachiavi con più utenti, si consiglia di utilizzare il nome cluster (ad esempio cluster.keyring) per il nome file del portachiavi e salvarlo nella directory /etc/ceph, in modo che l'impostazione di default della configurazione del portachiavi selezioni il nome file senza doverlo specificare nella copia locale del file di configurazione Ceph. Ad esempio, creare ceph.keyring eseguendo quanto riportato di seguito:

cephuser@adm > ceph-authtool -C /etc/ceph/ceph.keyring

Quando si crea un portachiavi con un singolo utente, si consiglia di utilizzare il nome del cluster, il tipo di utente e il nome utente e salvarlo nella directory /etc/ceph. Ad esempio, ceph.client.admin.keyring per l'utente client.admin.

30.2.3.2 Aggiunta di un utente a un portachiavi

Quando si aggiunge un utente al cluster di memorizzazione Ceph (vedere Sezione 30.2.2.3, «Aggiunta di utenti»), è possibile recuperare utente, chiave e funzionalità e salvare l'utente in un portachiavi.

Se si desidera solo utilizzare un utente per portachiavi, con il comando ceph auth get e l'opzione -o l'output verrà salvato nel formato file del portachiavi. Ad esempio, per creare un portachiavi per l'utente client.admin, eseguire quanto riportato di seguito:

cephuser@adm > ceph auth get client.admin -o /etc/ceph/ceph.client.admin.keyring

Quando si desidera importare utenti in un portachiavi, è possibile utilizzare ceph-authtool per specificare il portachiavi di destinazione e quello di origine:

cephuser@adm > ceph-authtool /etc/ceph/ceph.keyring \
  --import-keyring /etc/ceph/ceph.client.admin.keyring
Importante
Importante

Se il portachiavi è compromesso, eliminare la chiave dalla directory /etc/ceph e crearne una nuova seguendo le stesse istruzioni della Sezione 30.2.3.1, «Creazione di un portachiavi».

30.2.3.3 Creazione di un utente

In Ceph è disponibile il comando ceph auth add per creare un utente direttamente nel cluster di memorizzazione Ceph. È tuttavia possibile creare anche un utente, chiavi e funzionalità direttamente in un portachiavi client Ceph. Quindi, è possibile importare l'utente nel cluster di memorizzazione Ceph:

cephuser@adm > ceph-authtool -n client.ringo --cap osd 'allow rwx' \
  --cap mon 'allow rwx' /etc/ceph/ceph.keyring

È altresì possibile creare un portachiavi e aggiungervi un utente simultaneamente:

cephuser@adm > ceph-authtool -C /etc/ceph/ceph.keyring -n client.ringo \
  --cap osd 'allow rwx' --cap mon 'allow rwx' --gen-key

Negli scenari precedenti, il nuovo utente client.ringo è presente solo nel portachiavi. Per aggiungere un nuovo utente al cluster di memorizzazione Ceph, è comunque necessario aggiungerlo al cluster:

cephuser@adm > ceph auth add client.ringo -i /etc/ceph/ceph.keyring

30.2.3.4 Modifica di utenti

Per modificare le funzionalità di un record utente in un portachiavi, specificare il portachiavi e l'utente seguiti dalle funzionalità:

cephuser@adm > ceph-authtool /etc/ceph/ceph.keyring -n client.ringo \
  --cap osd 'allow rwx' --cap mon 'allow rwx'

Per aggiornare l'utente modificato nell'ambiente cluster Ceph, è necessario importare le modifiche dal portachiavi alla voce utente nel cluster Ceph:

cephuser@adm > ceph auth import -i /etc/ceph/ceph.keyring

Vedere Sezione 30.2.2.7, «Importazione di utenti» per informazioni più dettagliate sull'aggiornamento di un cluster di memorizzazione Ceph da un portachiavi.

30.2.4 Utilizzo della riga dei comandi

Il comando ceph supporta le seguenti opzioni correlate alla modifica del nome utente e del segreto:

--id o --user

Ceph identifica gli utenti con tipo e ID (TYPE.ID, come client.admin o client.user1). Le opzioni id, name e -n consentono di specificare la parte ID del nome utente (ad esempio admin o user1). È possibile specificare l'utente con --id e omettere il tipo. Ad esempio, per specificare l'utente client.foo immettere quanto indicato di seguito:

cephuser@adm > ceph --id foo --keyring /path/to/keyring health
cephuser@adm > ceph --user foo --keyring /path/to/keyring health
--name o -n

Ceph identifica gli utenti con tipo e ID (TYPE.ID, come client.admin o client.user1). Le opzioni --name e -n consentono di specificare il nome utente completo. È necessario specificare il tipo di utente (di norma client) con l'ID utente:

cephuser@adm > ceph --name client.foo --keyring /path/to/keyring health
cephuser@adm > ceph -n client.foo --keyring /path/to/keyring health
--keyring

Percorso del portachiavi contenente uno o più nomi utente e segreti. L'opzione --secret offre la stessa funzionalità, ma non funzione con Object Gateway, in cui viene utilizzata --secret per altri scopi. È possibile recuperare un portachiavi con ceph auth get-or-create e memorizzarlo localmente. Questo è l'approccio preferito perché è possibile cambiare i nomi utenti senza dover cambiare il percorso del portachiavi:

cephuser@adm > rbd map --id foo --keyring /path/to/keyring mypool/myimage

A Aggiornamenti alla manutenzione di Ceph basati sulle release intermedie upstream "Octopus"

Molti pacchetti di chiavi di SUSE Enterprise Storage 7 si basano sulle serie di release Octopus di Ceph. Quando vengono pubblicate dal progetto Ceph (https://github.com/ceph/ceph) nuove release intermedie nella serie Octopus, SUSE Enterprise Storage 7 viene aggiornato con le correzioni di bug e i backport delle funzioni upstream più recenti.

Questo capitolo contiene un riepilogo delle modifiche principali presenti in ogni release intermedia upstream che sono state o che verranno incluse nel prodotto.

Release intermedia Octopus 15.2.5

La release intermedia Octopus 15.2.5 comprende le correzioni e altre modifiche seguenti:

  • CephFS: le policy automatiche di partizionamento della sotto-struttura statica possono adesso essere configurate tramite i nuovi attributi estesi di aggiunta temporanea distribuiti e casuali sulle directory. Per ulteriori informazioni consultare la documentazione seguente: https://docs.ceph.com/docs/master/cephfs/multimds/

  • I monitor dispongono adesso dell'opzione di configurazione mon_osd_warn_num_repaired, impostata a 10 per default. Se un OSD ha riparato un numero di errori di I/O nei dati archiviati superiore a quello impostato, viene generato un avviso di integrità OSD_TOO_MANY_REPAIRS.

  • Adesso, se i flag no scrub e/o no deep-scrub sono impostati a livello globale o di pool, le puliture pianificate del tipo disabilitato verranno interrotte. Tutte le puliture avviate dagli utenti NON verranno interrotte.

  • È stato risolto il problema in base al quale osdmap non veniva ottimizzato in un cluster integro.

Release intermedia Octopus 15.2.4

La release intermedia Octopus 15.2.4 comprende le correzioni e altre modifiche seguenti:

  • CVE-2020-10753: rgw: purifica i caratteri di fine riga in ExposeHeader di s3 CORSConfiguration

  • Object Gateway: i sottocomandi radosgw-admin relativi agli orphan-radosgw-admin orphans find, radosgw-admin orphans finish e radosgw-admin orphans list-jobs-sono stati deprecati. Non sono stati mantenuti attivamente e, dal momento che memorizzano risultati intermedi sul cluster, potrebbero potenzialmente riempire un cluster quasi pieno. Sono stati sostituiti da rgw-orphan-list, uno strumento attualmente considerato sperimentale.

  • RBD: il nome dell'oggetto del pool RBD utilizzato per memorizzare la pianificazione dell'eliminazione definitiva del cestino RBD è stato modificato da rbd_trash_trash_purge_schedule a rbd_trash_purge_schedule. Gli utenti che hanno già iniziato a utilizzare la funzionalità di pianificazione dell'eliminazione definitiva del cestino RBD e hanno configurato pianificazioni a livello di pool o spazio dei nomi devono copiare l'oggetto rbd_trash_trash_purge_schedule su rbd_trash_purge_schedule prima di eseguire l'upgrade e rimuovere rbd_trash_purge_schedule utilizzando i comandi seguenti in ogni pool e spazio dei nomi RBD in cui è stata precedentemente configurata una pianificazione dell'eliminazione definitiva del cestino:

    rados -p pool-name [-N namespace] cp rbd_trash_trash_purge_schedule rbd_trash_purge_schedule
    rados -p pool-name [-N namespace] rm rbd_trash_trash_purge_schedule

    In alternativa, utilizzare qualsiasi altro metodo pratico di ripristino della pianificazione in seguito all'upgrade.

Release intermedia Octopus 15.2.3

  • La release intermedia Octopus 15.2.3 era una release di correzione rapida per risolvere il problema in base al quale veniva visualizzato il danneggiamento di WAL se bluefs_preextend_wal_files e bluefs_buffered_io erano abilitati contemporaneamente. La correzione contenuta nella release 15.2.3 è soltanto una misura temporanea (il valore di default di bluefs_preextend_wal_files viene modificato su false). La correzione definitiva, molto probabilmente disponibile con la release intermedia 15.2.6, prevede la rimozione completa dell'opzione bluefs_preextend_wal_files.

Release intermedia Octopus 15.2.2

La release intermedia Octopus 15.2.2 fornisce una patch per una vulnerabilità della sicurezza:

  • CVE-2020-10736: correzione di un bypass di autorizzazione nei MON e nei MGR

Release intermedia Octopus 15.2.1

La release intermedia Octopus 15.2.1 risolve il problema in base al quale l'upgrade rapido da Luminous (SES5.5) a Nautilus (SES6) a Octopus (SES7) causava l'arresto anomalo degli OSD. Inoltre, questa release applica una patch a due vulnerabilità di sicurezza della release iniziale di Octopus (15.2.0):

  • CVE-2020-1759: correzione del riutilizzo nonce nella modalità sicura msgr V2

  • CVE-2020-1760: correzione dell'errore di XSS causato dalla suddivisione dell'intestazione RGW GetObject

B Aggiornamenti della documentazione

Questo capitolo elenca le modifiche dei contenuti della presente documentazione relative alla release di SUSE Enterprise Storage corrente.

  • Il capitolo su Ceph Dashboard (Parte I, «Ceph Dashboard») è stato spostato di un livello nella struttura della guida per consentire la ricerca direttamente nel sommario dei relativi argomenti dettagliati.

  • La struttura di Book “Guida alle operazioni e all'amministrazione” è stata aggiornata per adeguarsi alla serie di guide attuale. Alcuni capitoli sono stati spostati in altre guide (jsc#SES-1397).

Glossario

Desktop

Albero di instradamento

Un termine assegnato a qualsiasi diagramma in cui vengono mostrati i diversi instradamenti che possono essere intrapresi da un ricevitore.

Alertmanager

Binario singolo che gestisce gli avvisi inviati dal server Prometheus e che invia notifiche all'utente finale.

Ceph Dashboard

Un'applicazione di gestione e monitoraggio Ceph integrata e basata sul Web per l'amministrazione di diversi aspetti e oggetti del cluster. Il dashboard viene implementato sotto forma di modulo di Ceph Manager.

Ceph Manager

Ceph Manager o MGR è il software del Ceph Manager che raccoglie tutte le informazioni sullo stato del cluster in un'unica posizione.

Ceph Monitor

Ceph Monitor o MON è il software del Ceph Monitor.

ceph-salt

Fornisce gli strumenti per la distribuzione dei cluster Ceph gestiti da cephdam tramite Salt.

cephadm

cephadm distribuisce e gestisce i cluster Ceph connettendosi agli host del daemon manager tramite SSH per aggiungere, rimuovere o aggiornare i container del daemon Ceph.

CephFS

File system Ceph.

CephX

Protocollo di autenticazione Ceph. Cephx opera come Kerberos, ma non dispone di nessun Single point of failure.

Client Ceph

Raccolta di componenti Ceph che possono accedere ai cluster di memorizzazione Ceph. Sono inclusi Object Gateway, il dispositivo di blocco Ceph, CephFS e le librerie, i moduli del kernel e i client FUSE corrispondenti.

Cluster di memorizzazione Ceph

Set di base del software di memorizzazione in cui vengono memorizzati i dati dell'utente. Tale set è costituito da Ceph monitor e OSD.

Compartimento

Punto in cui vengono aggregati altri nodi in una gerarchia di ubicazioni fisiche.

CRUSH, mappa CRUSH

Acronimo di Controlled Replication Under Scalable Hashing: un algoritmo che determina la modalità di storage e recupero dei dati mediante il calcolo delle ubicazioni di memorizzazione dati. Per CRUSH è richiesta una mappa del cluster per memorizzare e recuperare dati negli OSD in modo pressoché casuale, con una distribuzione uniforme dei dati nel cluster.

Daemon Ceph OSD

Il daemon ceph-osd è il componente di Ceph responsabile della memorizzazione degli oggetti su un file system locale e della fornitura dell'accesso a questi ultimi sulla rete.

Dispositivo di blocco RADOS (RADOS Block Device, RBD)

Componente di storage di blocco di Ceph. Noto anche come dispositivo di blocco Ceph.

DriveGroups

I DriveGroups sono una dichiarazione di uno o più layout OSD che è possibile mappare a unità fisiche. Il layout OSD definisce il modo in cui Ceph alloca fisicamente lo storage OSD sui supporti corrispondenti ai criteri specificati.

Gateway Samba

Il gateway Samba si unisce ad Active Directory nel dominio Windows per l'autenticazione e l'autorizzazione degli utenti.

Grafana

Soluzione di monitoraggio e analisi di database.

Gruppo di zone
Memorizzazione degli oggetti Ceph

"Prodotto", servizio o funzionalità di memorizzazione degli oggetti, costituiti da un cluster di memorizzazione Ceph e da un Ceph Object Gateway.

Metadata Server

Metadata Server o MDS è il software dei metadati Ceph.

Modulo di sincronizzazione degli archivi

Modulo che consente la creazione di una zona di Object Gateway in cui conservare la cronologia delle versioni degli oggetti S3.

Multizona
Nodo

Qualsiasi computer o server in un cluster Ceph.

Nodo admin

L'host dal quale si eseguono i comandi correlati a Ceph per amministrare gli host del cluster.

Nodo OSD

Un nodo del cluster in cui vengono memorizzati i dati, vengono gestiti la replica, il recupero e il ribilanciamento dei dati e vengono fornite alcune informazioni sul monitoraggio nei Ceph monitor mediante la verifica di altri daemon Ceph OSD.

Object Gateway

Il componente gateway S3/Swift per Ceph Object Store. Noto anche come RADOS Gateway (RGW).

OSD

Object Storage Device: unità di memorizzazione fisica o logica.

PAG

Gruppo di posizionamento: una sottodivisione di un pool, utilizzata per il perfezionamento delle prestazioni.

Pool

Partizioni logiche per la memorizzazione di oggetti come immagini disco.

Prometheus

Kit di strumenti per la creazione di avvisi e il monitoraggio del sistema.

Regola CRUSH

Regola di posizionamento dei dati CRUSH che si applica a determinati pool.

Release intermedia

Qualsiasi release ad hoc che include esclusivamente correzioni dei bug o per la sicurezza.

Reliable Autonomic Distributed Object Store (RADOS)

Set di base del software di memorizzazione in cui vengono memorizzati i dati dell'utente (MON+OSD).

Samba

Software di integrazione Windows.

Set di regole

Regole per determinare il posizionamento dei dati per un pool.