13.5. iSCSI ベースのストレージプール

このセクションでは、iSCSI ベースのデバイスを使用してゲスト仮想マシンを格納する方法を説明します。
iSCSI (Internet Small Computer System Interface) とは、ストレージデバイスを共有するためのネットワークプロトコルです。iSCSI では、IP 層全体で SCSI の指示を使用してイニシエーター (ストレージクライアント) をターゲット (ストレージサーバー) に接続します。

13.5.1. ソフトウェア iSCSI ターゲットの設定

ソフトウェア支援の iSCSI ターゲットを作成できるツールは、scsi-target-utils パッケージで提供されます。

手順13.4 iSCSI ターゲットを作成します

  1. 必要なパッケージをインストールします

    scsi-target-utils パッケージおよび依存するすべてのパッケージをインストールします。
    # yum install scsi-target-utils
  2. tgtd サービスを起動します

    tgtd サービスは、ホスト物理マシンの SCSI ターゲットを提供し、ホスト物理マシンのターゲットに対して iSCSI プロトコルを使用します。tgtd サービスを起動してから、chkconfig コマンドで再起動すると、そのサービスを永続化することができます。
    # service tgtd start
    # chkconfig tgtd on
  3. オプション: LVM ボリュームを作成します

    LVM ボリュームは、iSCSI のバッキングイメージに役に立ちます。LVM のスナップショットやサイズ変更は、ゲスト仮想マシンにとって便利な機能です。この例では、iSCSI でゲスト仮想マシンをホストするために RAID5 アレイ上の virtstore という名前の新規ボリュームグループ上に virtimage1 という名前の LVM イメージを作成しています。
    1. RAID アレイを作成する

      ソフトウェア RAID5 アレイの作成については 『Red Hat Enterprise Linux 導入ガイド』 を参照してください。
    2. LVM ボリュームグループを作成する

      vgcreate コマンドを使用して virtstore という名前のボリュームグループを作成します。
      # vgcreate virtstore /dev/md1
    3. LVM 論理ボリュームを作成する

      lvcreate コマンドを使用して、 virtimage1 という名前の論理ボリュームグループを 20GB のサイズで virtstore ボリュームグループ上に作成します。
      # lvcreate --size 20G -n virtimage1 virtstore
      これで、新規論理ボリュームの virtimage1 を iSCSI に使用する準備が整いました。
  4. オプション: ファイルベースのイメージを作成します

    ファイルベースのストレージはテスト用としては十分ですが、実稼働環境や I/O アクティビティーが活発な環境には推奨できません。このオプションの手順では、iSCSI ターゲット用に virtimage2.img という名前のファイルベースイメージを作成します。
    1. イメージ用の新規のディレクトリーを作成する

      イメージを格納するための新規ディレクトリーを作成します。このディレクトリーには適切な SELinux コンテキストを設定する必要があります。
      # mkdir -p /var/lib/tgtd/virtualization
    2. イメージファイルを作成する

      virtimage2.img という名前のイメージを 10GB のサイズで作成します。
      # dd if=/dev/zero of=/var/lib/tgtd/virtualization/virtimage2.img bs=1M seek=10000 count=0
    3. SELinux ファイルコンテキストを設定する

      新規のイメージとディレクトリーに適切な SELinux コンテキストを設定します。
      # restorecon -R /var/lib/tgtd
      これで、新規のファイルベースのイメージ virtimage2.img を iSCSI に使用する準備が整いました。
  5. ターゲットを作成します

    ターゲットは、/etc/tgt/targets.conf ファイルに XML エントリーを追加することで作成できます。target 属性には IQN (iSCSI Qualified Name) が必要になります。IQN は以下の形式になります。
    iqn.yyyy-mm.reversed domain name:optional identifier text
    ここで、
    • yyyy-mm は、デバイスが起動された年と月を示します (例: 2010-05)。
    • reversed domain name は、ホスト物理マシンの逆になったドメイン名 (たとえば、IQN の server1.example.com の場合は com.example.server1) です。
    • optional identifier text は、テキストの文字列になります。空白は入れません。管理者がデバイスやハードウェアの特定を行なう場合に便利です。
    この例では、オプションの手順で server1.example.com 上に作成した 2 種類のイメージ用に iSCSI ターゲットを作成し、オプションの識別子 trial を設定しています。以下の行を /etc/tgt/targets.conf ファイルに追加します。
    <target iqn.2010-05.com.example.server1:iscsirhel6guest>
       backing-store /dev/virtstore/virtimage1  #LUN 1
       backing-store /var/lib/tgtd/virtualization/virtimage2.img  #LUN 2
       write-cache off
    </target>
    ドライバータイプが iSCSI に設定されるよう、/etc/tgt/targets.conf ファイルに default-driver iscsi の行が含まれていることを確認してください。ドライバーはデフォルトで iSCSI を使用します。

    重要

    この例では、アクセス制御を持たないグローバルにアクセス可能なターゲットを作成します。安全なアクセスの実装に関しては、scsi-target-utils を参照してください。
  6. tgtd サービスを再起動します

    tgtd サービスを再起動して、設定の変更を再読み込みします。
    # service tgtd restart
  7. iptables の設定を行います

    iptables を使用して iSCSI アクセス用にポート 3260 を開きます。
    # iptables -I INPUT -p tcp -m tcp --dport 3260 -j ACCEPT
    # service iptables save
    # service iptables restart
  8. 新規のターゲットを確認します

    tgt-admin --show コマンドを使用して、新規ターゲットを表示させ、セットアップが正しく行なわれていることを確認します。
    # tgt-admin --show
    Target 1: iqn.2010-05.com.example.server1:iscsirhel6guest
    System information:
    Driver: iscsi
    State: ready
    I_T nexus information:
    LUN information:
    LUN: 0
        Type: controller
        SCSI ID: IET     00010000
        SCSI SN: beaf10
        Size: 0 MB
        Online: Yes
        Removable media: No
        Backing store type: rdwr
        Backing store path: None
    LUN: 1
        Type: disk
        SCSI ID: IET     00010001
        SCSI SN: beaf11
        Size: 20000 MB
        Online: Yes
        Removable media: No
        Backing store type: rdwr
        Backing store path: /dev/virtstore/virtimage1
    LUN: 2
        Type: disk
        SCSI ID: IET     00010002
        SCSI SN: beaf12
        Size: 10000 MB
        Online: Yes
        Removable media: No
        Backing store type: rdwr
        Backing store path: /var/lib/tgtd/virtualization/virtimage2.img
    Account information:
    ACL information:
    ALL

    警告

    ACL 一覧はすべて (all) にセットされています。これにより、ローカルネットワーク上のすべてのシステムがこのデバイスにアクセス可能になります。実稼働環境には、ホスト物理マシンのアクセス ACL を設定することが推奨されています。
  9. オプション: 検出テスト

    新規の iSCSI デバイスが検出可能かどうかを検証します。
    # iscsiadm --mode discovery --type sendtargets --portal server1.example.com
    127.0.0.1:3260,1 iqn.2010-05.com.example.server1:iscsirhel6guest
  10. オプション: デバイス接続テスト

    新規デバイス (iqn.2010-05.com.example.server1:iscsirhel6guest) を接続して、デバイスの接続が可能かどうかを検証します。
    # iscsiadm -d2 -m node --login
    scsiadm: Max file limits 1024 1024
    
    Logging in to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel6guest, portal: 10.0.0.1,3260]
    Login to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel6guest, portal: 10.0.0.1,3260] successful.
    デバイスを切り離します。
    # iscsiadm -d2 -m node --logout
    scsiadm: Max file limits 1024 1024
    
    Logging out of session [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel6guest, portal: 10.0.0.1,3260
    Logout of [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel6guest, portal: 10.0.0.1,3260] successful.
これで、iSCSI デバイスを仮想化に使用する準備が整いました。