Oracle Cloud Infrastructureドキュメント

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

Oracle Cloud Infrastructureのインスタンスの一部には、ローカルにアタッチされたNVMeデバイスが含まれています。 これらのデバイスは、ビッグ・データ、OLTP、および高性能ブロック・ストレージの恩恵を受けることができる他のあらゆるワークロードに最適な、非常に低い遅延、高性能のブロック・ストレージを提供します。

これらのデバイスはどのような方法でも保護されていないことに注意してください。それらは、インスタンスにローカルにインストールされた個々のデバイスです。 Oracle Cloud Infrastructureは、イメージを取ったり、バックアップしたり、RAIDなどのメソッドを使ってNVMeデバイスのデータを保護しません。 これらのデバイスのデータの耐久性を保護し、管理するのはお客様の責任です。

Oracle Cloud Infrastructureは、冗長性を持ち、API呼び出しを使用してバックアップできる高性能リモート・ブロック(iSCSI)LUNを提供します。 詳細については、「ブロック・ボリュームの概要」を参照してください。

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

インスタンス上のNVMeデバイスの検索

lsblkコマンドを使用すると、NVMeデバイスを識別できます。 レスポンスはリストを返します。 NVMeデバイスは、BM.DenseIO1.36インスタンスの次の例に示すように、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 1アレイを示しています。

  • RAID 10: 複数のミラー・リングされたペア間でデータをストライプします。 各ミラーリングされたペアの1つのディスクが機能している限り、次のようにデータを取得できます:
  • このイメージは、ブロックがミラー化されストライプ化されたRAID 10アレイを示しています。

  • RAID 6: 図のように、すべてのメンバー・ディスクに分散された2つのパリティ・ブロックによるブロック・レベルのストライピング。
  • このイメージはRaid 6配列を示しています。

RAIDとRAIDレベルの詳細については、RAIDを参照してください。

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

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

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

9台すべてのデバイスに1台のRAID 6デバイスを作成します。 このアレイは冗長性があり、優れたパフォーマンスを発揮し、2台のデバイスの障害から生き残り、使用可能なスペースが約23.8TBの単一のLUNとして公開されます。

次のコマンドを使用して、9台のデバイスすべてに1台の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

4つのデバイスRAID 10と5つのデバイスRAID 6アレイを作成します。 これらのアレイは、2つの異なるLUNとしてアプリケーションに公開されます。 これは、ログおよびデータファイルなど、あるタイプの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

最高のパフォーマンスが必要で、使用可能なスペースの一部を犠牲にすることができる場合、8デバイスのRAID 10アレイがオプションです。 RAID 10には偶数のデバイスが必要なため、9番目のデバイスはアレイから除外され、別のデバイスが故障した場合のホット・スペアとして機能します。 これにより、約12.8 TBの使用可能な領域を持つ単一の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

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

グローバル・ホット・スペアを使用して2つの4デバイスRAID 10アレイを作成するには、次のコマンドを使用します:

$ 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を編集して、両方のアレイを同じスペア・グループに配置します。 次のように、ARRAYで始まる行の末尾にspare-group=globalを追加します:

    $ 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モニターを実行

最も簡単なメソッドは、/etc/mdadm.confMAILADDRオプションを設定し、次のようにmdadmモニターをデーモンとして実行することです:

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

    $ sudo vi /etc/mdadm.conf
    DEVICE partitions     
    ARRAY /dev/md0 level=raid1 UUID=1b70e34a:2930b5a6:016we78d:eese14532
    MAILADDR <my.name@oracle.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. MAILADDRが動作するためには、DEVICE partitions行が必要です。不足している場合は、次のように追加する必要があります:

    $ sudo vi /etc/mdadm.conf
    DEVICE partitions     
    ARRAY /dev/md0 level=raid1 UUID=1b70e34a:2930b5a6:016we78d:eese14532
    MAILADDR <my.name@oracle.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. 次のコマンドを実行して、アレイ内のデバイスをfailedとしてマークします:

    $ 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論理ボリューム・マネージャの使用

Linuxの「論理ボリューム・マネージャ(LVM)」は、ボリュームを管理するための豊富な機能を提供します。 これらの機能が必要な場合は、このトピックの前のセクションで説明したようにmdadmを使用してRAIDアレイを作成し、次にLVM pvcreatevgcreate、およびlvcreateコマンドを使用してmdadm LUNにボリュームを作成することを強くお勧めします。 NVMeデバイスに対してLVMを直接使用しないでください。

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

データがNVMeデバイスの損失から保護されたら、インスタンスの損失や「可用性ドメイン」の損失からデータを保護する必要があります。 このタイプの保護は、通常、データを別の「可用性ドメイン」に複製するか、データを別のロケーションにバックアップすることによって行われます。 選択するメソッドは、目的によって異なります。 詳細は、「リカバリ時間目標」 (RTO)および「リカバリ・ポイント目的」 (RPO)を参照してください。

レプリケーション

1つの「可用性ドメイン」内の1つのインスタンスから別のインスタンスにデータをレプリケートすると、RTOとRPOがバックアップよりも大幅に高くなります。1つの「可用性ドメイン」内のインスタンスごとに、別のインスタンスを別の「可用性ドメイン」に置く必要があります。

Oracleデータベースのワークロードの場合、組み込みのOracle Data Guard機能を使用してデータベースを複製する必要があります。 Oracle Cloud Infrastructure 「可用性ドメイン」は、パフォーマンスの高い同期レプリケーションをサポートするために、それぞれ互いに十分接近しています。 非同期レプリケーションもオプションです。

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

バックアップ

従来のバックアップは、データを保護する別の方法です。 すべての商用バックアップ製品は、Oracle Cloud Infrastructureで完全にサポートされています。 バックアップを使用する場合は、失敗したコンピューティング・リソースを再作成してから最新のバックアップをリストアする必要があるため、RTOとRPOはレプリケーションを使用するよりも大幅に高くなります。 2番目のインスタンスを維持する必要がないため、コストが大幅に削減されます。 オリジナルのインスタンスと同じ「可用性ドメイン」にバックアップを保存しないでください。

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

データ破損やアプリケーションやユーザーのエラーからの保護から保護する2つの推奨方法は、定期的にスナップショットを作成したり、バックアップを作成することです。

スナップショット

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

バックアップ

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