Protección de datos en dispositivos NVMe

Algunas unidades de instancia informática de Oracle Cloud Infrastructure incluyen dispositivos NVMe asociados localmente. Estos dispositivos proporcionan una latencia extremadamente baja, un almacenamiento en bloque de alto rendimiento que es ideal para big data, OLTP y cualquier otra carga de trabajo que pueda aprovechar el almacenamiento en bloque de alto rendimiento.

Tenga en cuenta que estos dispositivos no están protegidos de ninguna manera; son dispositivos individuales instalados localmente en la instancia. Oracle Cloud Infrastructure no toma imágenes ni realiza copias de seguridad ni usa RAID ni ningún otro método para proteger los datos de los dispositivos NVMe. Es su responsabilidad proteger y gestionar la durabilidad de los datos en estos dispositivos.

Oracle Cloud Infrastructure ofrece LUN de bloques remotos de alto rendimiento (iSCSI) que son redundantes y de los que se pueden realizar copias de seguridad mediante una llamada de API. Consulte Visión general de volumen de bloque para obtener más información.

Consulte Unidades de computación para obtener información sobre qué unidades soportan el almacenamiento local de NVMe.

Búsqueda de dispositivos NVMe en la instancia

Puede identificar los dispositivos NVMe con el comando lsblk. La respuesta devuelve una lista. Los dispositivos NVMe comienzan con "nvme", como se muestra en el siguiente ejemplo de una instancia 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 ~]$

Modos de fallo y cómo protegerse contra ellos

Protección contra el fallo de un dispositivo NVMe

Una matriz RAID protegida es la forma más recomendada de protegerse contra un fallo del dispositivo NVMe. Hay tres niveles de RAID que se pueden utilizar para la mayoría de las cargas de trabajo:

  • RAID 1: una copia exacta (o reflejo) de un conjunto de datos en dos o más discos; un par RAID 1 reflejado clásico contiene dos discos, como se muestra a continuación:

    En esta imagen se muestra una matriz RAID 1.

  • RAID 10: segmenta datos en varios pares reflejados. Siempre que un disco de cada par reflejado sea funcional, se pueden recuperar datos, como se muestra a continuación:

    En esta imagen se muestra una matriz RAID 10, con bloques reflejados y segmentados.

  • RAID 6: segmentación de nivel de bloque con dos bloques de paridad distribuidos en todos los discos miembros, como se muestra.

    En esta imagen se muestra una matriz Raid 6.

Para obtener más información sobre los RAID y los niveles de RAID, consulte RAID.

Debido a que el nivel de RAID adecuado es una función de la cantidad de unidades disponibles, de LUN individuales necesarios, de espacio necesario y los requisitos de rendimiento, no hay una opción correcta. Debe comprender la carga de trabajo y el diseño según corresponda.

Importante

Si está realizando la partición o formateando el disco como parte de este proceso y la unidad es mayor que 2 TB, debe crear una tabla de particiones GUID (GPT). Si desea crear una GPT, utilice parted en lugar del comando fdisk. Para obtener más información, consulte Acerca de las particiones de disco en la Guía del administrador de Oracle Linux.

Opciones para utilizar una unidad BM.DenseIO1.36

Existen varias opciones para instancias BM.DenseIO1.36 con nueve dispositivos NVMe.

Para todas las opciones siguientes, puede aumentar opcionalmente el valor de límite de velocidad de resincronización de RAID por defecto. Aumentar este valor para que coincida más estrechamente con la velocidad de almacenamiento rápida en las instancias con hardware dedicado puede disminuir la cantidad de tiempo necesario para configurar RAID.

Utilice el siguiente comando para aumentar el valor de límite de velocidad:

$ sysctl -w dev.raid.speed_limit_max=10000000

Opción 1: Cree un único dispositivo RAID 6 en todos los nueve dispositivos

Esta matriz es redundante, funciona correctamente, sobrevive al fallo de los dos dispositivos y se expondrá como un LUN individual con información sobre 23,8 TB de espacio utilizable.

Utilice los comandos siguientes para crear un único dispositivo RAID 6 en todos los nueve dispositivos:

$ 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

Opción 2: Cree un RAID 10 de cuatro dispositivos y una matriz RAID 6 de cinco dispositivos

Estas matrices se exponen como dos LUN diferentes en sus aplicaciones. Esta es una opción recomendada cuando debe aislar un tipo de E/S de otro, como los archivos de datos y log. En este ejemplo, su matriz RAID 10 tendría aproximadamente 6,4 TB de espacio utilizable y la matriz RAID 6 unos 9,6 TB.

Utilice los comandos siguientes para crear un RAID 10 de cuatro dispositivos y una matriz RAID 6 de cinco dispositivos:

$ 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

Opción 3: Cree una matriz RAID 10 de ocho dispositivos

Si necesita el mejor rendimiento posible y puede sacrificar parte de su espacio disponible, una matriz RAID 10 de ocho dispositivos es una opción. Dado que RAID 10 requiere un número par de dispositivos, el noveno se deja fuera de la matriz y sirve como disco de reserva por si otro dispositivo falla. Esto crea un solo LUN con aproximadamente 12,8 TB de espacio utilizable.

Utilice los comandos siguientes para crear una matriz RAID 10 de ocho dispositivos:

$ 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

El comando siguiente agrega /dev/nvme8n como disco de reserva para la matriz /dev/md0:

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

Opción 4: Cree dos matrices RAID 10 de cuatro dispositivos

Para obtener un mejor rendimiento y aislamiento de E/S posibles en LUN, cree dos matrices RAID 10 de cuatro dispositivos. Debido a que RAID 10 requiere un número par de dispositivos, el noveno se deja fuera de las matrices y sirve como disco de reserva global por si otro dispositivo falla en la matriz. Esto crea dos LUN, cada uno con aproximadamente 6,4 TB de espacio utilizable.

Utilice los comandos siguientes para crear dos matrices RAID 10 de cuatro dispositivos con un disco de reserva 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

Para crear un disco de reserva global se deben realizar los dos pasos siguientes:

  1. Agregue la reserva a cualquier matriz (no importa cuál) ejecutando estos comandos:

    $ sudo mdadm /dev/md0 --add /dev/nvme8n1
    $ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf >> /dev/null
  2. Edite /etc/mdadm para colocar las dos matrices en el mismo grupo de reservas. Agregue spare-group=global al final de la línea que comienza por ARRAY, de la siguiente manera:

    $ 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

Supervisión de la matriz

Es importante que se le notifique si un dispositivo de una de las matrices falla. Mdadm tiene herramientas incorporadas que se pueden utilizar para la supervisión y hay dos opciones que puede utilizar:

  • Defina la opción MAILADDR en /etc/mdadm.conf y, a continuación, ejecute la supervisión mdadm como un daemon
  • Ejecute una secuencia de comandos externa cuando mdadm detecte un fallo

Defina la opción MAILADDR en /etc/mdadm.conf y ejecute la supervisión mdadm como un daemon

El método más simple consiste en definir la opción MAILADDR en /etc/mdadm.conf y, a continuación, ejecutar la supervisión mdadm como un daemon, de la siguiente manera:

  1. La línea DEVICE partitions es necesaria para que MAILADDR funcione; si no aparece, debe agregarla de la siguiente forma:

    $ sudo vi /etc/mdadm.conf
    DEVICE partitions     
    ARRAY /dev/md0 level=raid1 UUID=1b70e34a:2930b5a6:016we78d:eese14532
    MAILADDR <my.name@example.com>
  2. Ejecute la supervisión con el comando siguiente:

    $ sudo nohup mdadm –-monitor –-scan –-daemonize &
  3. Para verificar que la supervisión se ejecuta al iniciar, ejecute los comandos siguientes:

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

    Agregue la línea siguiente al final de /etc/rc.local:

    nohup mdadm –-monitor –-scan –-daemonize &
  4. Para verificar que el correo electrónico y la supervisión estén funcionando, ejecute el comando siguiente:

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

    Tenga en cuenta que estos correos electrónicos probablemente se marcarán como correo no deseado. La opción PROGRAM, que se describe más adelante en este tema, permite recibir alertas y mensajes más sofisticados.

Ejecutar una secuencia de comandos externa cuando se detecta un fallo

Una opción más avanzada es crear una secuencia de comandos externa para que se ejecute si la supervisión mdadm detecta un fallo. Debe integrar este tipo de secuencia de comandos con la solución de supervisión existente. A continuación, se muestra un ejemplo de este tipo de secuencia de comandos:

$ 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

A continuación, agregue la opción PROGRAM a /etc/mdadm.conf, como se muestra en el ejemplo siguiente:

  1. La línea DEVICE partitions es necesaria para que MAILADDR funcione; si no aparece, debe agregarla de la siguiente forma:

    $ 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. Ejecute la supervisión con el comando siguiente:

    $ sudo nohup mdadm –-monitor –-scan –-daemonize &
  3. Para verificar que la supervisión se ejecuta al iniciar, ejecute los comandos siguientes:

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

    Agregue la línea siguiente al final de /etc/rc.local:

    nohup mdadm –-monitor –-scan –-daemonize &
  4. Para verificar que el correo electrónico y la supervisión estén funcionando, ejecute el comando siguiente:

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

    Tenga en cuenta que estos correos electrónicos probablemente se marcarán como correo no deseado. La opción PROGRAM, que se describe más adelante en este tema, permite recibir alertas y mensajes más sofisticados.

Simular el fallo de un dispositivo

Puede utilizar mdadm para hacer que un dispositivo falle manualmente y comprobar si la matriz RAID puede sobrevivir al fallo, además de probar las alertas que ha configurado.

  1. En la matriz, marque un dispositivo como fallido ejecutando el comando siguiente:

    $ sudo mdadm /dev/md0 --fail /dev/nvme0n1
  2. Puede que la recuperación del dispositivo o su matriz no esté protegida. Utilice el comando siguiente:

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

    La matriz se recreará automáticamente para utilizar el dispositivo "nuevo". El rendimiento se reducirá durante este proceso.

  3. Puede supervisar el estado de recreación ejecutando el comando siguiente:

    $ sudo mdadm --detail /dev/md0

Qué debe hacer cuando un dispositivo NVMe falla

Los recursos informáticos en la nube están diseñados para ser temporales y fungibles. Si un dispositivo NVMe falla mientras la instancia está en servicio, debe iniciar otra instancia con la misma cantidad de almacenamiento o más y, a continuación, copiar los datos en la nueva instancia, reemplazando la instancia anterior. Existen varios juegos de herramientas para copiar grandes cantidades de datos, siendo rsync el más popular. Como la conectividad entre instancias es de un 10 Gb/s completo, la copia de datos debe ser rápida. Recuerde que con un dispositivo fallido, es posible que la matriz ya no esté protegida, por lo que debe copiar los datos de la instancia afectada lo antes posible.

Uso del gestor de volúmenes lógicos de Linux

El Gestor de volúmenes lógicos (LVM) de Linux proporciona un conjunto completo de funciones para gestionar volúmenes. Si necesita estas funciones, se recomienda utilizar mdadm como se describe en las secciones anteriores de este tema para crear las matrices RAID y, a continuación, utilizar los comandos pvcreate, vgcreate y lvcreate de LVM para crear volúmenes en los LUN mdadm. No debe utilizar LVM directamente contra sus dispositivos NVMe.

Protección contra la pérdida de la instancia o el dominio de disponibilidad

Una vez que sus datos estén protegidos contra la pérdida de un dispositivo NVMe, debe protegerlo contra la pérdida de una instancia o la pérdida del dominio de disponibilidad. Este tipo de protección se suele realizar mediante la replicación de los datos en otro dominio de disponibilidad o realizando una copia de seguridad de los datos en otra ubicación. El método que seleccione depende de los objetivos. Para obtener más información, consulte los conceptos de recuperación ante desastres: objetivo de tiempo de recuperación (RTO) y objetivo de punto de recuperación (RPO).

Replicación

La replicación de sus datos de una instancia de un dominio de disponibilidad a otro tiene el RTO y el RPO más bajos a un costo significativamente más alto que las copias de seguridad; para cada una de las instancias de un dominio de disponibilidad, debe tener otra instancia en un dominio de disponibilidad diferente.

Para las cargas de trabajo de la base de datos Oracle, debe usar la funcionalidad incorporada Oracle Data Guard para replicar sus bases de datos. Los dominios de disponibilidad de Oracle Cloud Infrastructure están lo suficientemente cerca el uno del otro para soportar la replicación síncrona de alto rendimiento. La replicación asíncrona también es una opción.

Para la replicación de bloques de uso general, DRBD es la opción recomendada. Puede configurar DRBD para replicar, de forma síncrona o asíncrona, cada escritura de un dominio de disponibilidad a otro dominio de disponibilidad.

Copias de seguridad

Las copias de seguridad tradicionales son otra forma de proteger los datos. Todos los productos de copia de seguridad comerciales están totalmente soportados en Oracle Cloud Infrastructure. Si usa copias de seguridad, el RTO y RPO son significativamente más altos que el uso de la replicación porque debe recrear los recursos informáticos que fallaron y luego restaurar la copia de seguridad más reciente. Los costos son significativamente inferiores porque no necesita mantener una segunda instancia. No almacene sus copias de seguridad en el mismo dominio de disponibilidad que su instancia original.

Protección contra daños o pérdida de datos por error de aplicación o usuario

Las dos formas recomendadas de protección contra daños o pérdida de datos por error de aplicación o usuario son tomar instantáneas o crear copias de seguridad con regularidad.

Instantáneas

Las dos formas más fáciles de mantener las instantáneas son usar un sistema de archivos que soporte instantáneas, como ZFS, o usar LVM para crear y gestionar las instantáneas. Debido a la forma en que LVM ha implementado la copia durante la escritura (COW), el rendimiento puede disminuir significativamente cuando se toma una instantánea usando LVM.

Copias de seguridad

Todos los productos de copia de seguridad comerciales están totalmente soportados en Oracle Cloud Infrastructure. Asegúrese de que las copias de seguridad se almacenan en un dominio de disponibilidad diferente de la instancia original.