【入門編】 ストレージ仮想化におけるiSCSIプロトコル(TCPポート3260番)とLUNマッピングの挙動 – クラウドインフラと仮想化ネットワーク実践ガイド

皆さん、こんにちは! 最前線で奮闘するSRE兼クラウドアーキテクトの〇〇(←ここにあなたの名前を想像してくださいね!)です。国内外の技術トレンドを追いかけ、時には泥臭い現場でパケットを追いかけ回している私ですが、今日は皆さんに、インフラエンジニアの基礎体力をグッと高める、とっておきのテーマをお届けします。

今回の主役は、ストレージ仮想化の隠れた立役者「iSCSI(アイ・スカジー)」です!

「iSCSI?なんか難しそう…」「ポート3260番って何?」そう思った方もいるかもしれませんね。でも大丈夫。パケットがネットワークを駆け巡るリアルな挙動を、まるで郵便配達や宅配便の仕組みのように、一歩ずつ、丁寧に紐解いていきましょう。この記事を読み終える頃には、きっとあなたのインフラへの見方が変わっているはずですよ!

ストレージ仮想化って、そもそも何だろう?

まずは「ストレージ仮想化」という言葉から、少しだけ肩の力を抜いて考えてみましょう。

皆さんの家にある本棚を想像してみてください。本がたくさん詰まっていますよね。もし、その本棚が一つしかなく、そこに家族全員の本を無理やり詰め込んだらどうなるでしょう? 誰がどの本を置いたのか分からなくなったり、空きスペースを見つけるのが大変だったり、新しい本を買っても置く場所がなかったり… なんだか非効率的で、管理も大変そうですよね。

ストレージ仮想化とは、まさにこの「本棚」を、もっと賢く、もっと柔軟に使えるようにする技術なんです。

物理的なたくさんのハードディスクやSSDを、あたかも一つの大きな塊のように見せたり、逆に一つの大きな塊を、必要な分だけ小さく区切って、複数のサーバーに「仮想的なディスク」として提供したりします。これによって、物理的な制約にとらわれず、サーバーが必要な時に必要な容量のストレージを、まるで自分の手元にあるかのように使えるようになるんですよ。

ブロックストレージ、ファイルストレージ、オブジェクトストレージ… 混乱していませんか?

ストレージの種類にはいくつかあって、初心者の方にはちょっと混乱しやすいポイントですよね。でも、iSCSIを理解する上で、特に重要なのが「ブロックストレージ」です。

  • ファイルストレージ(NASなど):

これは、皆さんが普段PCで使っているCドライブやDドライブ、USBメモリのようなイメージです。ファイルやフォルダの単位でデータにアクセスします。「この写真ファイルちょうだい」「あのドキュメントを保存して」といった具合ですね。ネットワーク越しのファイルサーバーが典型例です。

  • ブロックストレージ(SANなど):

これがiSCSIが提供するストレージのタイプです。サーバーから見ると、まるで自分のPCに直接接続されている物理的なハードディスクそのもののように見えます。ファイルやフォルダといった「意味のある塊」ではなく、ディスクの最小単位である「ブロック」単位でデータにアクセスします。サーバーのOSはこのブロックストレージの上に、自分でファイルシステム(WindowsならNTFS、Linuxならext4など)を作り、ファイルやフォルダを管理するんです。

ブロックストレージは、OSが直接ディスクをコントロールできるため、データベースサーバーや仮想化基盤のVMディスクなど、高いパフォーマンスと柔軟性が求められる用途で特に活躍します。

iSCSIって、一体何者? ~郵便配達からインターネット宅配便へ~

さあ、本日の主役「iSCSI」の登場です!

iSCSIは「Internet Small Computer System Interface」の略です。なんだか長い名前で、難しそうに聞こえますよね。でも、分解して考えると、実はとてもシンプルなんです。

  • SCSI(スカジー):

これは、昔からコンピューターとディスクドライブなどを直接接続するために使われてきた、高性能なインターフェースの規格です。例えるなら、郵便局の集配人が、手紙を直接ポストに投函するようなイメージです。とても丁寧で、間違いなく届けてくれるけれど、遠い場所には直接は行けませんよね。

  • Internet(インターネット):

これは皆さんご存存じのインターネット、つまりIPネットワークのことですね。

そう、iSCSIとは、「SCSIプロトコルを、IPネットワーク(インターネット)上で使えるようにしたもの」なんです!

例えるなら、郵便局の集配人が直接手紙を届ける代わりに、インターネットを通じて、どこへでも荷物を送れる「宅配便サービス」のようなものです。大切な荷物(データ)を、遠く離れた場所にある倉庫(ストレージ)に、ネットワークという道路を使って、まるで自分の手元にあるかのようにやり取りできる。これがiSCSIの最大の魅力なんですね。

iSCSIの登場人物たち ~宅配便の物語~

iSCSIの仕組みを理解するためには、登場人物とその役割を知ることが大切です。ここでも宅配便の例えを使ってみましょう。

1. イニシエータ(Initiator):
これは、ストレージを使いたいサーバー側のことです。宅配便で言うところの「荷物を送ったり受け取ったりしたい人」ですね。このサーバーは、まるで自分のPCに直接ディスクが繋がっているかのように、iSCSIストレージを利用します。

2. ターゲット(Target):
これは、ストレージを提供する側のことです。具体的には、iSCSIストレージサーバーや、SANストレージコントローラーなどがこれに当たります。宅配便で言うと「荷物を預かり、管理し、配送してくれる宅配業者」です。たくさんの物理ディスクを管理し、イニシエータからの要求に応じてデータを提供します。

3. LUN(Logical Unit Number):
これは、ターゲットが提供する「仮想的なディスクの塊」です。イニシエータ(サーバー)から見ると、まるで一つの物理ディスクのように見える論理的な単位のことです。宅配便で例えるなら「送りたい、あるいは受け取りたい一つ一つの荷物」そのものです。ターゲットは複数のLUNを作り、それぞれを異なるイニシエータに割り当てることができます。

これらの登場人物が、IPネットワークという道路を使って、協力し合ってストレージのやり取りを行うわけですね。

iSCSIの通信、TCPポート3260番が鍵!

さて、宅配便の例えをもう少し深掘りしてみましょう。荷物を送るにも、受け取るにも、まずは宅配業者と連絡を取る必要がありますよね。どこに連絡すればいいのか、その「窓口」が必要です。

iSCSIの場合、その窓口となるのが、TCPのポート番号3260番なんです!

TCP/IPネットワークでは、様々なサービスがそれぞれ固有のポート番号を使って通信しています。例えば、ウェブサイトを見るならHTTPの80番やHTTPSの443番、メールを送るならSMTPの25番…といった具合です。

iSCSIも例外ではなく、イニシエータがターゲットと最初に通信を始める際、この3260番ポートに対して接続を試みます。ターゲット側はこの3260番ポートで、イニシエータからの接続を「待ち受けている」わけです。

イメージとしては、宅配業者の大きな集荷センターに、たくさんの窓口があるけれど、「iSCSI専用の受付窓口」は3260番だと決まっている、という感じです。イニシエータは迷わずこの窓口を目指して連絡を取りに来る、というわけですね。

iSCSIセッション確立の舞台裏 ~銀行口座開設のプロセス~

では、イニシエータがターゲットの3260番ポートに接続した後、実際にストレージを使えるようになるまでの流れを見ていきましょう。これは、新しい土地に引っ越してきて、銀行口座を開設するプロセスによく似ています。

1. 検出(Discovery):
イニシエータ(引っ越してきた人)は、まず「近くにどんな銀行があるかな?」と探します。iSCSIでは、イニシエータがネットワーク上のターゲットを「発見」するフェーズです。ターゲットのアドレスを指定して、接続可能なターゲットを探します。

2. ログイン(Login):
イニシエータ(あなた)は、特定の銀行(ターゲット)を見つけたら、窓口に行って「口座を開設したいのですが」と伝えますよね。この時、身分証明書を提示したり、必要な情報を記入したりして、本人であることを証明します。iSCSIでも同様に、イニシエータはターゲットに対して認証情報(ユーザー名、パスワードなど)を提示し、セッションを確立します。これで、イニシエータとターゲットの間で「あなたは正当な利用者ですよ」という信頼関係が築かれるわけです。

3. LUNマッピング:
口座開設が完了すると、銀行はあなたに「通帳」や「キャッシュカード」を発行してくれますよね。これで、あなたは自分の口座にアクセスできるようになります。iSCSIのLUNマッピングもこれと似ています。ターゲットは、ログインしてきた特定のイニシエータに対して、「このLUN(仮想ディスク)を使っていいですよ」という許可(マッピング)を与えます。イニシエータは、マッピングされたLUNを、あたかも自分のサーバーに直接接続されたディスクのように認識するようになります。

この一連のステップを経て、イニシエータはターゲットから提供されたLUNを、まるでローカルディスクのように自由に使えるようになるんです。

データ転送の仕組み ~荷物の出し入れはスムーズに~

一度セッションが確立され、LUNがマッピングされてしまえば、あとは簡単です。

イニシエータであるサーバーは、LUNを自分のOSに「ディスク」として認識させます。例えばLinuxなら/dev/sdbのようなデバイスファイルとして見えます。このデバイスに対して、パーティションを作成したり、ファイルシステムをフォーマットしたり、そしてデータを読み書きしたり…といった操作を行います。

これらの操作は、裏側ではSCSIコマンドとしてTCP/IPパケットに乗せられ、ネットワークを経由してターゲットに送られます。ターゲットはコマンドを受け取り、実際の物理ディスクに対してデータの読み書きを行い、その結果を再びTCP/IPパケットとしてイニシエータに返します。

このやり取りは非常に高速に行われるため、サーバーのユーザーやアプリケーションから見れば、ネットワークの向こう側にあるストレージであることすら意識させません。まるでローカルにあるディスクを触っているのと全く同じ感覚で利用できるんです。

実践!iSCSIターゲットとイニシエータを構築してみよう(CentOS/Ubuntuでの例)

さあ、理屈が分かったところで、実際に手を動かしてみましょう! 今回は、Linuxサーバー(CentOSやUbuntu)を例に、iSCSIターゲットとイニシエータを構築する基本的な手順をご紹介します。

1. iSCSIターゲットサーバー(ストレージ提供側)の設定

ここでは、targetcliというツールを使って、簡単にiSCSIターゲットを構築します。

パッケージのインストール

# CentOS/RHEL系の場合
sudo yum install targetcli -y

# Ubuntu/Debian系の場合
sudo apt update
sudo apt install targetcli-fb -y

iSCSIターゲットの設定

targetcliはインタラクティブなシェルで操作します。

sudo targetcli

# /backstores/block に物理ディスクを登録(例: /dev/sdb をLUNとして使う場合)
# 注意: /dev/sdb は完全に消去されます。テスト環境以外では絶対に実行しないでください!
create /backstores/block disk1 /dev/sdb

# iSCSIターゲットを作成
# 'iqn.20XX-YY.com.example:target01' はiSCSI Qualified Name (IQN) と呼ばれるターゲットのユニークな識別子です。
# ご自身の環境に合わせて適当なものに変更してください。
create /iscsi/iqn.20XX-YY.com.example:target01/tpg1

# LUNをターゲットに割り当てる
# 0 はLUN IDです。
create /iscsi/iqn.20XX-YY.com.example:target01/tpg1/luns/lun0 backstores/block/disk1

# アクセス制御リスト (ACL) を設定
# 'iqn.20XX-YY.com.example:initiator01' はイニシエータ側のIQNです。
# 後のイニシエータ設定で使うので、控えておいてください。
create /iscsi/iqn.20XX-YY.com.example:target01/tpg1/acls/iqn.20XX-YY.com.example:initiator01

# ネットワークポータル(リスニングアドレスとポート)を設定
# 0.0.0.0 は全てのアドレスからの接続を許可。特定のIPアドレスに制限することも可能。
# ポート3260番がデフォルトで使われます。
create /iscsi/iqn.20XX-YY.com.example:target01/tpg1/portals/0.0.0.0 3260

# 設定を保存して終了
saveconfig
exit

# ファイアウォールで3260番ポートを開放するのを忘れずに!
# CentOS/RHEL系の場合
sudo firewall-cmd --permanent --add-port=3260/tcp
sudo firewall-cmd --reload

# Ubuntu/Debian系の場合 (UFWが有効な場合)
sudo ufw allow 3260/tcp
sudo ufw reload

2. iSCSIイニシエータサーバー(ストレージ利用側)の設定

ここでは、先ほど設定したターゲットのストレージを利用する側の設定を行います。

パッケージのインストール

# CentOS/RHEL系の場合
sudo yum install iscsi-initiator-utils -y

# Ubuntu/Debian系の場合
sudo apt update
sudo apt install open-iscsi -y

イニシエータ名の設定

イニシエータには固有のIQNが必要です。これはターゲット側でACLに登録したIQNと同じにします。

# /etc/iscsi/initiatorname.iscsi ファイルを編集
sudo vi /etc/iscsi/initiatorname.iscsi

# 以下のように設定。ターゲットのACLに設定したIQNと同じにします。
# InitiatorName=iqn.20XX-YY.com.example:initiator01

iSCSIサービスの再起動

# CentOS/RHEL系の場合
sudo systemctl restart iscsid
sudo systemctl enable iscsid

# Ubuntu/Debian系の場合
sudo systemctl restart open-iscsi
sudo systemctl enable open-iscsi

ターゲットの検出

ターゲットのIPアドレスを指定して、利用可能なターゲットを探します。

# ターゲットのIPアドレスを 'TARGET_SERVER_IP' に置き換えてください
sudo iscsiadm -m discovery -t sendtargets -p TARGET_SERVER_IP

上記コマンドを実行すると、以下のようにターゲットのIQNとIPアドレスが表示されるはずです。

TARGET_SERVER_IP:3260,1 iqn.20XX-YY.com.example:target01

ターゲットへのログイン

検出したターゲットにログインします。これでセッションが確立され、LUNが認識されるはずです。

sudo iscsiadm -m node -T iqn.20XX-YY.com.example:target01 -p TARGET_SERVER_IP -l

認識されたディスクの確認

ログイン後、OSが新しいディスクを認識しているか確認します。

lsblk

通常、/dev/sdbや/dev/sdcといった名前で、ターゲットから提供されたLUNが見えるはずです。

ディスクのフォーマットとマウント

認識されたディスクは、まだファイルシステムがありません。通常のディスクと同じようにフォーマットしてマウントします。

# 認識されたデバイス名を /dev/sdb として進めます。
# 注意: 間違ったディスクをフォーマットするとデータが消えます!
# 適切なデバイス名であることを十分に確認してください。
sudo mkfs.ext4 /dev/sdb

# マウントポイントを作成
sudo mkdir /mnt/iscsi_storage

# マウント
sudo mount /dev/sdb /mnt/iscsi_storage

# マウントされているか確認
df -h /mnt/iscsi_storage

# 永続化のために /etc/fstab にエントリを追加
# UUIDで指定するとより確実です
# まずはUUIDを調べます
sudo blkid /dev/sdb
# 例: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

# /etc/fstab を編集
sudo vi /etc/fstab

# 以下の行を追加(UUIDは先ほど調べたものに置き換えてください)
# UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/iscsi_storage ext4 _netdev 0 0
# '_netdev' オプションは、ネットワークデバイスが利用可能になってからマウントすることを指示します。

これで、iSCSIストレージがイニシエータサーバーで利用できるようになりました! /mnt/iscsi_storageディレクトリにファイルを書き込んだり読み込んだりしてみてください。それはネットワークの向こう側にあるストレージに保存されているんですよ。

iSCSIのメリットとデメリット

どんな技術にも得意不得意がありますよね。iSCSIも例外ではありません。

メリット

  • 安価な構築: 高価な専用機器(ファイバーチャネルスイッチなど)が不要で、既存のイーサネットネットワークをそのまま利用できるため、導入コストを抑えられます。
  • 汎用性: ほとんどのサーバーOSがiSCSIイニシエータを標準でサポートしており、広く利用されています。
  • 集中管理と柔軟性: ストレージを集中管理し、必要な時に必要な容量だけサーバーに割り当てることができます。容量の増減も比較的容易です。
  • 透過性: サーバーから見ると、まるでローカルディスクのように扱えるため、アプリケーションの変更なしに利用できます。

デメリット

  • ネットワーク性能への依存: イーサネットネットワークの帯域や遅延が、ストレージのパフォーマンスに直接影響します。特にトラフィックが多い環境では、専用のネットワークを用意するなどの対策が必要です。
  • パフォーマンス: 一般的に、専用のファイバーチャネル(FC-SAN)に比べると、高負荷時のパフォーマンスや安定性で劣る場合があります。
  • セキュリティ: IPネットワーク上をデータが流れるため、適切な認証(CHAPなど)や暗号化、ネットワーク分離といったセキュリティ対策が重要になります。

クラウドとiSCSI ~見えないところで活躍する技術~

AWSのEBS(Elastic Block Store)やGCPのPersistent Disk、AzureのManaged Disksなど、メガクラウドが提供するブロックストレージサービス、皆さん使っていますよね?

これらのサービスは、ユーザーからは非常にシンプルに見えます。「インスタンスにディスクをアタッチする」という操作だけで、まるで物理ディスクが接続されたかのように利用できます。

実は、これらのクラウドブロックストレージの裏側では、iSCSIに似た、あるいはiSCSIそのもの、あるいはより進化したストレージ仮想化技術が使われていることが多いんです。ユーザーが直接iSCSIのコマンドを叩くことは稀ですが、「ネットワーク越しに仮想的なブロックストレージを提供する」というiSCSIの概念そのものが、クラウドの基盤を支えていると言っても過言ではありません。

だからこそ、iSCSIの仕組みを理解することは、クラウド環境の「見えない部分」を深く理解し、トラブルシューティングや設計において、より的確な判断を下すための強力な武器になるんですよ!

まとめと次へのステップ

今日の旅、お疲れ様でした! iSCSIという、一見すると難しそうな技術も、一つずつ紐解いていけば、決して複雑ではないことが分かっていただけたでしょうか。

  • iSCSIは、IPネットワーク上でSCSIプロトコルを使い、ブロックストレージを提供する技術
  • イニシエータ(サーバー)とターゲット(ストレージ)が、TCPポート3260番でセッションを確立
  • LUNマッピングによって、イニシエータは仮想ディスクを利用可能になる
  • クラウドのブロックストレージも、その思想はiSCSIと共通している

iSCSIは、仮想化環境やデータベース、ファイルサーバーなど、様々なシーンで活躍するストレージ技術の基礎です。今日学んだ知識は、きっとあなたのインフラエンジニアとしての視野を広げ、次のステップへと繋がるはずです。

もし「もっとストレージについて知りたい!」と思ったなら、今度は「ファイバーチャネル(FC-SAN)」や、さらに高速な「NVMe-oF(NVMe over Fabrics)」といった技術についても調べてみると面白いですよ。

これからも、皆さんのインフラへの探究心が尽きないよう、私は現場のリアルな知見を交えながら、技術の面白さを発信し続けていきますね! また次回の記事でお会いしましょう!

コメント

タイトルとURLをコピーしました