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.

Attenzione

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

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.

    Questa immagine mostra un array RAID 1.

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

    Questa immagine mostra un array RAID 10, con blocchi con mirroring e striping.

  • RAID 6: striping a livello di blocco con due blocchi di parità distribuiti su tutti i dischi membri, come mostrato.

    Questa immagine mostra un array Raid 6.

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.

Importante

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=10000000

Opzione 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/null

Opzione 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/null

Opzione 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/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 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/nvme3n1

La creazione di un disco di riserva globale richiede i due passi riportati di seguito.

  1. 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
  2. Modificare /etc/mdadm per inserire entrambi gli array nello stesso gruppo di dischi di riserva. Aggiungere spare-group=global alla fine della riga che inizia con ARRAY, 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 ci sono due opzioni che è possibile utilizzare:

  • Impostare l'opzione MAILADDR in /etc/mdadm.conf, quindi eseguire il monitoraggio mdadm 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 monitor mdadm come daemon, come indicato di seguito.

  1. La riga DEVICE partitions è obbligatoria perché MAILADDR funzioni; 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>
  2. Eseguire il monitoraggio utilizzando il comando seguente:

    $ sudo nohup mdadm –-monitor –-scan –-daemonize &
  3. 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 seguente riga alla fine di /etc/rc.local:

    nohup mdadm –-monitor –-scan –-daemonize &
  4. Per verificare che e-mail e monitor funzionino entrambi, eseguire il comando seguente:

    $ sudo mdadm --monitor --scan --test -1

    Si 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.events

Successivamente, aggiungere l'opzione PROGRAM a /etc/mdadm.conf, come mostrato nell'esempio seguente:

  1. La riga DEVICE partitions è obbligatoria perché MAILADDR funzioni; 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
  2. Eseguire il monitoraggio utilizzando il comando seguente:

    $ sudo nohup mdadm –-monitor –-scan –-daemonize &
  3. 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 seguente riga alla fine di /etc/rc.local:

    nohup mdadm –-monitor –-scan –-daemonize &
  4. Per verificare che e-mail e monitor funzionino entrambi, eseguire il comando seguente:

    $ sudo mdadm --monitor --scan --test -1

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

  1. Contrassegnare un dispositivo nell'array come non riuscito eseguendo il seguente comando:

    $ sudo mdadm /dev/md0 --fail /dev/nvme0n1
  2. Recuperare il dispositivo o l'array potrebbe non essere protetto. Utilizzare il seguente comando:

    $ sudo mdadm /dev/md0 --add /dev/nvme0n1

    Il tuo array verrà ricostruito automaticamente per utilizzare il "nuovo" dispositivo. Le prestazioni saranno ridotte durante questo processo.

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