Protezione dei dati sui dispositivi NVMe
Alcune forme dell'istanza di computazione in Oracle Cloud Infrastructure includono dispositivi NVMe collegati localmente. Questi dispositivi offrono una latenza estremamente bassa, storage a blocchi 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 crittografia in archivio o utilizza RAID o qualsiasi altro metodo per proteggere i dati sui dispositivi NVMe. È tua responsabilità proteggere e gestire la durabilità 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 sul 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 riportato di seguito 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 guasto e come proteggersi da loro
Sono disponibili tre modalità di errore principali per le quali è necessario pianificare:
Protezione dal guasto 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 possono essere utilizzati per la maggior parte dei carichi di lavoro:
-
RAID 1: una 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: striscia i dati su più coppie con mirroring. Finché un disco in ogni 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 maggiori informazioni sui livelli RAID e RAID, vedere RAID.
Poiché il livello RAID appropriato è una funzione del numero di unità disponibili, del numero di singole LUN necessarie, della quantità di spazio necessario e dei requisiti di prestazioni, non esiste un'unica scelta corretta. Devi comprendere il tuo carico di lavoro e progettare di conseguenza.
Se si sta eseguendo il partizionamento o la formattazione del disco come parte di questo processo e l'unità ha una dimensione superiore a 2 TB, è necessario creare una tabella di partizione GUID (GPT). Per creare un GPT, utilizzare parted anziché il comando fdisk. Per ulteriori informazioni, vedere About Disk Partitions in Oracle Linux Administrator's Guide.
Opzioni per l'utilizzo di 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 il valore limite di velocità di risincronizzazione RAID predefinito. L'aumento di questo valore in modo che corrisponda più strettamente alla velocità di storage veloce nelle istanze Bare Metal può ridurre la quantità di tempo necessaria per impostare il RAID.
Usare il comando seguente per aumentare il valore limite di velocità:
$ sysctl -w dev.raid.speed_limit_max=10000000
Opzione 1: crea un singolo dispositivo RAID 6 su tutti e nove i dispositivi
Questo array è ridondante, funziona bene, sopravviverà al guasto di due dispositivi e verrà esposto come una singola LUN con circa 23.8TB di spazio utilizzabile.
Utilizzare i seguenti comandi 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/null
Opzione 2: creare un array RAID 10 di quattro dispositivi e un array RAID 6 di cinque dispositivi
Questi array verrebbero 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 i file di log e di dati. In questo esempio, l'array RAID 10 avrebbe circa 6.4TB di spazio utilizzabile e l'array RAID 6 avrebbe circa 9.6TB di spazio utilizzabile.
Utilizzare i seguenti comandi per creare un 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/null
Opzione 3: creare un array RAID 10 a otto dispositivi
Se hai bisogno delle migliori prestazioni possibili e puoi sacrificare parte dello spazio disponibile, 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 errore di un altro dispositivo. Ciò crea una singola LUN con circa 12,8 TB di spazio utilizzabile.
Utilizzare i seguenti comandi 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/nvme7n1
Il 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/null
Opzione 4: creare due array RAID 10 a quattro dispositivi
Per ottenere le migliori prestazioni possibili e l'isolamento I/O tra le 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 nel caso in cui un altro dispositivo in entrambi gli array non riesca. Questo crea due LUN, ognuna con circa 6,4 TB di spazio utilizzabile.
Utilizzare i comandi seguenti per creare due array RAID 10 a 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/nvme3n1
La creazione di un disco di riserva globale richiede i due passi riportati di seguito.
-
Aggiungere il ricambio a entrambi gli 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/mdadm
per inserire entrambi gli array nello stesso gruppo di parti di ricambio. Aggiungerespare-group=global
alla fine della riga che inizia conARRAY
, come indicato di seguito.$ sudo vi /etc/mdadm.conf
ARRAY /dev/md0 metadata=1.2 spares=1 name=mdadm.localdomain:0 UUID=43f93ce6:4a19d07b:51762f1b:250e2327 spare-group=global
ARRAY /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 sono disponibili due opzioni:
- Impostare l'opzione
MAILADDR
in/etc/mdadm.conf
, quindi eseguire il monitoraggiomdadm
come daemon - Eseguire uno script esterno quando
mdadm
rileva 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 monitoraggio mdadm come daemon, come indicato di seguito.
-
La riga
DEVICE partitions
è obbligatoria per il funzionamento diMAILADDR
. Se manca, è necessario aggiungerla come indicato di seguito.$ sudo vi /etc/mdadm.conf
DEVICE partitions
ARRAY /dev/md0 level=raid1 UUID=1b70e34a:2930b5a6:016we78d:eese14532
MAILADDR <my.name@example.com>
-
Eseguire il monitoraggio utilizzando il comando riportato di seguito.
$ 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.local
Aggiungere la riga seguente alla fine di /etc/rc.local:
nohup mdadm –-monitor –-scan –-daemonize &
-
Per verificare che l'e-mail e il monitor funzionino entrambi, eseguire il comando seguente:
$ sudo mdadm --monitor --scan --test -1
Si noti che queste email saranno probabilmente contrassegnate come spam. L'opzione
PROGRAM
, descritta più avanti in questo argomento, consente avvisi e messaggi più sofisticati.
Esegui uno script esterno quando viene rilevato un errore
Un'opzione più avanzata consiste nel creare uno script esterno che venga eseguito se il monitoraggio mdadm
rileva un errore. Questo tipo di script verrà integrato con la soluzione di monitoraggio esistente. Un esempio di questo tipo di script è il seguente:
$ 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.events
Successivamente, aggiungere l'opzione PROGRAM
a /etc/mdadm.conf
, come mostrato nell'esempio riportato di seguito.
-
La riga
DEVICE partitions
è obbligatoria per il funzionamento diMAILADDR
. Se manca, è necessario aggiungerla come indicato di seguito.$ sudo vi /etc/mdadm.conf
DEVICE partitions
ARRAY /dev/md0 level=raid1 UUID=1b70e34a:2930b5a6:016we78d:eese14532
MAILADDR <my.name@example.com>
PROGRAM /etc/mdadm.events
-
Eseguire il monitoraggio utilizzando il comando riportato di seguito.
$ 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.local
Aggiungere la riga seguente alla fine di /etc/rc.local:
nohup mdadm –-monitor –-scan –-daemonize &
-
Per verificare che l'e-mail e il monitor funzionino entrambi, eseguire il comando seguente:
$ sudo mdadm --monitor --scan --test -1
Si noti che queste email 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 vedere se l'array RAID può sopravvivere all'errore, nonché 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/nvme0n1
L'array verrà ricostruito automaticamente per utilizzare il "nuovo" dispositivo. Le prestazioni verranno ridotte durante questo processo.
-
È possibile monitorare lo stato di rigenerazione eseguendo il comando seguente:
$ sudo mdadm --detail /dev/md0
Che 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ù utilizzato. Poiché la connettività tra le istanze è completa di 10 Gb/sec, 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
Linux Logical Volume Manager (LVM) 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 i comandi pvcreate
, vgcreate
e lvcreate
di LVM per creare i volumi sui LUN mdadm
. Non utilizzare LVM direttamente sui dispositivi NVMe.
Protezione contro la perdita dell'istanza o del dominio di disponibilità
Una volta protetti i dati dalla perdita di un dispositivo NVMe, è necessario proteggerli dalla perdita di un'istanza o dalla perdita del dominio di disponibilità. Questo tipo di protezione viene in genere eseguito replicando i dati in un altro dominio di disponibilità o eseguendo il backup dei dati in un'altra posizione. Il metodo che scegli dipende dai tuoi obiettivi. Per i dettagli, consulta 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 prevede l'RTO e l'RPO più bassi a un costo notevolmente superiore rispetto ai backup. Per ogni istanza in un dominio di disponibilità, è necessario disporre di un'altra istanza in un dominio di disponibilità diverso.
Per i carichi di lavoro del database Oracle, dovresti utilizzare la funzionalità integrata di Oracle Data Guard per replicare i tuoi database. I domini di disponibilità di Oracle Cloud Infrastructure sono ciascuno abbastanza vicini tra loro per supportare la replica sincrona ad alte prestazioni. Anche la replica asincrona è un'opzione.
Per la replica dei blocchi General Purpose, 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 si utilizzano i backup, l'RTO e l'RPO sono notevolmente superiori rispetto all'uso della replica perché è necessario ricreare le risorse di computazione non riuscite, quindi ripristinare il backup più recente. I costi sono significativamente inferiori perché non è necessario mantenere una seconda istanza. Non memorizzare i backup nello stesso dominio di disponibilità della relativa istanza originale.
Protezione da danneggiamento o perdita di dati da errori dell'applicazione o dell'utente
I due modi consigliati per proteggersi dal danneggiamento o dalla perdita dei dati da errori dell'applicazione o dell'utente sono scattare regolarmente snapshot o creare backup.
Snapshot
Il modo più semplice per gestire le istantanee è quello di 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 significativamente 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.