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.
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
Il existe trois modes de défaillance principaux que vous devez prévoir :
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é :
-
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é :
-
RAID 6 : Division au niveau des blocs avec deux blocs de parité répartis sur tous les disques membres, comme illustré.
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.
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 :
-
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
-
Modifiez
/etc/mdadm
pour placer les deux ensembles dans le même groupe de rechange. Ajoutezspare-group=global
à la fin de la ligne qui commence parARRAY
, 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 moniteurmdadm
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 :
-
La ligne
DEVICE partitions
est requise pour queMAILADDR
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>
-
Exécutez le moniteur à l'aide de la commande suivante :
$ sudo nohup mdadm –-monitor –-scan –-daemonize &
-
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 &
-
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 :
-
La ligne
DEVICE partitions
est requise pour queMAILADDR
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
-
Exécutez le moniteur à l'aide de la commande suivante :
$ sudo nohup mdadm –-monitor –-scan –-daemonize &
-
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 &
-
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.
-
Marquez un appareil dans l'ensemble comme ayant échoué en exécutant la commande suivante :
$ sudo mdadm /dev/md0 --fail /dev/nvme0n1
-
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.
-
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.