Daten auf NVMe-Geräten schützen

Einige Compute-Instanzausprägungen  in Oracle Cloud Infrastructure weisen lokal angehängte NVMe-Geräte auf. Diese Geräte bieten High-Performance-Blockspeicher mit extrem geringer Latenz, der sich optimal für Big Data, OLTP und andere Workloads eignet, die von leistungsstarkem Blockspeicher profitieren können.

Achtung

NVMe-Geräte sind auf keine Weise geschützt. Sie sind einzelne, lokal auf Ihrer Instanz installierte Geräte. Oracle Cloud Infrastructure erstellt keine Images oder Backups und verwendet weder RAID noch sonstige Methoden zum Schutz der Daten auf NVMe-Geräten. Sie müssen die Daten auf diesen Geräten schützen und für ihre Dauerhaftigkeit sorgen.

Oracle Cloud Infrastructure bietet leistungsstarke Remoteblock-(iSCSI-)LUNs, die redundant sind und mit einem API-Aufruf gesichert werden können. Weitere Informationen finden Sie unter Überblick über Block-Volume.

Informationen dazu, welche Ausprägungen den lokalen NVMe-Speicher unterstützen, finden Sie unter Compute-Ausprägungen.

NVMe-Geräte auf Ihrer Instanz suchen

Sie können die NVMe-Geräte mit dem Befehl lsblk identifizieren. Die Antwort gibt eine Liste zurück. NVMe-Geräte beginnen wie im folgenden Beispiel für eine BM.DenseIO1.36-Instanz mit nvme:

[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 ~]$

Fehlermodi und Schutz vor Fehlern

Vor Ausfall eines NVMe-Geräts schützen

Ein geschütztes RAID-Array ist die empfohlene Methode zum Schutz vor einem NVMe-Geräteausfall. Es gibt drei RAID-Ebenen, die für die meisten Workloads verwendet werden können:

  • RAID 1: Eine exakte Kopie (oder Spiegelung) eines Datasets auf zwei oder mehr Datenträgern. Ein klassisches gespiegeltes RAID-1-Paar enthält zwei Datenträger (siehe Abbildung):

    Diese Abbildung zeigt ein RAID-1-Array.

  • RAID 10: Verteilt Daten auf mehrere gespiegelte Paare. Solange ein Datenträger in jedem gespiegelten Paar funktionsfähig ist, können Daten wie folgt abgerufen werden:

    Diese Abbildung zeigt ein RAID 10-Array mit gespiegelten und durch Striping verteilten Blöcken.

  • RAID 6: Verteilung durch Striping auf Blockebene mit zwei Paritätsblöcken, die wie gezeigt auf alle Member-Datenträger verteilt sind.

    Diese Abbildung zeigt ein RAID-6-Array.

Weitere Informationen zu RAID und RAID-Ebenen finden Sie unter RAID.

Da die entsprechende RAID-Ebene von der Anzahl verfügbarer Laufwerke, der Anzahl benötigter einzelner LUNs, dem benötigten Arbeitsspeicher und den Performanceanforderungen abhängt, gibt es keine allgemeingültige Empfehlung. Sie müssen Ihre Workload und Ihr Design entsprechend verstehen.

Wichtig

Wenn Sie den Datenträger im Rahmen dieses Prozesses partitionieren oder formatieren und das Laufwerk größer als 2 TB ist, sollten Sie eine GUID-Partitionstabelle (GPT) erstellen. Wenn Sie eine GPT erstellen möchten, verwenden Sie den Befehl parted anstelle des Befehls fdisk. Weitere Informationen finden Sie in der Oracle Linux-Administratordokumentation unter Informationen zu Datenträgerpartitionen.

Optionen zur Verwendung einer BM.DenseIO1.36-Ausprägung

Für BM.DenseIO1.36-Instanzen mit neun NVMe-Geräten gibt es verschiedene Optionen.

Für alle nachfolgenden Optionen können Sie optional die Standardhöchstgeschwindigkeit für die RAID-Neusynchronisierung erhöhen. Wenn Sie diesen Wert (nahezu) auf die hohe Speichergeschwindigkeit der Bare-Metal-Instanzen erhöhen, können Sie den Zeitaufwand für die RAID-Einrichtung verringern.

Mit dem folgenden Befehl können Sie die Höchstgeschwindigkeit erhöhen:

$ sysctl -w dev.raid.speed_limit_max=10000000

Option 1: Einzelnes RAID-6-Array auf allen neun Geräten erstellen

Dieses Array ist redundant, funktioniert gut, übersteht den Ausfall von zwei Geräten und wird als einzelne LUN mit etwa 23,8 TB nutzbarem Speicherplatz verfügbar gemacht.

Mit den folgenden Befehlen können Sie ein RAID-6-Gerät über alle neun Geräte hinweg erstellen:

$ 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

Option 2: RAID-10-Array mit vier Geräten und RAID-6-Array mit fünf Geräten erstellen

Diese Arrays würden als zwei verschiedene LUNs für Ihre Anwendungen verfügbar gemacht. Dies ist eine empfohlene Option, wenn Sie einen I/O-Typ von einem anderen isolieren müssen, etwa Log- und Datendateien. In diesem Beispiel verfügt Ihr RAID-10-Array über einen nutzbaren Speicherplatz von ca. 6,4 TB und das RAID-6-Array über einen nutzbaren Speicherplatz von ca. 9,6 TB.

Mit den folgenden Befehlen können Sie ein RAID-10-Array mit vier Geräten und ein RAID-6-Array mit fünf Geräten erstellen:

$ 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

Option 3: RAID-10-Array mit acht Geräten erstellen

Wenn Sie die bestmögliche Performance benötigen und auf einen Teil des verfügbaren Speicherplatzes verzichten können, ist ein RAID-10-Array mit acht Geräten eine Option. Da für RAID 10 eine gerade Anzahl von Geräten erforderlich ist, wird das neunte Gerät nicht in das Array aufgenommen und dient als Hot-Spare für den Fall, dass ein anderes Gerät ausfällt. Dadurch wird eine einzelne LUN mit etwa 12,8 TB nutzbarem Speicherplatz erstellt.

Mit den folgenden Befehlen können Sie ein RAID-10-Array mit acht Geräten erstellen:

$ 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

Der folgende Befehl fügt "/dev/nvme8n" als Hot-Spare für das Array "/dev/md0" hinzu:

$ sudo mdadm /dev/md0 --add /dev/nvme8n1    
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf >> /dev/null

Option 4: Zwei RAID-10-Arrays mit vier Geräten erstellen

Erstellen Sie für bestmögliche Performance und I/O-Isolierung zwischen LUNs zwei RAID-10-Arrays mit jeweils vier Geräten. Da für RAID 10 eine gerade Anzahl von Geräten erforderlich ist, wird das neunte Gerät nicht in das Array aufgenommen und dient als globales Hot-Spare für den Fall, dass ein anderes Gerät in einem Array ausfällt. Dadurch werden zwei LUNS mit jeweils ca. 6,4 TB nutzbarem Speicherplatz erstellt.

Mit den folgenden Befehlen können Sie zwei RAID-10-Arrays mit jeweils vier Geräten und einem globalen Hot-Spare erstellen:

$ 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

Das Erstellen eines globalen Hot-Spares erfordert die folgenden zwei Schritte:

  1. Fügen Sie das Hot-Spare einem beliebigen Array hinzu, indem Sie die folgenden Befehle ausführen:

    $ sudo mdadm /dev/md0 --add /dev/nvme8n1
    $ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf >> /dev/null
  2. Bearbeiten Sie /etc/mdadm, um beide Arrays in derselben Reservegruppe zu platzieren. Fügen Sie spare-group=global wie folgt am Ende der Zeile hinzu, die mit ARRAY beginnt:

    $ 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

Array überwachen

Sie müssen unbedingt benachrichtigt werden, wenn ein Gerät in einem Ihrer Arrays ausfällt. Mdadm verfügt über integrierte Tools für das Monitoring, und Sie können zwei Optionen verwenden:

  • Legen Sie die Option MAILADDR in /etc/mdadm.conf fest, und führen Sie den mdadm-Monitor als Daemon aus.
  • Externes Skript ausführen, wenn mdadm einen Fehler erkennt

Legen Sie die Option MAILADDR in /etc/mdadm.conf fest, und führen Sie den mdadm-Monitor als Daemon aus.

Am einfachsten ist es für Sie, die Option MAILADDR in /etc/mdadm.conf festzulegen und dann den mdadm-Monitor als Daemon wie folgt auszuführen:

  1. Die Zeile DEVICE partitions ist erforderlich, damit MAILADDR funktioniert. Wenn sie fehlt, müssen Sie sie wie folgt hinzufügen:

    $ sudo vi /etc/mdadm.conf
    DEVICE partitions     
    ARRAY /dev/md0 level=raid1 UUID=1b70e34a:2930b5a6:016we78d:eese14532
    MAILADDR <my.name@example.com>
  2. Führen Sie den Monitor mit dem folgenden Befehl aus:

    $ sudo nohup mdadm –-monitor –-scan –-daemonize &
  3. Um zu überprüfen, ob der Monitor beim Hochfahren ausgeführt wird, führen Sie die folgenden Befehle aus:

    $ sudo chmod +x /etc/rc.d/rc.local
    $ sudo vi /etc/rc.local

    Fügen Sie die folgende Zeile am Ende von "/etc/rc.local" hinzu:

    nohup mdadm –-monitor –-scan –-daemonize &
  4. Um zu überprüfen, ob E-Mail und Monitor funktionieren, führen Sie den folgenden Befehl aus:

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

    Beachten Sie, dass diese E-Mails wahrscheinlich als Spam markiert werden. Die später in diesem Thema beschriebene Option PROGRAM ermöglicht komplexeres Alerting und Messaging.

Externes Skript ausführen, wenn ein Fehler erkannt wird

Eine erweiterte Option das Erstellen eines externen Skriptes, das ausgeführt werden kann, wenn der mdadm-Monitor einen Fehler erkennt. Sie können diesen Skripttyp mit der vorhandenen Monitoringlösung integrieren. Nachfolgend finden Sie ein Beispiel für diesen Skripttyp:

$ 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

Fügen Sie als Nächstes die Option PROGRAM zu /etc/mdadm.conf hinzu. Beispiel:

  1. Die Zeile DEVICE partitions ist erforderlich, damit MAILADDR funktioniert. Wenn sie fehlt, müssen Sie sie wie folgt hinzufügen:

    $ 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. Führen Sie den Monitor mit dem folgenden Befehl aus:

    $ sudo nohup mdadm –-monitor –-scan –-daemonize &
  3. Um zu überprüfen, ob der Monitor beim Hochfahren ausgeführt wird, führen Sie die folgenden Befehle aus:

    $ sudo chmod +x /etc/rc.d/rc.local
    $ sudo vi /etc/rc.local

    Fügen Sie die folgende Zeile am Ende von "/etc/rc.local" hinzu:

    nohup mdadm –-monitor –-scan –-daemonize &
  4. Um zu überprüfen, ob E-Mail und Monitor funktionieren, führen Sie den folgenden Befehl aus:

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

    Beachten Sie, dass diese E-Mails wahrscheinlich als Spam markiert werden. Die später in diesem Thema beschriebene Option PROGRAM ermöglicht komplexeres Alerting und Messaging.

Ausfall eines Geräts simulieren

Mit mdadm können Sie manuell den Ausfall eines Geräts auslösen und feststellen, ob das RAID-Array den Ausfall übersteht, sowie die von Ihnen eingerichteten Alerts testen.

  1. Markieren Sie ein Gerät im Array mit dem folgenden Befehl als nicht erfolgreich:

    $ sudo mdadm /dev/md0 --fail /dev/nvme0n1
  2. Stellen Sie das Gerät wieder her. Andernfalls ist Ihr Array möglicherweise nicht geschützt. Verwenden Sie den folgenden Befehl:

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

    Ihr Array wird automatisch neu erstellt, um das "neue" Gerät zu verwenden. Während dieses Prozesses wird die Performance verringert.

  3. Sie können den Status der Neuerstellung mit dem folgenden Befehl überwachen:

    $ sudo mdadm --detail /dev/md0

Maßnahmen beim Ausfall eines NVMe-Geräts

Compute-Ressourcen in der Cloud sind als temporär und ersetzbar konzipiert. Wenn ein NVMe-Gerät ausfällt, während die Instanz ausgeführt wird, müssen Sie eine andere Instanz mit mindestens derselben Speicherkapazität starten und anschließend die Daten in die neue Instanz kopieren, sodass die alte Instanz ersetzt wird. Es gibt mehrere Toolsets für das Kopieren großer Datenmengen, wobei rsync am häufigsten verwendet wird. Da die Verbindungsgeschwindigkeit zwischen Instanzen 10 Gbit/s beträgt, sollte das Kopieren der Daten schnell gehen. Denken Sie daran, dass Ihr Array mit einem fehlerhaften Gerät möglicherweise nicht mehr geschützt ist. Kopieren Sie die Daten daher schnellstmöglich aus der betroffenen Instanz.

Linux Logical Volume Manager verwenden

Der Linux Logical Volume Manager (LVM) bietet zahlreiche Features zur Verwaltung von Volumes. Wenn Sie diese Features benötigen, empfehlen wir dringend, mit mdadm, wie in den vorherigen Abschnitten dieses Themas beschrieben, die RAID-Arrays zu erstellen und anschließend mit den LVM-Befehlen pvcreate, vgcreate und lvcreate Volumes auf den mdadm-LUNs zu erstellen. Sie sollten LVM nicht direkt für Ihre NVMe-Geräte verwenden.

Vor Verlust der Instanz oder Availability-Domain schützen

Nachdem die Daten vor dem Verlust eines NVMe-Geräts geschützt wurden, müssen Sie sie vor dem Verlust einer Instanz oder dem Verlust der Availability-Domain schützen. Dieser Schutztyp wird normalerweise durch Replizieren der Daten in eine andere Availability-Domain oder Sichern der Daten an einem anderen Speicherort durchgeführt. Die ausgewählte Methode ist von Ihren Zielen abhängig. Details dazu finden Sie in den Disaster-Recovery-Konzepten "Recovery Time Objective" (RTO) und "Recovery Point Objective" (RPO).

Replikation

Das Replizieren der Daten von einer Instanz in einer Availability-Domain auf eine andere hat das niedrigste RTO und RPO bei wesentlich höheren Kosten als Backups. Für jede Instanz in einer Availability-Domain benötigen Sie eine andere Instanz in einer anderen Availability-Domain.

Bei Oracle-Datenbank-Workloads sollten Sie die integrierte Oracle Data Guard-Funktionalität zur Replikation Ihrer Datenbanken verwenden. Die Abstände zwischen Oracle Cloud Infrastructure-Availability-Domains sind so gering, dass hohe Performance und synchrone Replikation unterstützt werden. Die asynchrone Replikation ist ebenfalls eine Option.

Bei der Universal-Blockreplikation ist DRBD die empfohlene Option. Sie können DRBD so konfigurieren, dass alle Schreibvorgänge in einer Availability-Domain synchron oder asynchron in eine andere Availability-Domain repliziert werden.

Backups

Herkömmliche Backups sind eine weitere Möglichkeit zum Schutz von Daten. Alle kommerziellen Backupprodukte werden in Oracle Cloud Infrastructure vollständig unterstützt. Wenn Sie Backups verwenden, sind RTO und RPO wesentlich höher als bei der Replikation, weil Sie die nicht erfolgreichen Compute-Ressourcen neu erstellen und das letzte Backup dann wiederherstellen müssen. Die Kosten sind wesentlich niedriger, da Sie keine zweite Instanz verwalten müssen. Speichern Sie die Backups nicht in derselben Availability-Domain wie die Originalinstanz.

Vor Datenbeschädigung oder -verlust durch Anwendungs- oder Benutzerfehler schützen

Die zwei empfohlenen Möglichkeiten zum Schutz vor Datenbeschädigung oder -verlust durch Anwendungs- oder Benutzerfehler sind regelmäßige Snapshots oder das Erstellen von Backups.

Snapshots

Die beiden einfachsten Methoden zur Verwaltung von Snapshots sind Dateisysteme wie ZFS, die Snapshots unterstützen, oder die Erstellung und Verwaltung von Snapshots mit LVM. Aufgrund der Art und Weise, wie LVM Copy-on-Write (COW) implementiert hat, kann die Performance erheblich verringert werden, wenn ein Snapshot mit LVM erstellt wird.

Backups

Alle kommerziellen Backupprodukte werden in Oracle Cloud Infrastructure vollständig unterstützt. Stellen Sie sicher, dass die Backups in einer anderen Availability-Domain als die ursprüngliche Instanz gespeichert sind.