NVMeデバイスでのデータの保護

Oracle Cloud Infrastructureの一部のコンピュート・インスタンス・シェイプには、ローカルにアタッチされたNVMeデバイスが含まれます。このようなデバイスによって、レイテンシが非常に低くパフォーマンスが高いブロック・ストレージがもたらされます。これは、ビッグ・データ、OLTP、および高パフォーマンス・ブロック・ストレージから利点を得るその他のあらゆるワークロードに適しています。

注意

NVMeデバイスは、インスタンスにローカルにインストールされた個別のデバイスで、いかなる方法でも保護されません。Oracle Cloud Infrastructureが、イメージの作成、バックアップ、またはRAIDや他の方法の使用によって、NVMeデバイス上のデータを保護することはありません。これらのデバイスのデータは、お客様の責任で、永続性を保護および管理してください。

Oracle Cloud Infrastructureでは、高パフォーマンスのリモート・ブロック(iSCSI) LUNが提供されます。これは冗長性がありAPI呼出しを使用してバックアップできます。詳細は、ブロック・ボリュームの概要を参照してください。

ローカルNVMeストレージをサポートしているシェイプの詳細は、「コンピュート・シェイプ」を参照してください。

インスタンス上のNVMeデバイスを探す

lsblkコマンドを使用して、NVMeデバイスを識別できます。レスポンスでリストが返されます。次のBM.DenseIO1.36インスタンスの例でわかるように、NVMeデバイスはnvmeで始まります:

[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 ~]$

障害モードとそれらに対する保護方法

NVMeデバイスの障害に対する保護

RAID配列の保護は、NVMeデバイスの障害に対する保護として最も強く推奨される方法です。3つのRAIDレベルがあり、ほとんどのワークロードで使用できます:

  • RAID 1: 2つ以上のディスク上にあるデータのセットの正確なコピー(すなわちミラー)。従来のRAID 1のミラー化されたペアには次のように2つのディスクが含まれます:

    この図はRAID 1配列を示しています。

  • RAID 10: 複数のミラー化されたペア間でデータをストライプ化します。ミラー化された各ペア内の1ディスクが機能していれば、次のようにデータを取り出すことができます:

    この図は、ブロックがミラー化およびストライプ化されたRAID 10配列を示しています。

  • RAID 6: 次の図に示すように、2つのパリティ・ブロックがすべてのメンバー・ディスクに分散したブロックレベルのストライプ化です:

    この図はRAID 6配列を示しています。

RAIDおよびRAIDレベルの詳細は、RAIDを参照してください

適切なRAIDレベルは、使用可能なドライブ数、必要な個々のLUNの数、必要な領域の容量、およびパフォーマンス要件に応じて決まるため、正しい選択は1つではありません。ワークロードを理解し、それに応じて設計する必要があります。

重要

このプロセスの一環としてディスクをパーティション化またはフォーマットしており、ドライブのサイズが2TBを超える場合は、GUIDパーティション表(GPT)を作成する必要があります。GPTを作成する場合は、fdiskコマンドではなくpartedを使用します。詳細は、『Oracle Linux管理者ガイド』のディスク・パーティションに関する項を参照してください。

BM.DenseIO1.36シェイプを使用するためのオプション

9つのNVMeデバイスを使用するBM.DenseIO1.36インスタンスには、いくつかのオプションがあります

次のすべてのオプションについて、必要に応じてRAID再同期制限速度のデフォルト値を増やすことができます。ベア・メタル・インスタンスの高速ストレージ速度により厳密に一致するようにこの値を大きくすると、RAIDの設定に必要な時間を短縮できます。

制限速度の値を増やすには、次のコマンドを使用します:

$ sysctl -w dev.raid.speed_limit_max=10000000

オプション1: 9つのデバイスすべてにまたがる1つのRAID 6デバイスを作成する

この配列には冗長性があり、パフォーマンスに優れ、どの2つのデバイスで障害が発生しても稼働し続けます。また、使用可能領域が約23.8TBの単一LUNとして公開されます。

次のコマンドを使用して、9つのデバイスすべてにまたがる単一のRAID 6デバイスを作成します:

$ 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

オプション2: 4デバイスのRAID 10と5デバイスのRAID 6配列を作成する

これらの配列は、2つの異なるLUNとしてアプリケーションに公開されます。ログとデータ・ファイルのように、特定のI/Oを別のI/Oから分離する必要がある場合は、この方法をお薦めします。この例では、RAID 10配列には使用可能領域が約6.4TB、RAID 6配列には使用可能領域が約9.6TBあります。

次のコマンドを使用して、4デバイスのRAID 10および5デバイスのRAID 6配列を作成します:

$ 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

オプション3: 8デバイスのRAID 10配列を作成する

可能な限り最高のパフォーマンスを必要であり、使用可能領域の一部を犠牲にすることができる場合は、8デバイスのRAID 10配列を選択できます。RAID 10では偶数個のデバイスが必要なため、9番目のデバイスを配列から除いて、別のデバイスで障害が発生した場合にホット・スペアとして使用します。これによって、使用可能領域が約12.8TBの単一LUNが作成されます。

次のコマンドを使用して、8デバイスのRAID 10配列を作成します:

$ 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

次のコマンドによって、/dev/nvme8nが/dev/md0配列のホット・スペアとして追加されます:

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

オプション4: 4デバイスのRAID 10配列を2つ作成する

可能な限り最高のパフォーマンスとLUNでのI/O分離を実現するには、4デバイスRAID 10配列を2つ作成します。RAID 10では偶数個のデバイスが必要なため、9番目のデバイスを配列から除いて、いずれかの配列の別のデバイスで障害が発生した場合にグローバル・ホット・スペアとして使用します。これによって、それぞれの使用可能領域が約6.4TBのLUNが2つ作成されます。

次のk万度を使用して、4デバイスのRAID 10配列を2つとグローバル・ホット・スペアを作成します:

$ 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

グローバル・ホット・スペアの作成には、次の2つのステップが必要です:

  1. 次のコマンドを実行して、どちらかの配列にスペアを追加します(どちらでもかまいません):

    $ sudo mdadm /dev/md0 --add /dev/nvme8n1
    $ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf >> /dev/null
  2. /etc/mdadmを編集して、両方の配列を同じspare-groupに含めます。次のように、spare-group=globalARRAYで始まる行の最後に追加します:

    $ 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

配列のモニタリング

いずれかの配列のデバイスで障害が発生した場合には、通知を受けることが重要です。mdadmには、モニタリングに使用できる組込みツールがあり、次の2つの方法を使用できます:

  • /etc/mdadm.confMAILADDRオプションを設定してからmdadmモニターをデーモンとして実行
  • mdadmで障害が検出されたときに外部スクリプトを実行

/etc/mdadm.confMAILADDRオプションを設定してからmdadmモニターをデーモンとして実行

最も簡単な方法は、次のようにMAILADDRオプションを/etc/mdadm.confに設定してから、mdadmモニターをデーモンとして実行することです:

  1. DEVICE partitions行はMAILADDRが作動するために必要です。これがない場合は、次のように追加する必要があります:

    $ sudo vi /etc/mdadm.conf
    DEVICE partitions     
    ARRAY /dev/md0 level=raid1 UUID=1b70e34a:2930b5a6:016we78d:eese14532
    MAILADDR <my.name@example.com>
  2. 次のコマンドを使用してモニターを実行します:

    $ sudo nohup mdadm –-monitor –-scan –-daemonize &
  3. 起動時にモニターが実行されることを確認するには、次のコマンドを実行します:

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

    /etc/rc.localの最後に次の行を追加します:

    nohup mdadm –-monitor –-scan –-daemonize &
  4. 電子メールとモニターの両方が実行されることを確認するには、次のコマンドを実行します:

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

    このような電子メールは、スパムとマークされる可能性が高いことに注意してください。このトピックの後半で説明するPROGRAMオプションを使用すると、洗練されたアラートやメッセージを作成することができます。

障害が検出されたときに外部スクリプトを実行

少し複雑な方法としては、mdadmモニターが障害を検出した場合に実行される外部スクリプトを作成します。このタイプのスクリプトは既存のモニタリング・ソリューションと統合できます。このタイプのスクリプトの例を次に示します:

$ 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

次に、例に示すようにPROGRAMオプションを/etc/mdadm.confに追加します:

  1. DEVICE partitions行はMAILADDRが作動するために必要です。これがない場合は、次のように追加する必要があります:

    $ 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. 次のコマンドを使用してモニターを実行します:

    $ sudo nohup mdadm –-monitor –-scan –-daemonize &
  3. 起動時にモニターが実行されることを確認するには、次のコマンドを実行します:

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

    /etc/rc.localの最後に次の行を追加します:

    nohup mdadm –-monitor –-scan –-daemonize &
  4. 電子メールとモニターの両方が実行されることを確認するには、次のコマンドを実行します:

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

    このような電子メールは、スパムとマークされる可能性が高いことに注意してください。このトピックの後半で説明するPROGRAMオプションを使用すると、洗練されたアラートやメッセージを作成することができます。

デバイスの障害のシミュレート

mdadmを使用してデバイスの障害を手動で発生させて、RAID配列が稼働し続けられるかどうかを確認したり、設定したアラートをテストしたりすることができます。

  1. 次のコマンドを実行して、配列内のデバイスで障害が発生したとマークします:

    $ sudo mdadm /dev/md0 --fail /dev/nvme0n1
  2. デバイスをリカバリします。または、配列が保護されていない可能性があります。次のコマンドを使用します。

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

    配列が新しいデバイスを使用するように自動的に再構築されます。このプロセス中はパフォーマンスが低下します。

  3. 次のコマンドを実行して、再構築ステータスをモニターできます:

    $ sudo mdadm --detail /dev/md0

NVMeデバイスで障害が発生したときに何をするか

クラウドのコンピュート・リソースは、一時的かつ代替可能であるように設計されます。インスタンスの稼働中にNVMeデバイスに障害が発生した場合、同等以上の容量のストレージを持つ別のインスタンスを起動し、データを新しいインスタンスにコピーして、古いインスタンスを置き換える必要があります。大容量のデータをコピーするためのツールセットは複数ありますが、rsyncが最も一般的です。インスタンス間の接続速度は最大で10Gb/秒になり、データのコピーは迅速に行われます。障害の発生したデバイスでは配列が保護されなくなるため、影響を受けるインスタンスのデータをできるだけ早くコピーする必要があります。

Linux Logical Volume Managerの使用

Linux Logical Volume Manager (LVM)によって、ボリュームを管理するための豊富な機能が提供されます。これらの機能が必要な場合は、このトピックの前半の項で説明するようにmdadmを使用してRAID配列を作成し、LVMのpvcreatevgcreateおよびlvcreateコマンドを使用してmdadm LUNにボリュームを作成することを強くお薦めします。LVMをNVMeデバイスに対して直接使用しないでください。

インスタンスまたは可用性ドメインの損失に対する保護

NVMeデバイスの損失に対してデータを保護したら、インスタンスの損失または可用性ドメインの損失に対してデータを保護する必要があります。このタイプの保護は、通常、データを別の可用性ドメインにレプリケートするか、またはデータを別の場所にバックアップすることで実行します。選択する方法は、目的によって異なります。詳細は、リカバリ時間目標(RTO)およびリカバリ・ポイント目標(RPO)のディザスタ・リカバリの概念を参照してください。

レプリケーション

ある可用性ドメインのあるインスタンスのデータを別の可用性ドメインのインスタンスにレプリケートすると、RTOとRPOは最小になりますが、バックアップに比べてコストは非常に高くなります。1つの可用性ドメインのすべてのインスタンスについて、別の可用性ドメインに別のインスタンスを用意する必要があるためです。

Oracle Databaseのワークロードでは、組込みOracle Data Guard機能を使用してデータベースをレプリケートする必要があります。Oracle Cloud Infrastructure可用性ドメインは互いに十分近接しており、高パフォーマンスの同期レプリケーションがサポートされます。非同期レプリケーションという方法もあります。

汎用ブロック・レプリケーションではDRBDをお薦めします。1つの可用性ドメインへのすべての書込みを別の可用性ドメインに同期または非同期でレプリケートするようにDRBDを構成できます。

バックアップ

従来のバックアップは、データを保護するもう1つの方法です。市販のすべてのバックアップ製品は、Oracle Cloud Infrastructureで完全にサポートされます。バックアップを使用する場合、RTOおよびRPOはレプリケーションの使用より大幅に大きくなるため、障害が発生したコンピュート・リソースを再作成してから、最新のバックアップを復元する必要があります。2つ目のインスタンスを維持する必要がないため、コストは大幅に低下します。オリジナルのインスタンスと同じ可用性ドメインにバックアップを格納しないでください。

アプリケーションまたはユーザーのエラーによるデータ破損またはデータ損失に対する保護

アプリケーション・エラーやユーザー・エラーによるデータの破損や損失に対して保護する2つの方法としてお薦めするのは、スナップショットの作成とバックアップの作成です。

スナップショット

スナップショットを保持する最も簡単な2つの方法は、スナップショットをサポートするファイルシステム(ZFSなど)を使用する方法と、LVMを使用してスナップショットを作成および管理する方法です。LVMによるcopy-on-write (COW)の実装方法のため、LVMを使用してスナップショットを作成するとパフォーマンスは大幅に低下します。

バックアップ

市販のすべてのバックアップ製品は、Oracle Cloud Infrastructureで完全にサポートされます。バックアップが元のインスタンスとは異なる可用性ドメインに格納されていることを確認します。