Protection des données des périphériques NVMe

Certaines formes  d'instance de calcul dans Oracle Cloud Infrastructure incluent des périphériques NVMe attachés localement. Ces périphériques offrent une latence extrêmement faible et un stockage de blocs hautes performances idéal pour le Big Data, le traitement des transactions en ligne (OLTP) et toute autre charge globale pouvant en bénéficier.

Attention

Les périphériques NVMe ne sont en aucune manière protégés ; il s'agit de périphériques individuels installés localement sur votre instance. Oracle Cloud Infrastructure ne prend pas d'images, n'effectue pas de sauvegarde et n'utilise pas RAID ni aucune autre méthode pour protéger les données sur les périphériques NVMe. Il vous incombe de protéger les données sur ces périphériques et d'en gérer la durabilité.

Oracle Cloud Infrastructure offre des unités logiques de stockage de blocs distants hautes performances (iSCSI) redondantes et pouvant être sauvegardées via un appel d'API. Pour plus d'informations, reportez-vous à Présentation de Block Volume.

Pour obtenir des informations sur les formes qui prennent en charge le stockage NVMe local, reportez-vous à Formes de calcul.

Recherche des périphériques NVMe sur votre instance

Vous pouvez identifier les périphériques NVMe à l'aide de la commande lsblk. La réponse renvoie une liste. Les périphériques NVMe commencent par "nvme", comme indiqué dans l'exemple suivant pour une instance 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 ~]$

Modes d'échec et solutions de protection associées

Protection contre l'échec d'un périphérique NVMe

Une unité de stockage RAID protégée est le moyen le plus recommandé pour vous protéger contre un échec de périphérique NVMe. Il existe trois niveaux RAID utilisables pour la majorité des charges globales :

  • RAID 1 : copie exacte (ou miroir) d'un ensemble de données sur plusieurs disques. Une paire mise en mirroir RAID 1 classique contient deux disques, comme suit :

    Cette image présente une unité de stockage RAID 1.

  • RAID 10 : partitionne les données sur plusieurs paires mises en miroir. Tant qu'un disque de chaque paire mise en miroir fonctionne, les données peuvent être extraites, comme indiqué ci-dessous :

    Cette image présente une unité de stockage RAID 10 avec des blocs mis en miroir et partitionnés.

  • RAID 6 : partitionnement au niveau des blocs avec deux blocs de parité répartis sur tous les disques membres, comme indiqué.

    Cette image présente une unité de stockage RAID 6.

Pour plus d'informations sur RAID et les niveaux, reportez-vous à RAID.

Dans la mesure où le niveau RAID approprié dépend du nombre de disques disponibles, du nombre d'unités logiques de stockage individuelles nécessaires, de la quantité d'espace nécessaire et des performances requises, il n'existe pas de choix correct. Vous devez comprendre votre charge globale et concevoir en conséquence.

Important

Si vous partitionnez ou formatez votre disque dans le cadre de ce processus et que le lecteur est de taille supérieure à 2 To, vous devez créer une table de partition GUID. Pour créer une table de partition GUID, utilisez la commande parted au lieu de fdisk. Pour plus d'informations, reportez-vous à A propos des partitions de disque dans le guide de l'administrateur Oracle Linux.

Options d'utilisation d'une forme BM.DenseIO1.36

Il existe plusieurs options pour les instances BM.DenseIO1.36 avec neuf périphériques NVMe .

Pour toutes les options ci-dessous, vous pouvez éventuellement augmenter la valeur limite de vitesse de resynchronisation RAID par défaut. Augmenter cette valeur afin de se rapprocher de la vitesse de stockage rapide sur les instances Bare Metal peut réduire le temps nécessaire pour configurer RAID.

Utilisez la commande suivante pour augmenter la valeur limite de vitesse :

$ sysctl -w dev.raid.speed_limit_max=10000000

Option 1 : création d'un périphérique RAID 6 unique sur les neuf périphériques

Cette unité de stockage est redondante, fonctionne bien, fera face à l'échec de deux périphériques et sera présentée comme une unité logique de stockage unique avec environ 23,8 To d'espace utilisable.

Utilisez les commandes suivantes pour créer un périphérique RAID 6 unique sur les neuf périphériques :

$ 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 : création d'une unité de stockage RAID 10 à quatre périphériques et d'une unité de stockage RAID 6 à cinq périphériques

Ces unités de stockage seraient présentées comme deux unités logiques de stockage différentes à vos applications. Cette option est recommandée lorsque vous devez isoler un type d'E/S par rapport à un autre, comme des fichiers journaux et des fichiers de données. Dans cet exemple, votre unité de stockage RAID 10 aurait environ 6,4 To d'espace utilisable et l'unité de stockage RAID 6 en aurait environ 9,6 To.

Utilisez les commandes suivantes pour créer une unité de stockage RAID 10 à quatre périphériques et une unité de stockage RAID 6 à cinq périphériques :

$ 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 : création d'une unité de stockage RAID 10 à huit périphériques

Si vous avez besoin des meilleures performances possible et que vous pouvez sacrifier une partie de votre espace disponible, vous pouvez utiliser une unité de stockage RAID 10 à huit périphériques. Comme une unité de stockage RAID 10 nécessite un nombre pair de périphériques, le neuvième périphérique est enlevé de l'unité de stockage et sert de disque hot spare en cas d'échec d'un autre périphérique. Cela crée une seule unité logique de stockage avec environ 12,8 To d'espace utilisable.

Utilisez les commandes suivantes pour créer une unité de stockage RAID 10 à huit périphériques :

$ 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

La commande suivante ajoute /dev/nvme8n en tant que disque hot spare pour l'unité de stockage /dev/md0 :

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

Option 4 : création de deux unités de stockage RAID 10 à quatre périphériques

Pour obtenir les meilleures performances possible et une isolation d'E/S sur les unités logiques de stockage, créez deux unités de stockage RAID 10 à quatre périphériques. Comme RAID 10 nécessite un nombre pair de périphériques, le neuvième périphérique est enlevé des unités de stockage et sert de disque hot spare global en cas d'échec d'un autre périphérique dans l'une des unités de stockage. Cela crée deux unités logiques de stockage, chacune avec environ 6,4 To d'espace utilisable.

Utilisez les commandes suivantes pour créer deux unités de stockage RAID 10 à quatre périphériques avec un disque hot spare global :

$ 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 création d'un disque hot spare global nécessite les deux étapes suivantes :

  1. Ajoutez le disque hot spare à l'une des deux unités de stockage (peu importe laquelle) en exécutant ces commandes :

    $ sudo mdadm /dev/md0 --add /dev/nvme8n1
    $ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf >> /dev/null
  2. Modifiez /etc/mdadm pour placer les deux unités de stockage dans le même groupe de disques hot spare. Ajoutez spare-group=global à la fin de la ligne commençant par ARRAY, comme suit :

    $ 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

Surveillance de votre unité de stockage

Il est important que vous soyez averti si un périphérique de l'une de vos unités de stockage échoue. Mdadm possède des outils intégrés qui peuvent être utilisés à des fins de surveillance. Vous pouvez utiliser deux options :

  • Définition de l'option MAILADDR dans /etc/mdadm.conf et exécution du moniteur mdadm en tant que démon.
  • Exécution d'un script externe lorsque mdadm détecte un échec

Définition de l'option MAILADDR dans /etc/mdadm.conf et exécution du moniteur mdadm en tant que démon.

La méthode la plus simple consiste à définir l'option MAILADDR dans /etc/mdadm.conf, puis à exécuter le moniteur mdadm en tant que démon, comme suit :

  1. La ligne DEVICE partitions est requise pour que MAILADDR puisse fonctionner. Si elle est manquante, vous devez l'ajouter, comme suit :

    $ sudo vi /etc/mdadm.conf
    DEVICE partitions     
    ARRAY /dev/md0 level=raid1 UUID=1b70e34a:2930b5a6:016we78d:eese14532
    MAILADDR <my.name@example.com>
  2. Exécutez le moniteur à l'aide de la commande suivante :

    $ sudo nohup mdadm –-monitor –-scan –-daemonize &
  3. Pour vérifier que le moniteur est exécuté au démarrage, exécutez les commandes suivantes :

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

    Ajoutez la ligne suivante à la fin de /etc/rc.local :

    nohup mdadm –-monitor –-scan –-daemonize &
  4. Pour vérifier que le courriel et le moniteur fonctionnent tous les deux, exécutez la commande suivante :

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

    Ces courriels seront probablement marqués comme messages indésirables. L'option PROGRAM, décrite plus loin dans cette rubrique, permet l'envoi d'alertes et de messages de façon plus sophistiquée.

Exécution d'un script externe lorsqu'un échec est détecté

Une option plus avancée consiste à créer un script externe qui sera exécuté si le moniteur mdadm détecte un échec. Vous pouvez intégrer ce type de script à votre solution de surveillance existante. Voici un exemple de ce type de 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

Ensuite, ajoutez l'option PROGRAM à /etc/mdadm.conf, comme indiqué dans l'exemple suivant :

  1. La ligne DEVICE partitions est requise pour que MAILADDR puisse fonctionner. Si elle est manquante, vous devez l'ajouter, comme suit :

    $ 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. Exécutez le moniteur à l'aide de la commande suivante :

    $ sudo nohup mdadm –-monitor –-scan –-daemonize &
  3. Pour vérifier que le moniteur est exécuté au démarrage, exécutez les commandes suivantes :

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

    Ajoutez la ligne suivante à la fin de /etc/rc.local :

    nohup mdadm –-monitor –-scan –-daemonize &
  4. Pour vérifier que le courriel et le moniteur fonctionnent tous les deux, exécutez la commande suivante :

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

    Ces courriels seront probablement marqués comme messages indésirables. L'option PROGRAM, décrite plus loin dans cette rubrique, permet l'envoi d'alertes et de messages de façon plus sophistiquée.

Simulation de l'échec d'un périphérique

Vous pouvez utiliser mdadm pour provoquer manuellement l'échec d'un périphérique afin de déterminer si votre unité de stockage RAID peut faire face à l'échec, ainsi que pour tester les alertes configurées.

  1. Marquez un périphérique de l'unité de stockage comme étant en échec en exécutant la commande suivante :

    $ sudo mdadm /dev/md0 --fail /dev/nvme0n1
  2. Récupérez le périphérique ou votre unité de stockage risque de ne plus être protégée. Utilisez la commande suivante :

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

    L'unité de stockage sera automatiquement reconstruite afin d'utiliser le "nouveau" périphérique. Les performances seront réduites lors de ce processus.

  3. Vous pouvez surveiller le statut de la reconstruction en exécutant la commande suivante :

    $ sudo mdadm --detail /dev/md0

Procédure à suivre en cas d'échec d'un périphérique NVMe

Les ressources Compute dans le cloud sont conçues pour être temporaires et fongibles. Si un périphérique NVMe échoue alors que l'instance est en service, vous devez démarrer une autre instance avec la même quantité de stockage ou plus, puis copier les données vers la nouvelle instance, en remplaçant l'ancienne instance. Plusieurs outils permettent de copier de grandes quantités de données, le plus populaire étant rsync. Etant donné que la connectivité entre les instances est de 10 Go/s, la copie des données doit être rapide. N'oubliez pas qu'avec un périphérique en échec, votre unité de stockage peut ne plus être protégée. Vous devez donc copier les données de l'instance concernée aussi rapidement que possible.

Utilisation du gestionnaire de volumes logiques Linux

Le gestionnaire de volumes logiques Linux fournit un vaste ensemble de fonctionnalités pour la gestion des volumes. Si vous avez besoin de ces fonctionnalités, il est vivement recommandé d'utiliser mdadm comme décrit dans les sections précédentes de cette rubrique pour créer les unités de stockage RAID, puis les commandes pvcreate, vgcreate et lvcreate du gestionnaire de volumes logiques pour créer des volumes sur les unités logiques de stockage mdadm. Vous ne devez pas utiliser le gestionnaire de volumes logiques directement pour vos périphériques NVMe.

Protection contre la perte de l'instance ou du domaine de disponibilité

Une fois vos données protégées contre la perte d'un périphérique NVMe, vous devez les protéger contre la perte d'une instance ou du domaine de disponibilité. Ce type de protection est généralement effectué en répliquant vos données vers un autre domaine de disponibilité ou en les sauvegardant vers un autre emplacement. La méthode que vous choisissez dépend de vos objectifs. Pour plus de détails, reportez-vous aux concepts de récupération après sinistre d'objectif de délai de récupération (RTO) et d'objectif du point de récupération (RPO).

Réplication

La réplication des données d'une instance d'un domaine de disponibilité vers une autre possède le RTO et le RPO les plus faibles, à un coût significativement plus élevé que les sauvegardes. Pour chaque instance d'un domaine de disponibilité, vous devez avoir une autre instance dans un autre domaine de disponibilité.

Pour les charges globales de base de données Oracle, vous devez utiliser la fonctionnalité Oracle Data Guard intégrée pour répliquer vos bases de données. Les domaines de disponibilité Oracle Cloud Infrastructure sont suffisamment proches les uns des autres pour être capables de prendre en charge les réplications synchrones hautes performances. La réplication asynchrone est également une option.

Pour la réplication de blocs à usage général, DRBD est l'option recommandée. Vous pouvez configurer DRBD de sorte à répliquer, de façon synchrone ou asynchrone, chaque écriture d'un domaine de disponibilité vers un autre domaine de disponibilité.

Sauvegardes

Les sauvegardes traditionnelles constituent une autre manière de protéger les données. Tous les produits de sauvegarde commerciaux sont entièrement pris en charge sur Oracle Cloud Infrastructure. Si vous utilisez des sauvegardes, les RTO et RPO sont beaucoup plus élevés que si vous utilisez la réplication, car vous devez recréer les ressources de calcul qui ont échoué, puis restaurer la sauvegarde la plus récente. Les coûts sont significativement plus faibles car il n'est pas nécessaire de gérer une seconde instance. Ne stockez pas vos sauvegardes dans le même domaine de disponibilité que leur instance d'origine.

Protection contre l'altération ou la perte de données à cause d'une erreur de l'application ou de l'utilisateur

La réalisation de clichés ou la création de sauvegardes de façon régulière sont les deux méthodes recommandées pour prévenir l'altération ou la perte de données suite à une erreur de l'application ou de l'utilisateur.

Clichés

Afin de gérer les clichés facilement, vous devez utiliser un système de fichiers prenant en charge les clichés, tel que ZFS, ou utiliser le gestionnaire de volumes logiques pour créer et gérer les clichés. En raison de la façon dont le gestionnaire de volumes logiques a implémenté la copie à l'écriture, les performances peuvent considérablement diminuer lorsqu'un cliché est pris au moyen du gestionnaire de volumes logiques.

Sauvegardes

Tous les produits de sauvegarde commerciaux sont entièrement pris en charge sur Oracle Cloud Infrastructure. Assurez-vous que vos sauvegardes sont stockées dans un domaine de disponibilité différent de celui de l'instance d'origine.