ブロック・ボリュームをiSCSIでアタッチする


1. はじめに

ブロック・ボリュームのアタッチ方法(アタッチメント・タイプ)には「準仮想化(Paravirtualized)」と「iSCSI」がある。以前書いた「 OCI Computeでブロックボリュームをマウントする」では、手順が簡単な「準仮想化」を使用している。

しかし、マニュアル「Block Volume Performance」には「パフォーマンスSLAの対象になるのはiSCSIアタッチメントだけ」と書いてある。

Block Volume performance SLA for IOPS per volume and IOPS per instance applies to iSCSI volume attachments only, not to paravirtualized attachments.

以前テストしたときは、それほどパフォーマンスは変わらなかった。しかしながらSLAの条件なので、iSCSIについても説明する。

なお、もうひとつのパフォーマンス指標である帯域幅はシェイプに依存するので、アタッチメント・タイプとは関係ない。

1-1. 対象環境

  • Oracle Cloud Infrastructure
  • Oracle Linux 6 / 7 / 8。CentOSなども同様

1-2. 参考資料

2. iSCSIアタッチメントの基本

Oracle Cloud Infrastructureでブロック・ボリュームは外部ストレージに存在する。そのときインスタンスからブロック・ボリュームを接続する方法として、「準仮想化」と「iSCSI」がある。それぞれの違いを説明する。

2-1. 準仮想化とiSCSIの違い

詳しい技術的な違いは置いておくとして、覚えるべきは次の3点だ。

  • ベアメタル・インスタンスが利用できるのは「iSCSI」に限られる
  • パフォーマンスSLAが適用されるのは「iSCSI」に限られる
  • 準仮想化」のほうが利用手順が簡単

2-2. 利用手順の違い

次の表は、新しいブロック・ボリュームの使用手順を「準仮想化」と「iSCSI」で比較したものだ。iSCSIでは「3.iSCSIコマンド等でアタッチ」の手順が増える。

手順 準仮想化 iSCSI
1.ブロック・ボリュームの作成
2.管理コンソールやCLIでブロック・ボリュームのアタッチ
3.iSCSIコマンド等でアタッチ 不要
4.ディスク・パーティションの作成
5.ファイル・システムの作成
6.mountコマンドでマウント

アタッチは2回あり、それぞれで意味が違う。手順2のアタッチは「ケーブルの接続」に相当し、手順3のアタッチは「OSからボリュームの認識」に相当する。

また手順3のアタッチには、次の3つの実現方法がある。

  • iSCSIコマンドで手動アタッチする
  • oci-iscsi-configで手動アタッチする
  • ocidサービスで自動アタッチする

どれを使っても結果は同じだが、ocidサービスは自動的にブロック・ボリュームを検出&アタッチするので便利だ。ただし、OSの種類やバージョンによっては使えないことがある。

2-3. デタッチも気をつける

利用開始したブロック・ボリュームをデタッチする機会は少ない。しかし「ブロック・ボリュームのサイズをオフライン拡張する」「完全に一貫性のあるバックアップを取得する」「インスタンスやボリュームをリカバリーする」「シェイプを変更する(※)」などのメンテナンス作業ではデタッチが必要になる。

※必須ではないが推奨

次の表はデタッチの手順だ。アタッチの逆順になる。ocidサービスで自動アタッチしているときでも、デタッチはコマンドを実行する必要があるので注意すること。

手順 準仮想化 iSCSI
1.mountコマンドでアンマウント
2.iSCSIコマンド等でデタッチ 不要
3.管理コンソールやCLIでブロック・ボリュームのデタッチ

3. iSCSIアタッチする

もっとも基本的な2種類のアタッチ方法を説明する。oci-iscsi-configは便利コマンドなので「6. oci-iscsi-configの使い方」で説明する。

  • iSCSIコマンドで手動アタッチする
  • ocidサービスで自動アタッチする

3-1. iSCSIコマンドでアタッチする

はじめに、iSCSIコマンド利用したアタッチ方法を説明する。こちらがオーソドックスな方法である。

  1. 管理コンソールでブロック・ボリュームをアタッチする。
  2. アタッチしたブロック・ボリュームを表示する。右の「・・・」をクリックして「iSCSI Commands & Information」を選択する。
  3. アタッチ/デタッチするコマンドが表示されるのでコピーする。
  4. OSにログインして、コピーしたコマンドを実行する。「iSCSI IP address:iSCSI port」はインスタンスによって異なることがあるので使い回さないこと。
sudo iscsiadm -m node -o new -T <volume IQN> -p <iSCSI IP address>:<iSCSI port>
sudo iscsiadm -m node -o update -T <volume IQN> -n node.startup -v automatic
sudo iscsiadm -m node -T <volume IQN> -p <iSCSI IP address>:<iSCSI port> -l

5.iSCSIコマンドに成功すると、アタッチしたボリュームが表示される。コマンドを実行するのは初回だけで、起動/停止しても再実行する必要は無い。

# iscsiadm -m session
tcp: [1] 169.254.2.2:3260,1 iqn.2015-12.com.oracleiaas:a37bb084-07c4-4a21-b73c-e0d4b2894037 (non-flash)

3-2. ocidサービスでアタッチする

ocidサービスを起動した状態でブロック・ボリュームを管理コンソールなどでアタッチすると、iSCSIコマンドを実行しなくても自動的にアタッチできる。

なお、ocidサービスを利用できるのは、Oracle Linux 7以降のバージョンに限られる。

  1. ocidサービスの状態を確認する。
systemctl status ocid
停止しているときはinactive(dead)
● ocid.service - Oracle Cloud Infrastructure utilities daemon
   Loaded: loaded (/etc/systemd/system/ocid.service; disabled; vendor preset: enabled)
   Active: ★inactive (dead)★
起動しているときはactive(running)
● ocid.service - Oracle Cloud Infrastructure utilities daemon
   Loaded: loaded (/etc/systemd/system/ocid.service; disabled; vendor preset: enabled)
   Active: ★active (running)★ since 土 2020-04-11 03:12:19 JST; 2s ago
 Main PID: 30244 (python2.7)
   CGroup: /system.slice/ocid.service
           └─30244 python2.7 /usr/libexec/ocid

2.ocidサービスが停止しているときは起動する。

systemctl start ocid

3.自動起動を有効化する。

# systemctl enable ocid
Created symlink from /etc/systemd/system/multi-user.target.wants/ocid.service to /etc/systemd/system/ocid.service.

# systemctl list-unit-files | grep ocid
ocid.service                                  enabled★自動起動有効

4.管理コンソールでブロック・ボリュームをアタッチする。

5.オペレーティング・システムから認識できるようになるまで2,3分かかる。/var/log/messagesに次のようなログが表示されたら完了だ。ocidによる自動化は、単純に省力化できるだけで無く、カスタムイメージやオートスケールを使用するときに役に立つ。

# tail -f /var/log/messages
eiaas:d6557dec-6f18-4432-acfa-f8335e5d3e52, portal: 169.254.2.2,3260] through [iface: default] is operational now
Sep  9 09:47:58 ol7srv3 kernel: scsi 3:0:0:0: RAID              IET      Controller       0001 PQ: 0 ANSI: 5
Sep  9 09:47:58 ol7srv3 kernel: scsi 3:0:0:0: Attached scsi generic sg1 type 12
Sep  9 09:47:59 ol7srv3 kernel: scsi 3:0:0:2: Direct-Access     ORACLE   BlockVolume      1.0  PQ: 0 ANSI: 6
Sep  9 09:47:59 ol7srv3 kernel: sd 3:0:0:2: Attached scsi generic sg2 type 0
Sep  9 09:47:59 ol7srv3 kernel: sd 3:0:0:2: [sdb] 104857600 512-byte logical blocks: (53.7 GB/50.0 GiB)
Sep  9 09:47:59 ol7srv3 kernel: sd 3:0:0:2: [sdb] 4096-byte physical blocks

ocidによる自動アタッチは、こちらの記事を参考にさせていただきました。

4. アタッチしているiSCSIを確かめる

もっとも一般的な方法は、次のコマンドだ。準仮想化のときは何も表示されない。

#  iscsiadm -m session
tcp: [1] 169.254.2.2:3260,1 iqn.2015-12.com.oracleiaas:99ccef68-e6de-4f3b-bc0f-xxxxxxxxxxxx (non-flash)

7系以降に限られるが、便利なのはlsblk-Sオプションだ。iSCSIでアタッチしているときは一番右に表示される。

# lsblk -S
NAME HCTL       TYPE VENDOR   MODEL             REV TRAN
sdb  3:0:0:2    disk ORACLE   BlockVolume      1.0  iscsi
sda  2:0:0:1    disk ORACLE   BlockVolume      1.0

同様に7系ではoci-iscsi-configコマンドも使える。コマンドの使い方は--helpでどうぞ。

# oci-iscsi-config -s
Warning:
For full functionality of this utility the ocid service must be running
The administrator can start it using this command:
    sudo systemctl start ocid.service

Currently attached iSCSI devices:

Target iqn.2015-12.com.oracleiaas:99ccef68-e6de-4f3b-bc0f-xxxxxxxxxxxx
   Persistent portal:    169.254.2.2:3260
      Current portal:    169.254.2.2:3260
               State:    LOGGED_IN
     Attached device:    sdb
                Size:    300G
    File system type:    Unknown
          Mountpoint:    Not mounted

Need OCI services to display available devices.

5. iSCSIデタッチする

「2-3. デタッチも気をつける」で説明したように、管理コンソールでブロック・ボリュームデタッチするときは、先にiSCSIコマンドでデタッチする必要がある。

ocidサービスで自動アタッチしているときでも、デタッチするときは手動でコマンドを実行する必要があるので注意すること。

  1. ocidサービスが起動していると自動アタッチされるのでサービスを停止する。
systemctl status ocid
systemctl stop ocid

2.ボリュームをアンマウントする。

umount <マウントポイント>

3.アタッチしたときと同様な手順で、こんどはデタッチのコマンドをコピーする。

4.コピーしたコマンドを実行する。複数ブロック・ボリュームをアタッチしているときは、それぞれで実行する。

sudo iscsiadm -m node -T <volume IQN> -p <iSCSI IP address>:<iSCSI port> -u
sudo iscsiadm -m node -o delete -T <volume IQN> -p <iSCSI IP address>:<iSCSI port>

5.次のように何も表示されなければデタッチに成功している。

$ iscsiadm -m session
iscsiadm: No active sessions.

6.管理コンソールでブロック・ボリュームをデタッチする。以上で終了だ。

6. oci-iscsi-configの使い方

oci-iscsi-configは、oci-utilsパッケージに含まれるiSCSIユーティリティーだ。iscsiadmを使わずに簡単にアタッチ/デタッチができる。詳しくはmanを見るとして、基本的な使い方を説明する。なおroot権限で実行する必要がある。

6-1. oci-iscsi-configでアタッチする

  1. 管理コンソールからブロック・ボリュームの「・・・」をクリックして「iSCSI Commands & Information」を選択する。ここで[VOLUME IQN]をコピーする。

  2. oci-iscsi-configコマンドでアタッチする。ワーニングは無視してよい。

# oci-iscsi-config -a <コピーしたVOLUME IQN>
Warning:
For full functionality of this utility the ocid service must be running
The administrator can start it using this command:
    sudo systemctl start ocid.service

Target iqn.2015-12.com.oracleiaas:a37bb084-07c4-4a21-b73c-e0d4b2894037 is already attached.

3.次のコマンドを実行するとアタッチされているボリュームが表示される。

# oci-iscsi-config -s
Currently attached iSCSI devices:

Target iqn.2015-12.com.oracleiaas:a37bb084-07c4-4a21-b73c-e0d4b2894037
   Persistent portal:    169.254.2.2:3260
      Current portal:    169.254.2.2:3260
               State:    LOGGED_IN
     Attached device:    sdb
                Size:    50G
    File system type:    Unknown
          Mountpoint:    Not mounted

Need OCI services to display available devices.

6-2. oci-iscsi-configでデタッチする

  1. ocidサービスが起動していると自動アタッチされるのでサービスを停止する。
systemctl status ocid
systemctl stop ocid

2.oci-iscsi-configコマンドでデタッチする。ワーニングは無視してよい。

# oci-iscsi-config -d <コピーしたVOLUME IQN>
Warning:
For full functionality of this utility the ocid service must be running
The administrator can start it using this command:
    sudo systemctl start ocid.service

Updating ignore file: ['iqn.2015-12.com.oracleiaas:a37bb084-07c4-4a21-b73c-e0d4b2894037']

3.確認するとDetachedと表示される。

# oci-iscsi-config -s
Warning:
For full functionality of this utility the ocid service must be running
The administrator can start it using this command:
    sudo systemctl start ocid.service

Currently attached iSCSI devices:
Error: Local iSCSI info not available.
List info from Cloud instead(No boot volume).

Need OCI services to display available devices.
Detached devices:

Target iqn.2015-12.com.oracleiaas:a37bb084-07c4-4a21-b73c-e0d4b2894037
              Portal:    169.254.2.2:3260
               State:    Detached★

7. おわりに

いままで自分ではあまり使っていないiSCSIアタッチだが、実際にやってみると簡単なことがわかる。マニュアルには、他にもいろいろ書かれているのでどうぞ。

  • ブロック・ボリュームのアタッチ方法には「準仮想化」と「iSCSI」がある
  • ベアメタル・インスタンスが利用できるのは「iSCSI」に限られる
  • パフォーマンスSLAが適用されるのは「iSCSI」に限られる
  • 「準仮想化」のほうが利用手順が簡単
  • iSCSIでアタッチするには「iSCSIコマンドで手動実行する方法」と「ocidサービスによる自動実行する方法」がある
  • iSCSIでデタッチするときには、管理コンソールでデタッチする前に、OSレベルでデタッチする必要がある