iSCSI è un protocollo di rete dell'area di storage (SAN) che consente ai client (denominati iniziatori) di inviare comandi SCSI ai dispositivi di storage SCSI (destinazioni) su server remoti. SUSE Enterprise Storage include una struttura che apre la gestione dello storage Ceph a client eterogenei, come Microsoft Windows* e VMware* vSphere, attraverso il protocollo iSCSI. L'accesso multipercorso iSCSI garantisce disponibilità e scalabilità per questi client e il protocollo iSCSI standardizzato fornisce inoltre un ulteriore livello di isolamento di sicurezza tra client e il cluster SUSE Enterprise Storage. La struttura di configurazione è denominata lrbd
. Con lrbd
, gli amministratori dello storage Ceph possono definire volumi con thin-provisioning, replicati, ad alta disponibilità che supportano snapshot di sola lettura, clone di scrittura-lettura e ridimensionamento automatico con Ceph RADOS Block Device (RBD). Gli amministratori possono quindi esportare i volumi tramite un singolo host gateway lrbd
o tramite più host gateway che supportano il failover multipercorso. Gli host Linux, Microsoft Windows e VMware possono collegarsi a volumi che utilizzano il protocollo iSCSI, che li rende disponibili come altri dispositivi di blocco SCSI. Questo significa che i clienti di SUSE Enterprise Storage possono efficacemente eseguire un sottosistema completo dell'infrastruttura di storage di blocco su Ceph che fornisce tutti i vantaggi di un SAN convenzionale, consentendo la crescita futura.
Questo capitolo presenta informazioni dettagliate per configurare un'infrastruttura del cluster Ceph insieme con un iSCSI Gateway, in modo che gli host client possano utilizzare da remoto i dati memorizzati come dispositivi di storage locale con il protocollo iSCSI.
iSCSI è un'implementazione del set di comandi Small Computer System Interface (SCSI) mediante il Protocollo Internet (IP), specificato in RFC 3720. iSCSI è implementato come servizio dove un client (l'iniziatore) parla a un server (la destinazione) tramite una sessione sulla porta TCP 3260. Una porta e un indirizzo IP della destinazione iSCSI sono denominati portale iSCSI, dove una destinazione può essere esposta attraverso uno o più portali. La combinazione di una destinazione e uno o più portali è detta gruppo portale di destinazione (target portal group, TPG).
Il protocollo del livello collegamento dati sottostante per iSCSI e di solito Ethernet. Più specificamente, le moderne infrastrutture iSCSI utilizzano reti Ethernet 10 Gigabit o più veloci per un throughput ottimale. Si consiglia la connettività Ethernet 10 Gigabit tra iSCSI Gateway e il cluster Ceph back-end.
La destinazione iSCSI Kernel Linux era in origine denominata LIO per linux-iscsi.org, il dominio originale e sito Web del progetto. Per qualche tempo, erano disponibili per la piattaforma Linux non meno di quattro implementazioni di destinazione iSCSI in concorrenza, ma LIO alla fine ha prevalso come singola destinazione di riferimento iSCSI. Il codice kernel mainline di LIO utilizza il semplice ma certamente ambiguo nome "destinazione", che distingue tra "core di destinazione" e una varietà di moduli di destinazione front-end e back-end.
Il modulo front-end più comunemente utilizzato è iSCSI. Tuttavia, LIO supporta anche i protocolli Fibre Channel (FC), Fibre Channel over Ethernet (FCoE) e diversi altri protocolli front-end. Attualmente, è supportato da SUSE Enterprise Storage solo il protocollo iSCSI.
Il modulo back-end di destinazione più utilizzato è quello in grado di riesportare semplicemente qualsiasi dispositivo di blocco disponibile sull'host di destinazione. Questo modulo è denominato iblock. Tuttavia, LIO ha anche un modulo back-end specifico RBD che supporta l'accesso I/O multipercorso parallelizzato alle immagini RBD.
Questa sezione presenta brevi informazioni sugli iniziatori iSCSI utilizzati su piattaforme Linux, Microsoft Windows e VMware.
L'iniziatore standard per la piattaforma Linux è open-iscsi
. open-iscsi
lancia un daemon, iscsid
, che l'utente può quindi utilizzare per rilevare destinazioni iSCSI su qualsiasi portale dato, accedere alle destinazioni e mappare volumi iSCSI. iscsid
comunica con il livello mediano SCSI per creare dispositivi di blocco nel kernel, che il kernel può quindi trattare come altri dispositivi di blocco SCSI nel sistema. L'iniziatore open-iscsi
può essere distribuito insieme con la facility Device Mapper Multipath (dm-multipath
) per fornire un dispositivo di blocco iSCSI ad alta disponibilità.
L'iniziatore iSCSI di default per il sistema operativo Microsoft Windows è l'iniziatore Microsoft iSCSI. Il servizio iSCSI può essere configurato tramite un'interfaccia grafica utente (GUI) e supporta I/O multipercorso per alta disponibilità.
L'iniziatore iSCSI di default per VMware vSphere ed ESX è l'iniziatore iSCSI del software VMware ESX, vmkiscsi
. Quando abilitato, può essere configurato dal client vSphere o mediante il comando vmkiscsi-tool
. È quindi possibile formattare i volumi di storage connessi attraverso l'adattatore di storage vSphere iSCSI con VMFS e utilizzarli come altri dispositivi di storage VM. L'iniziatore VMware supporta anche I/O multipercorso per alta disponibilità.
lrbd
combina i vantaggi dei dispositivi di blocco RADOS con la versatilità diffusa di iSCSI. Impiegando lrbd
su un host di destinazione iSCSI (noto come il gateway lrbd
), qualsiasi applicazione che deve utilizzare uno storage di blocco può avvantaggiarsi da Ceph, anche se non utilizza alcun protocollo del client Ceph. Al contrario, gli utenti possono utilizzare iSCSI o un altro protocollo front-end di destinazione per collegarsi a una destinazione LIO che traduce tutti gli I/O di destinazione in operazioni di storage RBD.
lrbd
è inerentemente ad alta disponibilità e supporta operazioni multipercorso. Perciò, gli host iniziatori a valle possono utilizzare più iSCSI Gateway per alta disponibilità e scalabilità. Quando si comunica con una configurazione iSCSI con più gateway, gli iniziatori possono bilanciare il carico delle richieste iSCSI tra più gateway. Nel caso in cui un gateway sia in errore, temporaneamente irraggiungibile o disattivato per manutenzione, gli I/O continueranno in modo trasparente attraverso un altro gateway.
Una configurazione minima di SUSE Enterprise Storage con lrbd
contiene i seguenti componenti:
Un cluster di storage Ceph. Il cluster Ceph consiste di un minimo di quattro server fisici contenenti almeno otto OSD (object storage daemon) ciascuno. In tale configurazione, tre nodi OSD raddoppiano come host monitor (MON).
Un server di destinazione iSCSI che esegue la destinazione LIO iSCSI, configurato tramite lrbd
.
Un host iniziatore iSCSI, che esegue open-iscsi
(Linux), l'iniziatore Microsoft iSCSI (Microsoft Windows) o qualsiasi altra implementazione di iniziatore iSCSI compatibile.
Una configurazione di produzione raccomandata di SUSE Enterprise Storage con lrbd
consiste di:
Un cluster di storage Ceph. Un cluster Ceph di produzione consiste di un numero qualsiasi di (in genere oltre 10) nodi OSD, ciascuno che esegue in genere 10-12 OSD (object storage daemon), con non meno di tre host MON dedicati.
Diversi server di destinazione iSCSI che eseguono la destinazione LIO iSCSI, configurati tramite lrbd
. Per bilanciamento di carico e failover iSCSI, questi server devono eseguire un kernel che supporti il modulo target_core_rbd
. Dal canale di manutenzione SUSE Linux Enterprise Server sono disponibili pacchetti di aggiornamento.
Un numero a scelta di host iniziatori iSCSI, che eseguono open-iscsi
(Linux), l'iniziatore Microsoft iSCSI (Microsoft Windows) o qualsiasi altra implementazione di iniziatore iSCSI compatibile.
Questa sezione descrive i passaggi per installare e configurare un iSCSI Gateway su SUSE Enterprise Storage.
È possibile installare iSCSI Gateway durante il processo di installazione del cluster Ceph, oppure aggiungerlo a un cluster esistente con DeepSea.
Per includere iSCSI Gateway durante il processo di installazione del cluster, consultare Sezione 4.5.1.2, «Assegnazione ruolo».
Per aggiungere iSCSI Gateway a un cluster esistente, consultare Sezione 1.2, «Aggiunta di nuovi ruoli ai nodi».
Le immagini RBD vengono create nello store Ceph e quindi esportate in iSCSI. Per questo scopo, si consiglia di utilizzare un pool RADOS dedicato. È possibile creare un volume da qualsiasi host in grado di collegarsi al cluster di storage mediante l'utility della riga di comando Ceph rbd
. Ciò richiede che il client abbia almeno un file di configurazione ceph.conf minimo e appropriate credenziali di autenticazione CephX.
Per creare un nuovo volume per la successiva esportazione tramite iSCSI, utilizzare il comando rbd create
, specificando la dimensione del volume in megabyte. Ad esempio, per creare un volume da 100 GB con il nome testvol
nel pool con nome iscsi
, eseguire:
root #
rbd --pool iscsi create --size=102400 testvol
Il comando precedente crea un volume RBD nel formato di default 2.
Da SUSE Enterprise Storage 3, il formato del volume di default è 2 mentre il formato 1 è obsoleto. Tuttavia, è ancora possibile creare volumi nel formato 1 obsoleto con l'opzione --image-format 1
.
Per esportare immagini RBD tramite iSCSI, servirsi dell'utility lrbd
. lrbd
consente di creare, rivedere e modificare la configurazione di destinazione iSCSI che utilizza un formato JSON.
Eventuali modifiche alla configurazione di iSCSI Gateway apportate con il comando lrbd
non sono visibili in DeepSea e openATTIC. Per importare le modifiche manuali, occorre esportare la configurazione di iSCSI Gateway su file:
root@minion >
lrbd -o /tmp/lrbd.conf
Copiarla quindi sul Salt master in modo che sia visibile da DeepSea e openATTIC:
root@minion >
scp /tmp/lrbd.conf ses5master:/srv/salt/ceph/igw/cache/lrbd.conf
Modificare infine /srv/pillar/ceph/stack/global.yml
e impostare:
igw_config: default-ui
Per modificare la configurazione, utilizzare lrbd -e
o lrbd --edit
. Questo comando richiama l'editor di default, come definito dalla variabile ambientale EDITOR
. È possibile sovrascrivere questo comportamento impostando l'opzione -E
oltre a -e
.
Di seguito viene fornita una configurazione di esempio per
due host iSCSI Gateway denominati iscsi1.example.com
e iscsi2.example.com
,
definendo una singola destinazione iSCSI con un iSCSI Qualified Name (IQN) di iqn.2003-01.org.linux-iscsi.iscsi.x86:testvol
,
con una singola unità logica (Logical Unit, LU) iSCSI,
supportata da un'immagine RBD denominata testvol
nel pool RADOS rbd
,
ed esportando la destinazione tramite due portali denominati "east" e "west":
{ "auth": [ { "target": "iqn.2003-01.org.linux-iscsi.iscsi.x86:testvol", "authentication": "none" } ], "targets": [ { "target": "iqn.2003-01.org.linux-iscsi.iscsi.x86:testvol", "hosts": [ { "host": "iscsi1.example.com", "portal": "east" }, { "host": "iscsi2.example.com", "portal": "west" } ] } ], "portals": [ { "name": "east", "addresses": [ "192.168.124.104" ] }, { "name": "west", "addresses": [ "192.168.124.105" ] } ], "pools": [ { "pool": "rbd", "gateways": [ { "target": "iqn.2003-01.org.linux-iscsi.iscsi.x86:testvol", "tpg": [ { "image": "testvol" } ] } ] } ] }
Tenere presente che qualora si facesse riferimento a un nome host nella configurazione, tale nome host deve corrispondere al risultato del comando uname -n
di iSCSI Gateway.
Lo JSON modificato viene memorizzato negli attributi estesi (xattrs) di un singolo oggetto RADOS per pool. Questo oggetto è disponibile per gli host gateway dove viene modificato JSON, oltre che per tutti gli host gateway collegati allo stesso cluster Ceph. Localmente non vengono memorizzate informazioni sul gateway lrbd
.
Per attivare la configurazione, memorizzarla nel cluster Ceph ed eseguire una delle azioni indicate (come root
):
Eseguire il comando lrbd
(senza opzioni aggiuntive) dalla riga di comando,
oppure
Riavviare il servizio lrbd
con service lrbd restart
.
Il "servizio" lrbd
non opera alcun daemon in background. Richiama invece semplicemente il comando lrbd
. Questo tipo di servizio è noto come "one-shot".
Abilitare inoltre lrbd
per l'autoconfigurazione all'avvio del sistema. Per questo scopo, eseguire il comando systemctl enable lrbd
.
La configurazione precedente riflette una semplice configurazione con un gateway. La configurazione lrbd
può essere molto più complessa e potente. Il pacchetto RPM lrbd
è fornito di un set completo di esempi di configurazione, a cui si può fare riferimento controllando il contenuto della directory /usr/share/doc/packages/lrbd/samples
dopo l'installazione. Gli esempi sono inoltre disponibili da https://github.com/SUSE/lrbd/tree/master/samples.
Le impostazioni seguenti possono essere utili per alcuni ambienti. Per le immagini, sono disponibili gli attributi uuid
, lun
, retries
, sleep
e retry_errors
. I primi due, uuid
e lun
, consentono l'hardcoding di "uuid" o "lun" per un'immagine specifica. È possibile specificare uno o l'altro per un'immagine. retries
, sleep
e retry_errors
riguardano i tentativi di mappare un'immagine rbd.
"pools": [ { "pool": "rbd", "gateways": [ { "host": "igw1", "tpg": [ { "image": "archive", "uuid": "12345678-abcd-9012-efab-345678901234", "lun": "2", "retries": "3", "sleep": "4", "retry_errors": [ 95 ], [...] } ] } ] } ]
È possibile configurare lrbd
con parametri avanzati passati quindi alla destinazione di I/O di LIO. I parametri sono suddivisi in componenti iSCSI e memorizzazione di massa e possono essere quindi specificati nelle sezioni "targets" e "tpg", rispettivamente, della configurazione lrbd
.
Si consiglia di non modificare l'impostazione di default di questi parametri.
"targets": [ { [...] "tpg_default_cmdsn_depth": "64", "tpg_default_erl": "0", "tpg_login_timeout": "10", "tpg_netif_timeout": "2", "tpg_prod_mode_write_protect": "0", } ]
Di seguito viene fornita una descrizione delle opzioni:
Profondità di default CmdSN (Command Sequence Number). Limita la quantità di richieste che l'iniziatore iSCSI può avere in sospeso in qualsiasi momento.
Livello di ripristino errore di default.
Valore timeout di login in secondi.
Timeout errore NIC in secondi.
Se impostato a 1, impedisce le scritture sui LUN.
"pools": [ { "pool": "rbd", "gateways": [ { "host": "igw1", "tpg": [ { "image": "archive", "backstore_block_size": "512", "backstore_emulate_3pc": "1", "backstore_emulate_caw": "1", "backstore_emulate_dpo": "0", "backstore_emulate_fua_read": "0", "backstore_emulate_fua_write": "1", "backstore_emulate_model_alias": "0", "backstore_emulate_rest_reord": "0", "backstore_emulate_tas": "1", "backstore_emulate_tpu": "0", "backstore_emulate_tpws": "0", "backstore_emulate_ua_intlck_ctrl": "0", "backstore_emulate_write_cache": "0", "backstore_enforce_pr_isids": "1", "backstore_fabric_max_sectors": "8192", "backstore_hw_block_size": "512", "backstore_hw_max_sectors": "8192", "backstore_hw_pi_prot_type": "0", "backstore_hw_queue_depth": "128", "backstore_is_nonrot": "1", "backstore_max_unmap_block_desc_count": "1", "backstore_max_unmap_lba_count": "8192", "backstore_max_write_same_len": "65535", "backstore_optimal_sectors": "8192", "backstore_pi_prot_format": "0", "backstore_pi_prot_type": "0", "backstore_queue_depth": "128", "backstore_unmap_granularity": "8192", "backstore_unmap_granularity_alignment": "4194304" } ] } ] } ]
Di seguito viene fornita una descrizione delle opzioni:
Dimensione di blocco del dispositivo sottostante.
Se impostato a 1, abilita Third Party Copy.
Se impostato a 1, abilita Compare e Write.
Se impostato a 1, attiva Disable Page Out.
Se impostato a 1, attiva la lettura Force Unit Access.
Se impostato a 1, abilita la scrittura Force Unit Access.
Se impostato a 1, utilizza il nome del dispositivo back-end per l'alias modello.
Se impostato a 0, il modificatore algoritmo di coda ha riordinamento limitato.
Se impostato a 1, abilita Task Aborted Status.
Se impostato a 1, abilita Thin Provisioning Unmap.
Se impostato a 1, abilita Thin Provisioning Write Same.
Se impostato a 1, abilita Unit Attention Interlock.
Se impostato a 1, attiva Write Cache Enable.
Se impostato a 1, applica gli ISID di prenotazione persistenti.
Numero massimo di settori trasferibili dall'infrastruttura in una volta.
Dimensione blocco hardware in byte.
Numero massimo di settori trasferibili dall'hardware in una volta.
Se diverso da zero, la protezione DIF è abilitata sull'hardware sottostante.
Profondità coda hardware.
Se impostato a 1, il backstore è un dispositivo non rotativo.
Numero massimo di descrittori di blocco per UNMAP.
Numero massimo di LBA per UNMAP.
Lunghezza massima per WRITE_SAME.
Dimensione richiesta ottimale in settori.
Formato di protezione DIF.
Tipo di protezione DIF.
Profondità coda.
Granularità UNMAP.
Allineamento granularità UNMAP.
Per le destinazioni, gli attributi tpg
consentono la regolazione dei parametri del kernel. Utilizzare con cautela.
"targets": [ { "host": "igw1", "target": "iqn.2003-01.org.linux-iscsi.generic.x86:sn.abcdefghijk", "tpg_default_cmdsn_depth": "64", "tpg_default_erl": "0", "tpg_login_timeout": "10", "tpg_netif_timeout": "2", "tpg_prod_mode_write_protect": "0", "tpg_t10_pi": "0" }
Se un sito richiede LUN assegnati staticamente, assegnare numeri a ogni LUN.
tcmu-runner
#
Dalla versione 5, SUSE Enterprise Storage fornisce un back-end RBD di spazio utente per tcmu-runner
(per informazioni, vedere man 8 tcmu-runner
).
Le distribuzioni di iSCSI Gateway basate su tcmu-runner
sono attualmente un'anteprima. Vedere Capitolo 10, Installazione di iSCSI Gateway per istruzioni sulla distribuzione di iSCSI Gateway basata su kernel con lrbd
.
A differenza delle distribuzioni di iSCSI Gateway lrbd
basate su kernel, gli iSCSI Gateway basati su tcmu-runner
non offrono supporto per I/O multipercorso o prenotazioni persistenti SCSI.
Poiché DeepSea e openATTIC attualmente non supportano distribuzioni tcmu-runner
, è necessario gestire installazione, distribuzione e monitoraggio manualmente.
Sul nodo iSCSI Gateway, installare il pacchetto tcmu-runner-handler-rbd
dal supporto di SUSE Enterprise Storage 5, insieme con le dipendenze del pacchetto libtcmu1
e tcmu-runner
. Installare il pacchetto targetcli-fb
a scopo di configurazione. Tenere presente che il pacchetto targetcli-fb
è incompatibile con la versione "non-fb" del pacchetto targetcli
.
Verificare che il servizio tcmu-runner
systemd
sia in esecuzione:
root #
systemctl enable tcmu-runner
tcmu-gw:~ # systemctl status tcmu-runner
● tcmu-runner.service - LIO Userspace-passthrough daemon
Loaded: loaded (/usr/lib/systemd/system/tcmu-runner.service; static; vendor
preset: disabled)
Active: active (running) since ...
Creare un'immagine del dispositivo di blocco RADOS sul cluster Ceph esistente. Nell'esempio seguente, si utilizza un'immagine 10G denominata "tcmu-lu" ubicata nel pool "rbd".
Dopo la creazione dell'immagine del dispositivo di blocco RADOS, eseguire targetcli
e assicurare che sia disponibile il gestore RBD tcmu-runner (plug-in):
root #
targetcli
targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> ls
o- / ................................... [...]
o- backstores ........................ [...]
...
| o- user:rbd ......... [Storage Objects: 0]
Creare una voce di configurazione backstore per l'immagine RBD:
/> cd backstores/user:rbd /backstores/user:rbd> create tcmu-lu 10G /rbd/tcmu-lu Created user-backed storage object tcmu-lu size 10737418240.
Creare una voce di configurazione trasparente iSCSI. Nell'esempio seguente, la destinazione IQN "iqn.2003-01.org.linux-iscsi.tcmu-gw.x8664:sn.cb3d2a3a" viene generata automaticamente da targetcli
per l'uso come identificatore univoco della destinazione iSCSI:
/backstores/user:rbd> cd /iscsi /iscsi> create Created target iqn.2003-01.org.linux-iscsi.tcmu-gw.x8664:sn.cb3d2a3a. Created TPG 1. Global pref auto_add_default_portal=true Created default portal listening on all IPs (0.0.0.0), port 3260.
Creare una voce ACL per gli iniziatori iSCSI da connettere alla destinazione. Nell'esempio seguente, viene utilizzato un iniziatore IQN of "iqn.1998-01.com.vmware:esxi-872c4888":
/iscsi> cd iqn.2003-01.org.linux-iscsi.tcmu-gw.x8664:sn.cb3d2a3a/tpg1/acls/ /iscsi/iqn.20...a3a/tpg1/acls> create iqn.1998-01.com.vmware:esxi-872c4888
Infine, collegare la configurazione backstore RBD creata in precedenza alla destinazione iSCSI:
/iscsi/iqn.20...a3a/tpg1/acls> cd ../luns /iscsi/iqn.20...a3a/tpg1/luns> create /backstores/user:rbd/tcmu-lu Created LUN 0. Created LUN 0->0 mapping in node ACL iqn.1998-01.com.vmware:esxi-872c4888
Uscire dalla shell per salvare la configurazione esistente:
/iscsi/iqn.20...a3a/tpg1/luns> exit Global pref auto_save_on_exit=true Last 10 configs saved in /etc/target/backup. Configuration saved to /etc/target/saveconfig.json
Dal nodo iniziatore iSCSI (client), connettersi al target iSCSI appena predisposto mediante IQN e nome host configurati sopra.