Protection des données sur les appareils NVMe

Certaines formes d'instance de calcul dans Oracle Cloud Infrastructure incluent des appareils NVMe attachés localement. Ces appareils fournissent une latence extrêmement faible, un stockage par blocs haute performance idéal pour les mégadonnées, le traitement des transactions en ligne et toute autre charge de travail pouvant bénéficier d'un stockage par blocs haute performance.

Attention

Les appareils NVMe ne sont pas protégés de quelque manière que ce soit; il s'agit d'appareils individuels installés localement sur votre instance. Oracle Cloud Infrastructure ne prend pas d'images, ne sauvegarde pas, ne prend pas en charge le chiffrement au repos ou n'utilise pas le stockage RAID ni d'autre méthode pour protéger les données sur des appareils NVMe. Il vous incombe de protéger et de gérer la durabilité des données sur ces appareils.

Oracle Cloud Infrastructure propose des unités logiques de stockage par blocs à distance haute performance (iSCSI) qui sont redondantes et qui peuvent être sauvegardées à l'aide d'un appel d'API. Pour plus d'informations, voir Aperçu du service de volumes par blocs.

Pour plus d'informations sur les formes prenant en charge le stockage NVMe local, voir Formes de calcul.

Recherche des appareils NVMe dans votre instance

Vous pouvez identifier les appareils NVMe à l'aide de la commande lsblk. La réponse retourne une liste. Les appareils NVMe commencent par "nvme", comme illustré 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 de défaillance et comment s'en protéger

Protection contre la défaillance d'un appareil NVMe

Un stockage RAID protégé constitue le moyen le plus recommandé pour se protéger contre la défaillance d'un appareil NVMe. Trois niveaux de RAID peuvent être utilisés dans la majorité des charges de travail :

  • RAID 1 : Copie exacte (ou miroir) d'un jeu de données sur deux disques ou plus; une paire en miroir RAID 1 classique contient deux disques, comme illustré :

    L'image montre un ensemble RAID 1.

  • RAID 10 : Répartit les données dans plusieurs paires en miroir. Tant qu'un disque dans chaque paire en miroir fonctionne, les données peuvent être extraites, comme illustré :

    Cette image montre un ensemble RAID 10 avec des blocs en miroir et répartis.

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

    L'image montre un ensemble Raid 6.

Pour plus d'informations sur le stockage RAID et les niveaux de RAID, voir RAID.

Étant donné que le niveau de RAID approprié est déterminé par le nombre de lecteurs disponibles, le nombre d'unités logiques de stockage individuelles requises, la quantité d'espace requis et les exigences en matière de performance, il n'y a pas un seul choix correct. Vous devez comprendre la charge de travail et procéder à la conception en conséquence.

Important

Si vous partitionnez ou formatez votre disque dans le cadre de ce processus et que le lecteur est supérieur à 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, voir À propos des partitions de disque dans le Guide de l'administrateur d'Oracle Linux.

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

Plusieurs options existent pour les instances BM.DenseIO1.36 comportant neuf appareils NVMe .

Pour toutes les options ci-dessous, vous pouvez facultativement augmenter la valeur limite de la vitesse de resynchronisation RAID par défaut. L'augmentation de cette valeur pour correspondre plus étroitement à la vitesse de stockage rapide sur les instances sans système d'exploitation peut réduire le temps nécessaire à la définition de RAID.

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

$ sysctl -w dev.raid.speed_limit_max=10000000

Option 1 : Créer un seul appareil RAID 6 sur les neuf appareils

Cet ensemble est redondant, offre une bonne performance, survivra à la défaillance de toute paire d'appareils et est exposé en tant qu'unité logique de stockage unique avec environ 23,8 To d'espace utilisable.

Utilisez les commandes suivantes pour créer un seul appareil RAID 6 sur les neuf appareils :

$ 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éer un RAID 10 de quatre appareil et un ensemble RAID 6 de cinq appareils

Ces ensembles sont exposés aux applications en tant que deux unités logiques de stockage différentes. Il s'agit d'un choix recommandé lorsque vous devez isoler un type d'E/S d'un autre, par exemple les fichiers journaux et les fichiers de données. Dans cet exemple, l'ensemble RAID 10 doit avoir environ 6,4 To d'espace utilisable et l'ensemble RAID 6 doit en avoir environ 9,6 To.

Utilisez les commandes suivantes pour créer un ensemble RAID 10 de quatre appareils et un ensemble RAID 6 de cinq appareils :

$ 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éer un ensemble RAID 10 de huit appareils

Si vous avez besoin de la meilleure performance possible et que vous pouvez sacrifier une certaine quantité d'espace disponible, un ensemble RAID 10 de huit appareils est une option. RAID 10 nécessitant un nombre pair d'appareils, le neuvième appareil reste en dehors de l'ensemble et sert d'appareil de rechange à chaud en cas d'échec d'un autre appareil. Une seule unité logique de stockage est ainsi créée avec environ 12,8 To d'espace utilisable.

Utilisez les commandes suivantes pour créer un ensemble RAID 10 de huit appareils :

$ 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 comme disque de rechange à chaud pour l'ensemble /dev/md0 :

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

Option 4 : Créer deux ensembles RAID 10 de quatre appareils

Pour la meilleure performance possible et l'isolement d'E/S sur les unités logiques de stockage, créez deux ensembles RAID 10 de quatre appareils. RAID 10 nécessitant un nombre pair d'appareils, le neuvième appareil reste en dehors des ensembles et sert de disque de rechange à chaud en cas d'échec d'un autre appareil. Deux unités logiques de stockage sont ainsi créées, chacune ayant environ 6,4 To d'espace utilisable.

Utilisez les commandes suivantes pour créer deux ensembles RAID 10 de quatre appareils avec disque de rechange à chaud 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 de rechange à chaud global nécessite les deux étapes suivantes :

  1. Ajoutez le disque de rechange à l'un des ensembles (peu importe lequel) en exécutant les commandes suivantes :

    $ 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 ensembles dans le même groupe de rechange. Ajoutez spare-group=global à la fin de la ligne qui commence 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 l'ensemble

Il est important que vous soyez avisé si un appareil dans l'un de vos ensembles échoue. Mdadm comporte des outils intégrés qui peuvent être utilisés pour la surveillance et il existe deux options que vous pouvez utiliser :

  • Définir l'option MAILADDR dans /etc/mdadm.conf, puis exécuter le moniteur mdadm en tant que démon
  • Exécuter un script externe lorsque mdadm détecte une défaillance

Définir l'option MAILADDR dans /etc/mdadm.conf, puis exécuter le 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 MDX en tant que démon, comme suit :

  1. La ligne DEVICE partitions est requise pour que MAILADDR fonctionne; 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

    Notez que ces courriels seront probablement marqués comme pourriel. L'option PROGRAM, décrite plus tard dans cette rubrique, permet d'envoyer des alertes et des messages plus sophistiqués.

Exécuter un script externe en cas de détection d'une défaillance

Une option plus avancée consiste à créer un script externe qui sera exécuté au cas où le moniteur mdadm détecte une défaillance. Vous intégrez 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

Ajoutez ensuite l'option PROGRAM à /etc/mdadm.conf, comme illustré dans l'exemple suivant :

  1. La ligne DEVICE partitions est requise pour que MAILADDR fonctionne; 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

    Notez que ces courriels seront probablement marqués comme pourriel. L'option PROGRAM, décrite plus tard dans cette rubrique, permet d'envoyer des alertes et des messages plus sophistiqués.

Simuler la défaillance d'un appareil

Vous pouvez utiliser mdadm pour causer manuellement la défaillance d'un appareil afin de voir si le stockage RAID peut survivre à la défaillance ainsi que pour tester les alertes que vous avez configurées.

  1. Marquez un appareil dans l'ensemble comme ayant échoué en exécutant la commande suivante :

    $ sudo mdadm /dev/md0 --fail /dev/nvme0n1
  2. Récupérez l'appareil ou votre ensemble risque de ne pas être protégé. Utilisez la commande suivante :

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

    Votre ensemble est automatiquement recréé afin d'utiliser le "nouvel" appareil. La performance diminue pendant ce processus.

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

    $ sudo mdadm --detail /dev/md0

Que faire en cas de défaillance d'un appareil NVMe

Les ressources du service de calcul en nuage sont conçues pour être temporaires et fongibles. Si un appareil 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 dans la nouvelle instance, en remplaçant l'ancienne. Il existe plusieurs jeux d'outils pour copier de grandes quantités de données, rsync étant le plus populaire. Puisque la connectivité entre les instances est de 10 Go/s, la copie des données devrait être rapide. N'oubliez pas qu'avec un appareil en échec, il est possible que votre ensemble ne soit plus protégé. Vous devez donc copier les données en dehors de l'instance concernée aussi rapidement que possible.

Utilisation du gestionnaire de volumes logiques de Linux

Le gestionnaire de volumes logiques (LVM) de Linux fournit un jeu étoffé de fonctions pour la gestion des volumes. Si vous avez besoin de ces fonctions, nous vous recommandons fortement d'utiliser mdadm, comme décrit dans les sections précédentes de cette rubrique, pour créer des ensembles RAID, puis d'utiliser 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 LVM directement sur les appareils NVMe.

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

Une fois les données protégées contre la perte d'un appareil NVMe, vous devez les protéger contre la perte d'une instance ou la perte du domaine de disponibilité. Ce type de protection est généralement effectué en répliquant les données dans un autre domaine de disponibilité ou en sauvegardant les données dans un autre emplacement. La méthode que vous sélectionnez dépend de vos objectifs. Pour des informations détaillées, voir les concepts de récupération après sinistre, notamment l'objectif de délai de récupération (ODR) et l'objectif de point de récupération (OPR).

Réplication

La réplication des données d'une instance d'un domaine de disponibilité vers un autre entraîne un ODR et un OPR à un coût bien plus élevé que pour les sauvegardes; pour chaque instance d'un domaine de disponibilité, vous devez disposer d'une autre instance dans un domaine de disponibilité différent.

Pour les charges de travail de base de données Oracle, vous devez utiliser la fonctionnalité Oracle Data Guard intégrée pour répliquer les bases de données. Les domaines de disponibilité d'Oracle Cloud Infrastructure sont assez proches les uns des autres pour prendre en charge la réplication synchrone haute performance. La réplication asynchrone est également une option.

Pour la réplication par blocs à usage général, l'option recommandée est la solution DRBD (Distributed Replicated Block Device). Vous pouvez configurer DRBD (Distributed Replicated Block Device) pour répliquer, de manière synchrone ou asynchrone, chaque écriture dans un domaine de disponibilité vers un autre domaine de disponibilité.

Sauvegardes

Les sauvegardes traditionnelles constituent un autre moyen 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, l'objectif de délai de récupération (ODR) et l'objectif de point de récupération (OPR) sont beaucoup plus élevés que pour l'utilisation de 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 bien plus bas, car vous n'avez pas besoin de maintenir une deuxième instance. Ne stockez pas les sauvegardes dans le même domaine de disponibilité que leur instance initiale.

Protection contre la corruption ou la perte de données en raison d'une erreur d'application ou d'utilisateur

Les deux moyens recommandés pour protéger les données contre la corruption ou la perte causée par une erreur d'application ou d'utilisateur consistent à prendre régulièrement des instantanés ou à créer des sauvegardes.

Instantanés

Les deux moyens les plus faciles pour tenir à jour des instantanés consistent à utiliser un système de fichiers qui prend en charge les instantanés, par exemple ZFS, ou à utiliser LVM pour créer et gérer des instantanés. Étant donné la manière dont LVM a mis en oeuvre la copie sur écriture (COW), la performance peut être considérablement réduite lorsqu'un instantané est pris à l'aide de LVM.

Sauvegardes

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