Protegendo Dados em Dispositivos NVMe

Algumas formas  de instâncias de computação no Oracle Cloud Infrastructure incluem dispositivos NVMe anexados localmente. Esses dispositivos fornecem latência extremamente baixa, armazenamento em blocos de alto desempenho que é ideal para big data, OLTP e qualquer outra carga de trabalho que possa se beneficiar do armazenamento em blocos de alto desempenho.

Cuidado

Os dispositivos NVMe não são protegidos de forma alguma; eles são dispositivos individuais instalados localmente na sua instância. O Oracle Cloud Infrastructure não usa imagens, faz backup ou usa RAID ou qualquer outro método para proteger os dados em dispositivos NVMe. Cabe a você proteger e gerenciar a durabilidade dos dados nesses dispositivos.

O Oracle Cloud Infrastructure oferece LUNs de bloco remoto de alto desempenho (iSCSI) que são redundantes e podem ser submetidas a backup usando uma chamada de API. Consulte Visão Geral do Serviço Block Volume para obter mais informações.

Para obter informações sobre quais formas suportam armazenamento NVMe local, consulte Formas de Computação.

Localizando os dispositivos NVMe em sua instância

Você pode identificar os dispositivos NVMe usando o comando lsblk. A resposta retorna uma lista. Os dispositivos NVMe começam com "nvme", conforme mostrado no exemplo a seguir para uma instância 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 Falha e como Proteger-se contra Eles

Proteção contra a Falha de um Dispositivo NVMe

Um array RAID protegido é a forma mais recomendada de proteção contra uma falha no dispositivo NVMe. Há três níveis de RAID que podem ser usados na maioria das cargas de trabalho:

  • RAID 1: Uma cópia exata (ou espelho) de um conjunto de dados em dois ou mais discos; um par espelhado RAID 1 clássico contém dois discos, conforme mostrado:

    Esta imagem mostra um array RAID 1.

  • RAID 10: Segmenta dados de vários pares espelhados. Contanto que um disco em cada par espelhado esteja funcional, os dados poderão ser recuperados, conforme mostrado:

    Esta imagem mostra um array RAID 10, com blocos espelhados e segmentados.

  • RAID 6: Segmentação em nível de bloco com dois blocos de paridade distribuídos em todos os discos membros, conforme mostrado.

    Esta imagem mostra um array Raid 6.

Para obter mais informações sobre RAID e níveis de RAID, consulte RAID.

Como o nível de RAID apropriado é uma função do número de unidades disponíveis, o número de LUNs individuais necessários, a quantidade de espaço necessária e os requisitos de desempenho, não há uma única opção correta. Você deve entender sua carga de trabalho e fazer seu projeto corretamente.

Importante

Se você estiver particionando ou formatando seu disco como parte desse processo e a unidade tiver mais de 2 TB, crie uma Tabela de Partição de GUID (GPT). Se você quiser criar uma GPT, use parted em vez do comando fdisk. Para obter mais informações, consulte Sobre Partições de Disco no Guia do Administrador do Oracle Linux.

Opções para Usar uma Forma BM.DenseIO1.36

Há várias opções para instâncias BM.DenseIO1.36 com nove dispositivos NVMe.

Para todas as opções abaixo, você pode opcionalmente aumentar o valor limite de velocidade de ressincronização do RAID padrão. O aumento desse valor para corresponder mais de perto à velocidade de armazenamento rápido nas instâncias bare metal pode diminuir o tempo necessário para configurar o RAID.

Use o seguinte comando para aumentar o valor limite de velocidade:

$ sysctl -w dev.raid.speed_limit_max=10000000

Opção 1: Criar um único dispositivo RAID 6 entre os nove dispositivos

Esse array é redundante, tem bom desempenho, sobrevive à falha de quaisquer dois dispositivos e será exposto como um único LUN com cerca de 23.8 TB de espaço utilizável.

Use os seguintes comandos para criar um único dispositivo RAID 6 em todos os nove 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

Opção 2: Crie um RAID 10 de quatro dispositivos e um array de RAID 6 de cinco dispositivos

Esses arrays seriam expostos como dois LUNs diferentes para seus aplicativos. Esta é uma opção recomendada quando você precisa isolar um tipo de Entrada/Saída de outro, como log e arquivos de dados. Neste exemplo, seu array RAID 10 teria cerca de 6.4 TB de espaço utilizável e o array RAID 6 teria cerca de 9.6 TB de espaço utilizável.

Use os seguintes comandos para criar um RAID 10 de quatro dispositivos e um array de 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

Opção 3: Criar um array RAID 10 de oito dispositivos

Se você precisar do melhor desempenho possível e puder sacrificar um pouco de seu espaço disponível, então um array de RAID 10 de oito dispositivos é uma opção. Como o RAID 10 requer um número par de dispositivos, o nono dispositivo permanece fora do array e serve como um disco de reserva, caso outro dispositivo falhe. Isso cria um único LUN com mais de 12.8 TB de espaço utilizável.

Use os seguintes comandos para criar um array RAID 10 com oito 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

O seguinte comando adiciona /dev/nvme8n como um disco de reserva para o array /dev/md0:

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

Opção 4: Criar dois arrays RAID 10 de quatro dispositivos

Para obter o melhor desempenho e isolamento de Entrada/Saída possíveis entre LUNs, crie dois arrays RAID 10 de quatro dispositivos. Como o RAID 10 requer um número par de dispositivos, o nono dispositivo permanece fora dos arrays e serve como um disco de reserva global, caso outro dispositivo de qualquer array falhe. Essa medida cria dois LUNS, cada um com cerca de 6.4 TB de espaço utilizável.

Use os seguintes comandos para criar dois arrays RAID 10 de quatro dispositivos com um 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

A criação de um disco de reserva global requer as duas etapas a seguir:

  1. Adicione o disco de reserva a qualquer array (não importa qual) executando estes 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 os dois arrays no mesmo grupo de reserva. Adicione spare-group=global ao final da linha que começa com ARRAY, da seguinte forma:

    $ 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

Monitorando Seu Array

É importante que você seja notificado se um dispositivo em um de seus arrays falhar. Mdadm tem ferramentas incorporadas que podem ser utilizadas para monitoramento e há duas opções que podem ser usadas:

  • Defina a opção MAILADDR no /etc/mdadm.conf e, em seguida, execute o monitor mdadm como um daemon
  • Executar um script externo quando mdadm detectar uma falha

Defina a opção MAILADDR em /etc/mdadm.conf e execute o monitor mdadm como um daemon

O método mais simples é definir a opção MAILADDR em /etc/mdadm.conf e, em seguida, executar o mdadm monitor como um daemon, como se segue:

  1. A linha DEVICE partitions é necessária para que MAILADDR funcione; se estiver faltando, você deve adicioná-la da seguinte forma:

    $ sudo vi /etc/mdadm.conf
    DEVICE partitions     
    ARRAY /dev/md0 level=raid1 UUID=1b70e34a:2930b5a6:016we78d:eese14532
    MAILADDR <my.name@example.com>
  2. Execute o monitor usando o seguinte comando:

    $ sudo nohup mdadm –-monitor –-scan –-daemonize &
  3. Para verificar se o monitor é executado na inicialização, execute os seguintes comandos:

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

    Adicione a seguinte linha ao final de /etc/rc.local:

    nohup mdadm –-monitor –-scan –-daemonize &
  4. Para verificar se o e-mail e o monitor estão ambos funcionando, execute o seguinte comando:

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

    Observe que esses e-mails provavelmente serão marcados como spam. A opção PROGRAM, descrita posteriormente neste tópico, permite alertas e mensagens mais sofisticados.

Executar um script externo quando uma falha for detectada

Uma opção mais avançada é criar um script externo que seria executado se o monitor mdadm detectar uma falha. Você integraria este tipo de script à sua solução de monitoramento existente. Veja a seguir um exemplo desse tipo 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

Em seguida, adicione a opção PROGRAM a /etc/mdadm.conf, conforme mostrado no exemplo a seguir:

  1. A linha DEVICE partitions é necessária para que MAILADDR funcione; se estiver faltando, você deve adicioná-la da seguinte 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. Execute o monitor usando o seguinte comando:

    $ sudo nohup mdadm –-monitor –-scan –-daemonize &
  3. Para verificar se o monitor é executado na inicialização, execute os seguintes comandos:

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

    Adicione a seguinte linha ao final de /etc/rc.local:

    nohup mdadm –-monitor –-scan –-daemonize &
  4. Para verificar se o e-mail e o monitor estão ambos funcionando, execute o seguinte comando:

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

    Observe que esses e-mails provavelmente serão marcados como spam. A opção PROGRAM, descrita posteriormente neste tópico, permite alertas e mensagens mais sofisticados.

Simular a falha de um dispositivo

Você pode usar mdadm para causar manualmente uma falha de um dispositivo para ver se seu array RAID pode sobreviver à falha, bem como testar os alertas que você configurou.

  1. Marque um dispositivo no array como defeituoso executando o seguinte comando:

    $ sudo mdadm /dev/md0 --fail /dev/nvme0n1
  2. Recupere o dispositivo ou seu array pode não ser protegido. Use o seguinte comando:

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

    Seu array será recriado automaticamente para usar o dispositivo "novo". O desempenho será reduzido durante esse processo.

  3. Você pode monitorar o status da recriação executando o seguinte comando:

    $ sudo mdadm --detail /dev/md0

O Que Fazer Quando um Dispositivo NVMe Falhar

Os recursos do serviço Compute na nuvem foram projetados como temporários e de fácil substituição. Se um dispositivo NVMe falhar enquanto a instância estiver em serviço, você deverá iniciar outra instância com o mesmo volume de armazenamento ou mais e depois copiar os dados para a nova instância, substituindo a instância antiga. Há vários conjuntos de ferramentas para copiar grandes volumes de dados, sendo que o rsync é o mais popular. Como a conectividade entre instâncias é do tipo 10 Gb/s completo, a cópia de dados deve ser rápida. Lembre-se de que, com um dispositivo com falha, seu array não poderá mais ser protegido; portanto, você deverá copiar os dados da instância afetada o mais rápido possível.

Usando o Linux Logical Volume Manager

O Linux Logical Volume Manager (LVM) fornece um amplo conjunto de recursos para gerenciamento de volumes. Se precisar desses recursos, recomendamos enfaticamente que você use mdadm conforme descrito nas seções anteriores deste tópico para criar os arrays RAID e, em seguida, use os comandos pvcreate, vgcreate e lvcreate do LVM para criar volumes nos LUNs mdadm. Você não deve usar o LVM diretamente em seus dispositivos NVMe.

Protegendo-se contra a Perda da Instância ou do Domínio de Disponibilidade

Depois que seus dados estiverem protegidos contra a perda de um dispositivo NVMe, você precisa protegê-los contra a perda de uma instância ou a perda do domínio de disponibilidade. Esse tipo de proteção é normalmente feito replicando seus dados para outro domínio de disponibilidade ou fazendo backup de seus dados para outro local. O método escolhido depende dos seus objetivos. Para obter detalhes, consulte os conceitos de recuperação de desastre de RTO (Recovery Time Objective) e RPO (Recovery Point Objective).

Replicação

A replicação de seus dados de uma instância em um domínio de disponibilidade para outra tem o RTO e RPO mais baixo a um custo significativamente mais alto do que backups; para cada instância em um domínio de disponibilidade, você deve ter outra instância em um domínio de disponibilidade diferente.

Para cargas de trabalho de banco de dados Oracle, você deve usar a funcionalidade Oracle Data Guard incorporada para replicar seus bancos de dados. Os domínios de disponibilidade do Oracle Cloud Infrastructure estão um próximos um ao outro o suficiente para suportar replicação síncrona e de alto desempenho. A replicação assíncrona também é uma opção.

Para replicação de bloco de finalidade geral, DRBD é a opção recomendada. Você pode configurar o DRBD para replicar, de forma síncrona ou assíncrona, cada gravação de um domínio de disponibilidade para outro domínio de disponibilidade.

Backups

Os backups tradicionais são outra forma de proteger os dados. Todos os produtos de backup comerciais são totalmente suportados no Oracle Cloud Infrastructure. Se você usar backups, o RTO e o RPO serão significativamente maiores que com o uso da replicação, pois você deve recriar os recursos de computação que falharam e depois restaurar o backup mais recente. Os custos são significativamente menores porque você não precisa manter uma segunda instância. Não armazene seus backups no mesmo domínio de disponibilidade que sua instância original.

Protegendo-se contra Corrompimento ou Perda de Dados em decorrência de Erro do Aplicativo ou do Usuário

As duas formas recomendadas de proteção contra corrupção ou perda de dados causadas por um erro de aplicativo ou do usuário são fazer snapshots regulares ou criar backups.

Snapshots

As duas formas mais fáceis de manter snapshots são usar um sistema de arquivos que suporte snapshots, como ZFS, ou usar o LVM para criar e gerenciar os snapshots. Devido à forma como o LVM implementou a cópia na gravação (COW), o desempenho pode ser significativamente reduzido quando um snapshot é obtido usando o LVM.

Backups

Todos os produtos de backup comerciais são totalmente suportados no Oracle Cloud Infrastructure. Certifique-se de que seus backups estejam armazenados em outro domínio de disponibilidade da instância original.