更新情報
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. 参考資料
- OCIマニュアル - ボリュームに接続
- OCI Manual - Connecting to a Volume
- Oracle Linux Administrator's Guide for Release 7 - About iSCSI Storage
- Oracle Linux Administrator's Guide for Release 6
- Red Hat Enterprise Linux 7 ストレージ管理者ガイド - iSCSI
- Red Hat Enterprise Linux 6 ストレージ管理者ガイド - iSCSI
- 動画:Configure a Linux ISCSI Target and Initiator on Oracle Cloud Infrastructure
2. iSCSIアタッチメントの基本
Oracle Cloud Infrastructureでブロック・ボリュームは外部ストレージに存在する。そのときインスタンスからブロック・ボリュームを接続する方法として、「準仮想化」と「iSCSI」がある。それぞれの違いを説明する。
2-1. 準仮想化とiSCSIの違い
詳しい技術的な違いは置いておくとして、覚えるべきは次の3点だ。
- ベアメタル・インスタンスが利用できるのは「iSCSI」に限られる
- パフォーマンスSLAが適用されるのは「iSCSI」に限られる
- 「準仮想化」のほうが利用手順が簡単
さらに追加としてUltra High Performanceボリュームのためには、「iSCSIアタッチ」かつ「マルチパス対応」で構成する必要がある。
2-2. 利用手順の違い
次の表は、新しいブロック・ボリュームの使用手順を「準仮想化」と「iSCSI」で比較したものだ。iSCSIでは「3.iSCSIコマンド等でアタッチ」の手順が増える。
手順 | 準仮想化 | iSCSI |
---|---|---|
1.ブロック・ボリュームの作成 | ○ | ○ |
2.管理コンソールやCLIでブロック・ボリュームのアタッチ | ○ | ○ |
3.iSCSIコマンド等でアタッチ | 不要 | ○ |
4.ディスク・パーティションの作成 | ○ | ○ |
5.ファイル・システムの作成 | ○ | ○ |
6.mountコマンドでマウント | ○ | ○ |
アタッチは2回あり、それぞれで意味が違う。手順2のアタッチは「ケーブルの接続」に相当し、手順3のアタッチは「OSからボリュームの認識」に相当する。
また手順3のアタッチには、次の4つの実現方法がある。
- iSCSIコマンドで手動アタッチする
- oci-iscsi-configで手動アタッチする
- ocidサービスで自動アタッチする
- Oracle Cloud Agentで自動アタッチする
どれを使ってもほとんど同じだが、ocidを使う方法が簡単だ。ただしUltra High Performanceボリュームでは、Oracle Cloud Agentの方法が必須になる。
2-3. デタッチも気をつける
利用開始したブロック・ボリュームをデタッチする機会は少ない。しかし「ブロック・ボリュームのサイズをオフライン拡張する」「完全に一貫性のあるバックアップを取得する」「インスタンスやボリュームをリカバリーする」「シェイプを変更する(※)」などのメンテナンス作業ではデタッチが必要になる。
※必須ではないが推奨
次の表はデタッチの手順だ。アタッチの逆順になる。ocidサービスで自動アタッチしているときでも、デタッチはコマンドを実行する必要があるので注意すること。
手順 | 準仮想化 | iSCSI |
---|---|---|
1.mountコマンドでアンマウント | ○ | ○ |
2.iSCSIコマンド等でデタッチ | 不要 | ○ |
3.管理コンソールやCLIでブロック・ボリュームのデタッチ | ○ | ○ |
3. iSCSIアタッチする
4つのアタッチ方法のなかで、以下のアタッチ方法を説明する。oci-iscsi-configは知っておくと便利なコマンドなので「6. oci-iscsi-configの使い方」で説明する。
- iSCSIコマンドで手動アタッチする
- ocidサービスで自動アタッチする
- Oracle Cloud Agentで自動アタッチする
3-1. iSCSIコマンドでアタッチする
はじめに、iSCSIコマンド利用したアタッチ方法を説明する。こちらがオーソドックスな方法である。
- 管理コンソールでブロック・ボリュームをアタッチする。
- アタッチしたブロック・ボリュームを表示する。右の「・・・」をクリックして「iSCSI
Commands & Information」を選択する。
- アタッチ/デタッチするコマンドが表示されるのでコピーする。
- 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以降のバージョンに限られる。
- ocidサービスの状態を確認する。
systemctl status ocid
● ocid.service - Oracle Cloud Infrastructure utilities daemon
Loaded: loaded (/etc/systemd/system/ocid.service; disabled; vendor preset: enabled)
Active: ★inactive (dead)★
● 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による自動アタッチは、こちらの記事を参考にさせていただきました。
3-3. Oracle Cloud Agentでアタッチする
Oracle Cloud Agentで自動アタッチするには、前提条件として以下の条件を満たしている必要がある。詳しい手順はマニュアルを読んでほしい。
- oracle-cloud-agentのバージョンが1.23.0以降
- ComputeインスタンスはパブリックIPアドレスを持っているか、サービス・ゲートウェイにアクセス可能なこと
- ダイナミックグループを構成してポリシーを設定
- oracle-cloud-agentのバージョンが1.23.0以降であることを確認する。
$ rpm -qi oracle-cloud-agent
Name : oracle-cloud-agent
Version : 1.23.0
2.管理コンソールでブロック・ボリュームをアタッチする。ここでエラーが表示されたときには、前提条件を満たしていない可能性が高い。
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サービスで自動アタッチしているときでも、デタッチするときは手動でコマンドを実行する必要があるので注意すること。
- 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でアタッチする
-
管理コンソールからブロック・ボリュームの「・・・」をクリックして「iSCSI Commands & Information」を選択する。ここで [VOLUME IQN] をコピーする。
-
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でデタッチする
- 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レベルでデタッチする必要がある