14.11. 仮想マシンの SCSI3-Persistent Reservation の設定
SCSI3-Persistent Reservation (S3-PR) を使用することで、複数の仮想マシン (VM) が共有ストレージデバイスへのアクセスを調整できるようになります。これは、Pacemaker などの Linux クラスタリングソリューションや、Windows Server のフェイルオーバークラスタリングに必要です。
S3-PR を使用することで、仮想マシンはストレージデバイス上の永続的な予約を登録および管理できるようになり、複数の仮想マシンが同じストレージにアクセスする際の競合を防ぐことができます。
RHEL ホスト上で動作する仮想マシンでは、XML 設定ファイルを変更することで、シングルパスデバイスとマルチパスデバイスの両方に対して S3-PR を設定できます。
前提条件
ホストが以下のいずれかの CPU アーキテクチャーを使用している。
- Intel 64
- AMD64
- ARM 64
- ホストがサポートされている RHEL およびカーネルバージョンを使用している。詳細は、仮想マシンにおける SGIO サポートに必要な RHEL バージョン を参照してください。
- ストレージバックエンドが S3-PR をサポートしている。
- マルチパス化された仮想ディスク (vDisk) を使用する場合は、ホスト上でマルチパス設定が正しくセットアップされている。詳細は、Device Mapper Multipath の設定 を参照してください。
手順
仮想マシンの XML 設定を開きます。
# virsh edit <vm_name><devices>セクションに、VirtIO-SCSI コントローラーの行を追加します (まだない場合)。<controller type='scsi' model='virtio-scsi' index='0'/>仮想マシンの設定を編集して、S3-PR のサポートを有効にします。設定は、シングルパス vDisk を使用しているかマルチパス vDisk を使用しているかによって異なります。
マルチパスデバイスの場合は、
managed='yes'を指定したreservations要素をマルチパス化されたディスクデバイスに追加します。<disk type='block' device='lun'> <driver name='qemu' type='raw' cache='none'/> <source dev='/dev/mapper/mpatha'> <reservations managed='yes'/> </source> <target dev='sda' bus='scsi'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk>この例では、マルチパス化されたデバイス
/dev/mapper/mpathaが S3-PR をサポートするように設定されています。-
device='lun': これが SCSI 論理ユニット番号 (LUN) デバイスであることを示しています。これは、ブロックデバイスで S3-PR をサポートするために必要です。 -
reservations managed='yes': S3-PR サポートを有効にし、libvirtが永続予約ヘルパーを管理できるようにします。
-
シングルパスデバイスの場合、S3-PR サポートが必要なディスクデバイスに、
managed='yes'を指定したreservations要素を追加します。<disk type='block' device='lun'> <driver name='qemu' type='raw' cache='none'/> <source dev='/dev/sdb'> <reservations managed='yes'/> </source> <target dev='sda' bus='scsi'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk>この例では、以下が適用されます。
-
type='block': デバイスがブロックデバイスであることを指定します。 -
device='lun': これが SCSI 論理ユニット番号 (LUN) デバイスであることを示しています。これは、ブロックデバイスで S3-PR をサポートするために必要です。 -
<source dev='/dev/sdb'/>: ホストブロックデバイスのパスを指定します。デバイスノード (例:/dev/sdb) を直接使用することも、再起動後の永続性を高めるために/dev/disk/by-path/エントリーを使用することもできます。 -
<driver name='qemu' type='raw' cache='none'/>: 直接デバイスにアクセスするための raw 形式の QEMU ドライバーを指定します。 -
reservations managed='yes': S3-PR サポートを有効にし、libvirtが永続予約ヘルパーを管理できるようにします。 - このディスクは VirtIO-SCSI バスを使用します。これは S3-PR サポートに必要です。
-
XML 設定を保存して、仮想マシンを起動します。
# virsh start <vm_name>
検証
実行中の仮想マシンの XML 設定を表示することで、ホスト側の設定を確認できます。
# virsh dumpxml <vm_name>ディスクデバイス設定内にある
reservations managed='yes'という要素を探します。RHEL 仮想マシンでは、
sg3_utilsパッケージを使用して SCSI デバイスの永続予約機能を確認することもできます。RHEL 仮想マシンに
sg3_utilsパッケージをインストールします。# dnf install sg3_utilsSCSI デバイスの永続予約機能を確認します。
# sg_persist --in --report-capabilities /dev/sdaデバイスが S3-PR をサポートしている場合、出力は次のようになります。
LBP-2: 0 PTPL_C: 0 TMC: 0 [PTPL_A: 1] [PR_TYPE: 1, 3, 5]この例の
PTPL_A: 1は、デバイスが永続予約をサポートしていることを示しています。PR_TYPE: 1, 3, 5は、サポートされている予約タイプを示しています。