Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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

推奨事項
iSCSI (Internet Small Computer System Interface) は、ストレージデバイスを共有するネットワークプロトコルです。iSCSI は、IP 層で SCSI 命令を使用してイニシエーター (ストレージクライアント) をターゲット (ストレージサーバー) に接続します。
iSCSI ベースのデバイスを使用してゲスト仮想マシンを保存することで、iSCSI をブロックストレージデバイスとして使用するなど、より柔軟なストレージオプションが可能になります。iSCSI デバイスは、Linux-IO (LIO) ターゲットを使用します。これは、Linux 用のマルチプロトコル SCSI ターゲットです。LIO は、iSCSI に加えて、FCoE (Fibre Channel and Fibre Channel over Ethernet) にも対応します。
前提条件
iSCSI ベースのストレージプールを作成する前に、iSCSI ターゲットを作成する必要があります。iSCSI ターゲットは、targetcli パッケージを使用して作成されます。これは、ソフトウェアで対応している iSCSI ターゲットを作成するためのコマンドセットを提供します。

手順13.5 iSCSI ターゲットの作成

  1. targetcli パッケージのインストール

    # yum install targetcli
  2. targetcli コマンドセットの起動

    # targetcli
  3. ストレージオブジェクトの作成

    ストレージプールを使用して、3 つのストレージオブジェクトを作成します。
    1. ブロックストレージオブジェクトの作成
      1. /backstores/block ディレクトリーに移動します。
      2. create コマンドを実行します。
        # create [block-name][filepath]
        以下に例を示します。
        # create block1 dev=/dev/sdb1
    2. fileio オブジェクトの作成
      1. /fileio ディレクトリーに移動します。
      2. create コマンドを実行します。
        # create [fileio-name][image-name] [image-size]
        以下に例を示します。
        # create fileio1 /foo.img 50M
    3. ramdisk オブジェクトの作成
      1. /ramdisk ディレクトリーに移動します。
      2. create コマンドを実行します。
        # create [ramdisk-name] [ramdisk-size]
        以下に例を示します。
        # create ramdisk1 1M
    4. この手順で作成したディスクの名前を書き留めておきます。これらは後で使用されます。
  4. iSCSI ターゲットの作成

    1. /iscsi ディレクトリーに移動します。
    2. ターゲットの作成には、以下の 2 つの方法があります。
      • パラメーターを指定せずに create コマンドを実行します。
        iSCSI qualified name (IQN) は自動的に生成されます。
      • IQN とサーバーを指定して create コマンドを実行します。以下に例を示します。
        # create iqn.2010-05.com.example.server1:iscsirhel7guest
  5. ポータル IP アドレスの定義

    iSCSI 経由でブロックストレージをエクスポートするには、最初にポータル、LUN、および access control lists ACL を設定する必要があります。
    ポータルには、ターゲットが監視する IP アドレスと TCP、および接続するイニシエーターが含まれます。iSCSI はポート 3260 を使用します。このポートはデフォルトで設定されています。
    ポート 3260 への接続:
    1. /tpg ディレクトリーに移動します。
    2. 以下のコマンドを実行します。
      # portals/ create
      このコマンドを実行すると、ポート 3260 をリッスンしている利用可能な IP アドレスがすべて使用できるようになります。
      ポート 3260 をリッスンする IP アドレスを 1 つだけにする場合は、コマンドの末尾に IP アドレスを追加します。以下に例を示します。
      # portals/ create 143.22.16.33
  6. LUN の設定と、ストレージオブジェクトのファブリックへの割り当て

    この手順では、ストレージオブジェクトの作成 で作成したストレージオブジェクトを使用します。
    1. ポータルの IP アドレスの定義 で作成した TPG の luns ディレクトリーに移動します。以下に例を示します。
      # iscsi>iqn.iqn.2010-05.com.example.server1:iscsirhel7guest
    2. 最初の LUN を ramdisk に割り当てます。以下に例を示します。
      # create /backstores/ramdisk/ramdisk1
    3. 2 番目の LUN をブロックディスクに割り当てます。以下に例を示します。
      # create /backstores/block/block1
    4. 3 番目の LUN を fileio ディスクに割り当てます。以下に例を示します。
      # create /backstores/fileio/fileio1
    5. 作成される LUN の一覧を表示します。
      /iscsi/iqn.20...csirhel7guest ls
      
      o- tgp1 ............................................................[enabled, auth]
        o- acls...................................................................[0 ACL]
        o- luns..................................................................[3 LUNs]
        | o- lun0......................................................[ramdisk/ramdisk1]
        | o- lun1...............................................[block/block1 (dev/vdb1)]
        | o- lun2................................................[fileio/file1 (foo.img)]
        o- portals.............................................................[1 Portal]
          o- IP-ADDRESS:3260.........................................................[OK]
      
  7. 各イニシエーターの ACL の作成

    イニシエーターの接続時に認証を有効にします。指定した LUN を、指定したイニシエーターに制限することもできます。ターゲットとイニシエーターには一意の名前があります。iSCSI イニシエーターは IQN を使用します。
    1. イニシエーター名を使用して、iSCSI イニシエーターの IQN を検索します。以下に例を示します。
      # cat /etc/iscsi/initiator2.iscsi
      InitiatorName=create iqn.2010-05.com.example.server1:iscsirhel7guest
      この IQN は、ACL を作成するために使用されます。
    2. acls ディレクトリーへ移動します。
    3. 次のいずれかを実行して ACL を作成します。
      • パラメーターを指定せずに create コマンドを実行して、すべての LUN およびイニシエーターに ACL を作成します。
        # create
      • 特定の LUN およびイニシエーターに ACL を作成し、iSCSI インティエーターの IQN を指定して create コマンドを実行します。以下に例を示します。
        # create iqn.2010-05.com.example.server1:888
      • すべてのイニシエーターに 1 つのユーザー ID とパスワードを使用するように、カーネルターゲットを設定します。
        # set auth userid=user_ID
        # set auth password=password
        # set attribute authentication=1
        # set attribute generate_node_acls=1
    この手順を完了したら、ストレージプールをセキュリティー保護 して続行します。
  8. 設定を保存します。

    以前の起動設定を上書きして、設定を永続化します。
    # saveconfig
  9. サービスを有効にします。

    次回の起動時に保存した設定を適用するには、サービスを有効にします。
    # systemctl enable target.service
オプションの手順
iSCSI ベースのストレージプールを作成する前に、iSCSI ターゲットで実行できるオプションの手順が多数あります。

手順13.6 RAID アレイでの論理ボリュームの設定

  1. RAID5 アレイの作成

    RAID5 アレイの作成方法は、Red Hat Enterprise Linux 7 Storage Administration Guide を参照してください。
  2. RAID5 アレイに LVM 論理ボリュームを作成する

    RAID5 アレイで LVM 論理ボリュームを作成する方法は、Red Hat Enterprise Linux 7 Logical Volume Manager Administration Guide を参照してください。

手順13.7 検出可能性のテスト

  • 新しい iSCSI デバイスが検出可能であることを確認します。

    # iscsiadm --mode discovery --type sendtargets --portal server1.example.com
    143.22.16.33:3260,1 iqn.2010-05.com.example.server1:iscsirhel7guest

手順13.8 デバイスの接続のテスト

  1. 新しい iSCSI デバイスの接続

    新しいデバイス (iqn.2010-05.com.example.server1:iscsirhel7guest) を接続して、デバイスを接続できるかどうかを判断します。
    # iscsiadm -d2 -m node --login
    scsiadm: Max file limits 1024 1024
    
    Logging in to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260]
    Login to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260] successful.
    
  2. デバイスの取り外し

    # iscsiadm -d2 -m node --logout
    scsiadm: Max file limits 1024 1024
    
    Logging out of session [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260
    Logout of [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260] successful.

手順13.9 iSCSI ストレージプールで libvirt のシークレットを使用する

注記
この手順は、iSCSI ターゲットの作成 時に、user_ID および password が定義される場合に必要です。
ユーザー名とパスワードのパラメーターは、iSCSI ストレージプールを保護するため、virsh で設定できます。これは、プールを定義する前または後に設定できますが、認証設定を有効にするにはプールを起動する必要があります。
  1. libvirt の秘密ファイルを作成する

    チャレンジハンドシェイク認証プロトコル (CHAP) のユーザー名を使用して、libvirt シークレットファイルを作成します。以下に例を示します。
    <secret ephemeral='no' private='yes'>
        <description>Passphrase for the iSCSI example.com server</description>
        <usage type='iscsi'>
            <target>iscsirhel7secret</target>
        </usage>
    </secret>
  2. シークレットの定義

    # virsh secret-define secret.xml
  3. UUID の確認

    # virsh secret-list
    UUID                                  Usage
    --------------------------------------------------------------------------------
    2d7891af-20be-4e5e-af83-190e8a922360  iscsi iscsirhel7secret
  4. UID へのシークレットの割り当て

    以下のコマンドを使用して、前の手順の出力の UUID に、シークレットを割り当てます。これにより、CHAP ユーザー名とパスワードが、libvirt が制御するシークレット一覧にあることが保証されます。
    # MYSECRET=`printf %s "password123" | base64`
    # virsh secret-set-value 2d7891af-20be-4e5e-af83-190e8a922360 $MYSECRET
  5. ストレージプールに認証エントリーを追加します。

    virsh edit を使用して、ストレージプールの XML ファイル内の <source> エントリーを変更し、authentication typeusername、および secret usage を指定して <auth> 要素を追加します。
    以下に例を示します。
    <pool type='iscsi'>
      <name>iscsirhel7pool</name>
        <source>
           <host name='192.168.122.1'/>
           <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
           <auth type='chap' username='redhat'>
              <secret usage='iscsirhel7secret'/>
           </auth>
        </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>
    注記
    サブ要素 <auth> は、ゲスト XML 内の <pool> 要素および <disk> 要素の異なる場所に存在します。<pool> の場合は、<auth><source> 要素内に指定されます。認証は一部のプールソース (iSCSI および RBD) のプロパティーであるため、これはプールソースの検索場所を説明する要素となります。ドメインのサブ要素である <disk> の場合、iSCSI ディスクまたは RBD ディスクに対する認証は、ディスクのプロパティーになります。
    また、ディスクのサブ要素 <auth> は、ストレージプールのサブ要素とは異なります。
    <auth username='redhat'>
      <secret type='iscsi' usage='iscsirhel7secret'/>
    </auth>
  6. 変更を有効にします。

    この変更をアクティブにするには、ストレージプールを起動する必要があります。
    • ストレージプールが起動していない場合は、virsh を使用したストレージプールの作成 の手順に従ってストレージプールを定義し、起動します。
    • プールがすでに起動している場合は、次のコマンドを入力してストレージプールを停止し、再起動します。
      # virsh pool-destroy iscsirhel7pool
      # virsh pool-start iscsirhel7pool
パラメーター
以下の表は、iSCSI ベースのストレージプールを作成する場合に必要な、XML ファイル、virsh pool-define-as コマンド、および Virtual Machine Manager アプリケーションのパラメーターの一覧を示しています。

表13.5 iSCSI ベースのストレージプールパラメーター

説明XMLpool-define-asVirtual Machine Manager
ストレージプールのタイプ <pool type='iscsi'> [type] iscsi iscsi: iSCSI ターゲット
ストレージプールの名前 <name>name</name> [name] name 名前
ホストの名前。

<source>
  <host name='hostname' />

source-host hostname ホスト名
iSCSI IQN

  device path="iSCSI_IQN" />
</source>

source-dev iSCSI_IQN ソース IQN
ターゲットを指定するパス。ストレージプールに使用されるパスになります。

<target>
  <path>/dev/disk/by-path</path>
</target>

target path_to_pool ターゲットパス
(必要に応じて) iSCSI イニシエーターの IQN。これは、ACL が LUN を特定のイニシエーターに制限する場合に限り必要です。

<initiator>
  <iqn name='initiator0' />
</initiator>

以下の注記を参照してください。 イニシエーター IQN
注記
iSCSI イニシエーターの IQN は、virsh find-storage-pool-sources-as iscsi コマンドを使用して指定できます。
virsh を使用してストレージプールを作成する場合は、ストレージプールが作成されたことの確認 に進みます。
以下は、iSCSI ベースのストレージプールの XML ファイルの例になります。
<pool type='iscsi'>
  <name>iSCSI_pool</name>
  <source>
    <host name='server1.example.com'/>
    <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>

以下は、iSCSI ベースのストレージプールを作成するコマンドの例になります。
# virsh pool-define-as --name iSCSI_pool --type iscsi --source-host server1.example.com --source-dev iqn.2010-05.com.example.server1:iscsirhel7guest --target /dev/disk/by-path
Pool iSCSI_pool defined
以下の図は、iSCSI ベースのストレージプールを作成するための、仮想マシン XML 設定 Virtual Machine Manager の Add a New Storage Pool ダイアログボックスの例を示しています。

図13.8 新しい iSCSI ベースのストレージプールの例を追加します。

新しい iSCSI ベースのストレージプールの例を追加します。