Protezione dei dati sui dispositivi NVMe
Alcune forme dell'istanza di computazione in Oracle Cloud Infrastructure includono dispositivi NVMe collegati localmente. Questi dispositivi offrono storage a blocchi a latenza estremamente bassa e ad alte prestazioni, ideale per Big Data, OLTP e qualsiasi altro carico di lavoro che può trarre vantaggio dallo storage a blocchi ad alte prestazioni.
I dispositivi NVMe non sono protetti in alcun modo; si tratta di singoli dispositivi installati localmente nell'istanza. Oracle Cloud Infrastructure non acquisisce immagini, esegue il backup, supporta la cifratura in archivio o utilizza RAID o qualsiasi altro metodo per proteggere i dati sui dispositivi NVMe. È tua responsabilità proteggere e gestire la durata dei dati su questi dispositivi.
Oracle Cloud Infrastructure offre LUN a blocchi remoti (iSCSI) ad alte prestazioni ridondanti e di cui è possibile eseguire il backup utilizzando una chiamata API. Per ulteriori informazioni, vedere Panoramica del volume a blocchi.
Per informazioni sulle forme che supportano lo storage NVMe locale, vedere Forme di computazione.
Ricerca dei dispositivi NVMe nell'istanza
È possibile identificare i dispositivi NVMe utilizzando il comando lsblk. La risposta restituisce un elenco. I dispositivi NVMe iniziano con "nvme", come mostrato nell'esempio seguente per un'istanza BM.DenseIO1.36:
[opc@somehost ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 46.6G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 8G 0 part [SWAP]
└─sda3 8:3 0 38G 0 part /
nvme0n1 259:6 0 2.9T 0 disk
nvme1n1 259:8 0 2.9T 0 disk
nvme2n1 259:0 0 2.9T 0 disk
nvme3n1 259:1 0 2.9T 0 disk
nvme4n1 259:7 0 2.9T 0 disk
nvme5n1 259:4 0 2.9T 0 disk
nvme6n1 259:5 0 2.9T 0 disk
nvme7n1 259:2 0 2.9T 0 disk
nvme8n1 259:3 0 2.9T 0 disk
[opc@somehost ~]$
Modalità di fallimento e come proteggerli
Esistono tre modalità di errore principali che è necessario pianificare:
Protezione da guasti di un dispositivo NVMe
Un array RAID protetto è il modo più consigliato per proteggersi da un errore del dispositivo NVMe. Esistono tre livelli RAID che è possibile utilizzare per la maggior parte dei carichi di lavoro:
-
RAID 1: copia esatta (o mirror) di un set di dati su due o più dischi; una coppia RAID 1 in mirroring classica contiene due dischi, come mostrato di seguito.
-
RAID 10: esegue lo striping dei dati su più coppie con mirroring. Finché un disco in ciascuna coppia con mirroring è funzionale, è possibile recuperare i dati, come mostrato di seguito.
-
RAID 6: striping a livello di blocco con due blocchi di parità distribuiti su tutti i dischi membri, come mostrato.
Per ulteriori informazioni sui livelli RAID e RAID, vedere RAID.
Poiché il livello RAID appropriato è in funzione del numero di unità disponibili, del numero di LUN individuali necessarie, della quantità di spazio necessaria e dei requisiti di prestazioni, non esiste una scelta corretta. È necessario comprendere il carico di lavoro e progettare di conseguenza.
Se si sta eseguendo il partizionamento o la formattazione del disco nell'ambito di questo processo e l'unità è più grande di 2 TB, è necessario creare una tabella di partizione GUID (GPT, GUID Partition Table). Per creare un GPT, usare parted anziché il comando fdisk. Per ulteriori informazioni, vedere About Disk Partitions in Oracle Linux Administrator's Guide.
Opzioni per utilizzare una forma BM.DenseIO1.36
Esistono diverse opzioni per le istanze BM.DenseIO1.36 con nove dispositivi NVMe.
Per tutte le opzioni riportate di seguito, è possibile aumentare facoltativamente il valore del limite di velocità di risincronizzazione RAID predefinito. L'aumento di questo valore per una corrispondenza più stretta con la velocità di storage veloce nelle istanze Bare Metal può ridurre la quantità di tempo necessaria per impostare il RAID.
Utilizzare il comando seguente per aumentare il valore del limite di velocità:
$ sysctl -w dev.raid.speed_limit_max=10000000Opzione 1: Creare un unico dispositivo RAID 6 su tutti e nove i dispositivi
Questo array è ridondante, funziona bene, sopravviverà al guasto di due dispositivi e sarà esposto come una singola LUN con circa 23.8TB di spazio utilizzabile.
Utilizzare i comandi seguenti per creare un singolo dispositivo RAID 6 su tutti e nove i dispositivi:
$ sudo yum install mdadm -y$ sudo mdadm --create /dev/md0 --raid-devices=9 --level=6 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1 /dev/nvme7n1 /dev/nvme8n1$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf >> /dev/nullOpzione 2: creare un RAID 10 per quattro dispositivi e un array RAID 6 per cinque dispositivi
Questi array vengono esposti come due LUN diverse alle applicazioni. Si tratta di una scelta consigliata quando è necessario isolare un tipo di I/O da un altro, ad esempio file di log e dati. In questo esempio, l'array RAID 10 dispone di circa 6.4TB di spazio utilizzabile e l'array RAID 6 dispone di circa 9.6TB di spazio utilizzabile.
Utilizzare i comandi seguenti per creare un array RAID 10 a quattro dispositivi e un array RAID 6 a cinque dispositivi:
$ sudo yum install mdadm -y$ sudo mdadm --create /dev/md0 --raid-devices=4 --level=10 /dev/nvme5n1 /dev/nvme6n1 /dev/nvme7n1 /dev/nvme8n1$ sudo mdadm --create /dev/md1 --raid-devices=5 --level=6 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf >> /dev/nullOpzione 3: Creare un array RAID 10 a otto dispositivi
Se hai bisogno delle migliori prestazioni possibili e puoi sacrificare parte del tuo spazio disponibile, allora un array RAID 10 a otto dispositivi è un'opzione. Poiché RAID 10 richiede un numero pari di dispositivi, il nono dispositivo viene lasciato fuori dall'array e funge da disco di riserva in caso di guasto di un altro dispositivo. Questo crea un'unica LUN con circa 12,8 TB di spazio utilizzabile.
Utilizzare i comandi seguenti per creare un array RAID 10 a otto dispositivi:
$ sudo yum install mdadm -y$ sudo mdadm --create /dev/md0 --raid-devices=8 --level=10 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1 /dev/nvme7n1Il comando seguente aggiunge /dev/nvme8n come disco di riserva per l'array /dev/md0:
$ sudo mdadm /dev/md0 --add /dev/nvme8n1 $ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf >> /dev/nullOpzione 4: creare due array RAID 10 a quattro dispositivi
Per ottenere le migliori prestazioni possibili e l'isolamento di I/O tra i LUN, creare due array RAID 10 a quattro dispositivi. Poiché RAID 10 richiede un numero pari di dispositivi, il nono dispositivo viene lasciato fuori dagli array e funge da disco di riserva globale in caso di errore di un altro dispositivo in entrambi gli array. Questo crea due LUNS, ognuna con circa 6,4 TB di spazio utilizzabile.
Utilizzare i comandi seguenti per creare due array RAID 10 con quattro dispositivi con un disco di riserva globale:
$ sudo yum install mdadm -y$ sudo mdadm --create /dev/md0 --raid-devices=4 --level=10 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1 /dev/nvme7n1$ sudo mdadm --create /dev/md1 --raid-devices=4 --level=10 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1La creazione di un disco di riserva globale richiede i due passi riportati di seguito.
-
Aggiungere il ricambio a uno dei due array (non importa quale) eseguendo questi comandi:
$ sudo mdadm /dev/md0 --add /dev/nvme8n1$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf >> /dev/null -
Modificare
/etc/mdadmper inserire entrambi gli array nello stesso gruppo di dischi di riserva. Aggiungerespare-group=globalalla fine della riga che inizia conARRAY, come indicato di seguito.$ sudo vi /etc/mdadm.confARRAY /dev/md0 metadata=1.2 spares=1 name=mdadm.localdomain:0 UUID=43f93ce6:4a19d07b:51762f1b:250e2327 spare-group=globalARRAY /dev/md1 metadata=1.2 name=mdadm.localdomain:1 UUID=7521e51a:83999f00:99459a19:0c836693 spare-group=global
Monitoraggio dell'array
È importante ricevere una notifica se un dispositivo in uno degli array non riesce. Mdadm dispone di strumenti integrati che possono essere utilizzati per il monitoraggio e ci sono due opzioni che è possibile utilizzare:
- Impostare l'opzione
MAILADDRin/etc/mdadm.conf, quindi eseguire il monitoraggiomdadmcome daemon - Eseguire uno script esterno quando
mdadmrileva un errore
Impostare l'opzione MAILADDR in /etc/mdadm.conf ed eseguire il monitoraggio mdadm come daemon
Il metodo più semplice consiste nell'impostare l'opzione MAILADDR in /etc/mdadm.conf, quindi eseguire il monitor mdadm come daemon, come indicato di seguito.
-
La riga
DEVICE partitionsè obbligatoria perchéMAILADDRfunzioni; se manca, è necessario aggiungerla come indicato di seguito.$ sudo vi /etc/mdadm.confDEVICE partitionsARRAY /dev/md0 level=raid1 UUID=1b70e34a:2930b5a6:016we78d:eese14532MAILADDR <my.name@example.com> -
Eseguire il monitoraggio utilizzando il comando seguente:
$ sudo nohup mdadm –-monitor –-scan –-daemonize & -
Per verificare che il monitoraggio venga eseguito all'avvio, eseguire i comandi seguenti:
$ sudo chmod +x /etc/rc.d/rc.local$ sudo vi /etc/rc.localAggiungere la seguente riga alla fine di /etc/rc.local:
nohup mdadm –-monitor –-scan –-daemonize & -
Per verificare che e-mail e monitor funzionino entrambi, eseguire il comando seguente:
$ sudo mdadm --monitor --scan --test -1Si noti che queste e-mail saranno probabilmente contrassegnate come spam. L'opzione
PROGRAM, descritta più avanti in questo argomento, consente avvisi e messaggi più sofisticati.
Eseguire uno script esterno quando viene rilevato un errore
Un'opzione più avanzata consiste nel creare uno script esterno che verrà eseguito se il monitoraggio mdadm rileva un errore. Integrare questo tipo di script con la soluzione di monitoraggio esistente. Di seguito è riportato un esempio di questo tipo di script.
$ sudo vi /etc/mdadm.events
#!/bin/bash
event=$1
device=$2
if [ $event == "Fail" ]
then
<"do something">
else
if [ $event == "FailSpare" ]
then
<"do something else">
else
if [ $event == "DegradedArray" ]
then
<"do something else else">
else
if [ $event == "TestMessage" ]
then
<"do something else else else">
fi
fi
fi
fi
$ sudo chmod +x /etc/mdadm.eventsSuccessivamente, aggiungere l'opzione PROGRAM a /etc/mdadm.conf, come mostrato nell'esempio seguente:
-
La riga
DEVICE partitionsè obbligatoria perchéMAILADDRfunzioni; se manca, è necessario aggiungerla come indicato di seguito.$ sudo vi /etc/mdadm.confDEVICE partitionsARRAY /dev/md0 level=raid1 UUID=1b70e34a:2930b5a6:016we78d:eese14532MAILADDR <my.name@example.com>PROGRAM /etc/mdadm.events -
Eseguire il monitoraggio utilizzando il comando seguente:
$ sudo nohup mdadm –-monitor –-scan –-daemonize & -
Per verificare che il monitoraggio venga eseguito all'avvio, eseguire i comandi seguenti:
$ sudo chmod +x /etc/rc.d/rc.local$ sudo vi /etc/rc.localAggiungere la seguente riga alla fine di /etc/rc.local:
nohup mdadm –-monitor –-scan –-daemonize & -
Per verificare che e-mail e monitor funzionino entrambi, eseguire il comando seguente:
$ sudo mdadm --monitor --scan --test -1Si noti che queste e-mail saranno probabilmente contrassegnate come spam. L'opzione
PROGRAM, descritta più avanti in questo argomento, consente avvisi e messaggi più sofisticati.
Simulare l'errore di un dispositivo
È possibile utilizzare mdadm per causare manualmente un errore di un dispositivo per verificare se l'array RAID può sopravvivere all'errore e testare gli avvisi impostati.
-
Contrassegnare un dispositivo nell'array come non riuscito eseguendo il seguente comando:
$ sudo mdadm /dev/md0 --fail /dev/nvme0n1 -
Recuperare il dispositivo o l'array potrebbe non essere protetto. Utilizzare il seguente comando:
$ sudo mdadm /dev/md0 --add /dev/nvme0n1Il tuo array verrà ricostruito automaticamente per utilizzare il "nuovo" dispositivo. Le prestazioni saranno ridotte durante questo processo.
-
È possibile monitorare lo stato di rigenerazione eseguendo il seguente comando:
$ sudo mdadm --detail /dev/md0
Cosa fare quando un dispositivo NVMe non riesce
Le risorse di computazione nel cloud sono progettate per essere temporanee e fungibili. Se un dispositivo NVMe non riesce mentre l'istanza è in servizio, è necessario avviare un'altra istanza con la stessa quantità di storage o più, quindi copiare i dati nella nuova istanza, sostituendo la vecchia istanza. Sono disponibili più set di strumenti per copiare grandi quantità di dati, mentre rsync è il più popolare. Poiché la connettività tra le istanze è di 10 Gb/sec completi, la copia dei dati dovrebbe essere rapida. Ricorda che con un dispositivo guasto, l'array potrebbe non essere più protetto, quindi dovresti copiare i dati dall'istanza interessata il più rapidamente possibile.
Uso di Linux Logical Volume Manager
Logical Volume Manager (LVM) di Linux offre un ricco set di funzioni per la gestione dei volumi. Se sono necessarie queste funzioni, si consiglia di utilizzare mdadm come descritto nelle sezioni precedenti di questo argomento per creare gli array RAID, quindi utilizzare i comandi pvcreate, vgcreate e lvcreate di LVM per creare volumi nelle LUN mdadm. Non utilizzare LVM direttamente sui dispositivi NVMe.
Protezione dalla perdita dell'istanza o del dominio di disponibilità
Una volta che i tuoi dati sono protetti dalla perdita di un dispositivo NVMe, devi proteggerli dalla perdita di un'istanza o dalla perdita del dominio di disponibilità. Questo tipo di protezione viene in genere eseguita replicando i dati in un altro dominio di disponibilità o eseguendo il backup dei dati in un'altra posizione. Il metodo scelto dipende dai tuoi obiettivi. Per i dettagli, vedere i concetti sul disaster recovery di Recovery Time Objective (RTO) e Recovery Point Objective (RPO).
Replica
La replica dei dati da un'istanza in un dominio di disponibilità a un'altra ha l'RTO e l'RPO più bassi a un costo significativamente più elevato rispetto ai backup; per ogni istanza in un dominio di disponibilità, devi avere un'altra istanza in un dominio di disponibilità diverso.
Per i carichi di lavoro del database Oracle, dovresti utilizzare la funzionalità Oracle Data Guard integrata per replicare i tuoi database. I domini di disponibilità di Oracle Cloud Infrastructure sono ciascuno abbastanza vicini l'uno all'altro per supportare una replica sincrona ad alte prestazioni. Anche la replica asincrona è un'opzione.
Per la replica dei blocchi generica, il DRBD è l'opzione consigliata. È possibile configurare DRBD per replicare, in modo sincrono o asincrono, ogni scrittura in un dominio di disponibilità in un altro dominio di disponibilità.
Backup
I backup tradizionali sono un altro modo per proteggere i dati. Tutti i prodotti di backup commerciali sono completamente supportati su Oracle Cloud Infrastructure. Se utilizzi i backup, l'RTO e l'RPO sono significativamente più alti rispetto all'uso della replica perché devi ricreare le risorse di computazione che non hanno avuto successo e quindi ripristinare il backup più recente. I costi sono notevolmente inferiori perché non è necessario mantenere una seconda istanza. Non memorizzare i backup nello stesso dominio di disponibilità dell'istanza originale.
Protezione contro la corruzione o la perdita dei dati da un errore dell'applicazione o dell'utente
I due modi consigliati per proteggersi dal danneggiamento o dalla perdita dei dati dall'errore dell'applicazione o dell'utente sono lo scatto di snapshot o la creazione di backup.
Snapshot
I due modi più semplici per gestire le istantanee sono utilizzare un file system che supporti le istantanee, ad esempio ZFS, oppure utilizzare LVM per creare e gestire le istantanee. A causa del modo in cui LVM ha implementato la copy-on-write (COW), le prestazioni potrebbero diminuire notevolmente quando uno snapshot viene eseguito utilizzando LVM.
Backup
Tutti i prodotti di backup commerciali sono completamente supportati su Oracle Cloud Infrastructure. Assicurarsi che i backup siano memorizzati in un dominio di disponibilità diverso da quello dell'istanza originale.


