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 ~]$
障害モードとそれらに対する保護方法
備えておく必要がある主な障害モードは3つあります:
NVMeデバイスの障害に対する保護
RAID配列の保護は、NVMeデバイスの障害に対する保護として最も強く推奨される方法です。3つのRAIDレベルがあり、ほとんどのワークロードで使用できます:
-
RAID 1: 2つ以上のディスク上にあるデータのセットの正確なコピー(すなわちミラー)。従来のRAID 1のミラー化されたペアには次のように2つのディスクが含まれます:
-
RAID 10: 複数のミラー化されたペア間でデータをストライプ化します。ミラー化された各ペア内の1ディスクが機能していれば、次のようにデータを取り出すことができます:
-
RAID 6: 次の図に示すように、2つのパリティ・ブロックがすべてのメンバー・ディスクに分散したブロックレベルのストライプ化です:
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つのステップが必要です:
-
次のコマンドを実行して、どちらかの配列にスペアを追加します(どちらでもかまいません):
$ sudo mdadm /dev/md0 --add /dev/nvme8n1
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf >> /dev/null
-
/etc/mdadm
を編集して、両方の配列を同じspare-groupに含めます。次のように、spare-group=global
をARRAY
で始まる行の最後に追加します:$ 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.conf
にMAILADDR
オプションを設定してからmdadm
モニターをデーモンとして実行mdadm
で障害が検出されたときに外部スクリプトを実行
/etc/mdadm.conf
にMAILADDR
オプションを設定してからmdadm
モニターをデーモンとして実行
最も簡単な方法は、次のようにMAILADDR
オプションを/etc/mdadm.conf
に設定してから、mdadmモニターをデーモンとして実行することです:
-
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>
-
次のコマンドを使用してモニターを実行します:
$ sudo nohup mdadm –-monitor –-scan –-daemonize &
-
起動時にモニターが実行されることを確認するには、次のコマンドを実行します:
$ sudo chmod +x /etc/rc.d/rc.local
$ sudo vi /etc/rc.local
/etc/rc.localの最後に次の行を追加します:
nohup mdadm –-monitor –-scan –-daemonize &
-
電子メールとモニターの両方が実行されることを確認するには、次のコマンドを実行します:
$ 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
に追加します:
-
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
-
次のコマンドを使用してモニターを実行します:
$ sudo nohup mdadm –-monitor –-scan –-daemonize &
-
起動時にモニターが実行されることを確認するには、次のコマンドを実行します:
$ sudo chmod +x /etc/rc.d/rc.local
$ sudo vi /etc/rc.local
/etc/rc.localの最後に次の行を追加します:
nohup mdadm –-monitor –-scan –-daemonize &
-
電子メールとモニターの両方が実行されることを確認するには、次のコマンドを実行します:
$ sudo mdadm --monitor --scan --test -1
このような電子メールは、スパムとマークされる可能性が高いことに注意してください。このトピックの後半で説明する
PROGRAM
オプションを使用すると、洗練されたアラートやメッセージを作成することができます。
デバイスの障害のシミュレート
mdadm
を使用してデバイスの障害を手動で発生させて、RAID配列が稼働し続けられるかどうかを確認したり、設定したアラートをテストしたりすることができます。
-
次のコマンドを実行して、配列内のデバイスで障害が発生したとマークします:
$ sudo mdadm /dev/md0 --fail /dev/nvme0n1
-
デバイスをリカバリします。または、配列が保護されていない可能性があります。次のコマンドを使用します。
$ sudo mdadm /dev/md0 --add /dev/nvme0n1
配列が新しいデバイスを使用するように自動的に再構築されます。このプロセス中はパフォーマンスが低下します。
-
次のコマンドを実行して、再構築ステータスをモニターできます:
$ sudo mdadm --detail /dev/md0
NVMeデバイスで障害が発生したときに何をするか
クラウドのコンピュート・リソースは、一時的かつ代替可能であるように設計されます。インスタンスの稼働中にNVMeデバイスに障害が発生した場合、同等以上の容量のストレージを持つ別のインスタンスを起動し、データを新しいインスタンスにコピーして、古いインスタンスを置き換える必要があります。大容量のデータをコピーするためのツールセットは複数ありますが、rsyncが最も一般的です。インスタンス間の接続速度は最大で10Gb/秒になり、データのコピーは迅速に行われます。障害の発生したデバイスでは配列が保護されなくなるため、影響を受けるインスタンスのデータをできるだけ早くコピーする必要があります。
Linux Logical Volume Managerの使用
Linux Logical Volume Manager (LVM)によって、ボリュームを管理するための豊富な機能が提供されます。これらの機能が必要な場合は、このトピックの前半の項で説明するようにmdadm
を使用してRAID配列を作成し、LVMのpvcreate
、vgcreate
および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で完全にサポートされます。バックアップが元のインスタンスとは異なる可用性ドメインに格納されていることを確認します。