2023年 02月 14日
Linux で iSCSI, openSUSE15/SLE15 で作る iSCSI ストレージサーバ
ChatGPTによると
"iSCSI(Internet Small Computer System Interface)は、IPネットワークを介してストレージを接続するためのプロトコルです。iSCSIを使用することで、サーバーやストレージシステムなどの機器が、専用のファイバーチャネルやSCSIケーブルなどの高価な専用の接続機器を必要とせず、既存のIPネットワークを使用して、データの送受信ができるようになります。iSCSIは、ファイルサーバーやデータベースサーバーなどのサーバーと、SAN(Storage Area Network)ストレージやNAS(Network Attached Storage)ストレージなどのストレージ機器を接続する場合に利用されます。iSCSIは、TCP/IPプロトコルを基盤としており、標準のイーサネットネットワークを介して利用することができます。"
とのことです。凄いぞ ChatGPT。
ISCSI を利用する側のホストコンピュータ側のサービスをイニシエータ、ストレージ側のサービスをターゲットと呼びます。イニシエータとターゲットとの間は IP で SCSI プロトコルをカプセル化して通信します。通信速度は、経路の速度に依存します。1Gbps のメタルケーブルで繋げば 1Gbps だし、40Gbps の光ファイバで繋げれば 40Gbps です。途中の経路にボトルネックがあれば当然遅くなります。メリットは安価な既存の安価で普及しているイーサネット、インターネットの IP 機器、ケーブルで繋がることで、高価な光ファイバ・ホスト・バスアダプタ(HBA)や専用の SAN 用の HUB が必要ないこと。ストレージネットワークの専門の知識や技術を必要としないことです。もっとも、 10Gbps のメタルケーブルの HUB って中々高価だし、爆熱が解決できずに普及していないのが問題なのですが。
iSCSI の利点として、IP 通信が出来る限りでは、ホストコンピュータ側とストレージ側との距離に制限がない事があります。例えばサーバが自社のサーバルームにあり、バックアップ用のストレージ装置が遠い南極のデータセンターにある、と言った運用が可能です。イニシエータが動く OS 側から見ると、単純に SCSI のハードディスクです。内蔵のディスクの ソフトウェア Raid の同期先を、データセンターに置くこともできます。
ターゲット側のファイルシステムにあるディスク領域は仮想化されます。共有するイニシエータ側のファイルセキュリティがそのまま利用できます。仮想イメージはターゲット側のファイルシステムに置かれますが、イニシエータからは、ext4 なり、NTFS なり、マウントした側が管理するイニシエータ側の専用のファイルシステムです。一般的な CIFS/SMB の共有ファイルではありません。
また、イニシエータとストレージ側のターゲットは、「通信」というソフトウェア的な接続なので、装置の故障などで交換が必要な場合でも、セッションを切って電源を落としてディスクを交換すると言った事ができます。USBのケーブルをプチっとやってブルーになる、というハードウェア的なトラブルも起こりにくい。これは、物理的な SAS バスアダプタやポートを持てない XEN や KVM の様な仮想システムにとっては、非常に都合がいい。プライベートクラウド環境にはとても有利なディスク増設の手段です。
実際には、単一の筐体のストレージ装置は、iSCSI ターゲットサービスによって複数のホストに必要な容量に仮想化、分割されて、複数のホストから利用されます。一つの筐体の大容量の記憶領域を効率良く分割して利用させるわけですね。
iSCSI で重要なのは NAS やファイルサーバのファイル共有ではなく、仮想化ディスクで異なる OS, ホストから記憶装置を一つの筐体で共有する手段だということです。
一般的には、NAS などの組み込みストレージに ISCSI ターゲットが実装されている事が多く、私のお気に入りの QNAP NAS 等には実装されています。一般に販売されているコンシューマ用のものは、安価で多機能です。QNAP NAS には TimeMachine 機能も付いているので Apple ユーザには嬉しいですね。
今回は、iSCSI のターゲットを一般的なPC筐体で動くopenSUSE/SLE の Linux で作ってしまおうということです。
SUSE Enterprise Linux(SLE15) のマニュアルはこちら
IPネットワークの大容量記憶域 - iSCSI
yast2/yast をお起動します。
# yast2 &
Software Manegementより、iscsi で search し yast2-iscsi-initiator, yast2-iscsi-LIO-target をそれぞれチェックしてインストールします。もし、既に YaST のメニューにこれらのアイコンがあれば、クリックするだけなのでインストールは無用です。
一旦、yast を終了して yast を再起動します。iscsi LIO Target アイコンをクリックして実行します。実行すると、自動的に必要な追加パッケージがインストールされます。
General より iSCSI ターゲットのスタートアップ( After Reboot)、設定変更後のサービスの再起動(After writing configuration)を設定します。
Global タブ、ここではパスワードを要求しないがデフォルトです。最初はパスワードを設定せずに、まずは試して見て下さい。しかし本番運用前はパスワードを設定して置くことをお勧めします。誤接続してデータを紛失するとマズイので、ターゲットごとに機能やデータの内容、利用するホストなどの内容が分かるようにパスワードをつけておきます。
Targetsタブ
Add ボタンを押して、ターゲットを指定します。
ターゲット
IP Address を設定し Add ボタンを押して、LUN Path に割り当てるストレージファイルをブラウズして設定します。ここでは、以前使っていた仮想 VM のraw イメージファイルを割り当てていますが、dd コマンドを使って予め空のディスクイメージを作っておくのが良いでしょう。
# 1G の場合# dd if=/dev/zero bs=1G count=1 >> your_disk_file.raw
HOWTO: resize a XEN virtual disk
identifier は自動的に割り当てられます。Target 名は任意につけられますが、ターゲットから仮想ストレージを使う時の目印になるので com.example の部分を分かりやすい名前にすることをお勧めします。
これで iSCSI ターゲットの準備は完了です。
実際の接続手順は別記事をご参考ください。
Linux で iSCSI で NAS を使う openSUSE Leap 15.4
iSCSI イニシエータからターゲットを Discovery してターゲットの仮想ディスクに接続します。
YaST > Partitioner からデバイスのリストに "LIO_ORG... " というディスクのリストが現れるので、この仮想ディスクにパーティションを作成します。
なお、Linux で iSCSI デバイスをマウントする場合、fstab に ”_netdev” オプションを付けるか、起動後にマウントするために、/etc/init.d/after.local ファイルでマウントさせる方法もあります。
Linux 起動後に自動実行するスクリプト、SUSE Linux 15 (openSUSE Leap15/SLE15)
Windows の場合、OS 標準の ISCSI イニシエータを使って利用します。
今回は、たまたま dd でスパースファイル作るのが面倒だったので、KVN の仮想化イメージファイルをストレージに割り当ててみたのですが、思わぬ効果が有りました。
仮想化イメージをコピーしてしまえば他のホストにマウントできるということです。これがバリバリの NAS の場合はちょっと面倒くさいでしょう。一般のPCサーバに ISCSI ターゲットを実装するのはちょっと面倒ですが、運用面では可用性がありそうです。