LinuxでのiSCSIストレージ設定:ターゲットとイニシエーター構築の実践ガイド

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

ストレージのパフォーマンスは、思っている以上に早く限界に達します。3ノードのホームラボを微調整している場合でも、50以上の本番サーバーを管理している場合でも、ローカルディスクはいずれ力尽きてしまいます。NFSやSamba共有は基本的なファイルストレージには適していますが、Proxmoxの仮想ディスクやトランザクションの多いMySQLデータベースのために未加工のブロックレベル・アクセスが必要な場合には苦戦します。そこでiSCSIの出番です。

私は長年データ移行に携わってきました。iSCSIはリモートディスクをローカルハードウェアのように扱えるため、高パフォーマンス・ネットワーキングにおいて信頼できる選択肢です。ハードドライブ用の仮想的な50メートルの延長コードのようなものだと考えてください。このガイドでは、標準的なLinuxツールを使用して、iSCSIターゲット(ストレージ提供側)とiSCSIイニシエーター(ストレージ利用側)をセットアップします。

アーキテクチャ:なぜブロックストレージなのか?

標準的なNAS構成ではファイルレベルの共有を使用します。これは、サーバー側がファイルシステム(EXT4やZFSなど)を管理することを意味します。一方、iSCSIでは、サーバー(ターゲット)は単にデータの生(raw)のブロックを渡すだけです。クライアント(イニシエーター)側がドライブをフォーマットし、マウントします。

この分離は非常に強力です。Kubernetesクラスターを運用している場合、ノードには自身でフォーマット可能な共有ブロックストレージが必要になります。iSCSIはSCSIコマンドをTCP/IPパケットにカプセル化するため、高価なファイバーチャネル(Fiber Channel)機器を購入することなく、既存の1GbEや10GbEのイーサネットインフラ上でこのトラフィックを流すことができます。

インストール:環境の準備

このセットアップには2台のマシンを使用します。Ubuntu 22.04またはAlmaLinux 9を推奨します。1台はターゲット(ストレージサーバー)として、もう1台はイニシエーター(クライアント)として機能します。

1. ターゲットサーバー側

targetcli-fbを使用します。これはLinuxカーネルのLIOサブシステムを管理するための専用シェルです。

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

# RHEL/AlmaLinuxの場合
sudo dnf install targetcli -y
sudo systemctl enable --now target

2. イニシエータークライアント側

クライアントには、検出用デーモンとログインユーティリティが必要です。

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

# RHEL/AlmaLinuxの場合
sudo dnf install iscsi-initiator-utils -y

iSCSIターゲット(サーバー)の設定

何を共有するかを定義する必要があります。生のファイルを共有することもできますが、LVM(論理ボリューム管理)を使用する方がはるかに賢明です。LVMを使えば、アンマウントすることなく、100GBのボリュームを数秒で200GBに拡張できます。設定コンソールを開きます。

sudo targetcli

ステップ 1:バックストアの作成

バックストアは、実際の物理的または論理的なストレージデバイスです。ここでは、/dev/sdbにある20GBのパーティションをマッピングします。

cd /backstores/block
create name=iscsi_disk1 dev=/dev/sdb

ステップ 2:IQNの定義

すべてのiSCSIデバイスには、一意のiSCSI Qualified Name(IQN)が必要です。これは、iqn.yyyy-mm.naming-authority:unique-idという特定の形式に従います。

cd /iscsi
create iqn.2024-05.com.itfromzero:storage01

ステップ 3:LUNのマッピング

Logical Unit Number(LUN)は、作成したIQNにバックストアをリンクさせます。

cd iqn.2024-05.com.itfromzero:storage01/tpg1/luns
create /backstores/block/iscsi_disk1

ステップ 4:ACLによるセキュリティ設定

これをスキップしないでください。これが主要な防御策になります。接続を許可する特定のイニシエーターをホワイトリストに登録する必要があります。まず、クライアントマシンの/etc/iscsi/initiatorname.iscsiからクライアントのIQNを取得してください。

cd ../acls
create iqn.2024-05.com.itfromzero:client01

ステップ 5:ポータルのバインド

ポータルは、サーバーがどのIPで待機(リッスン)するかを指定します。通常はポート3260を使用し、すべてのインターフェースで待機するには0.0.0.0を使用します。

cd ../portals
create 0.0.0.0 3260

作業を保存して終了します:

saveconfig
exit

イニシエーター(クライアント)の接続

では、クライアント側に戻ります。まず、自身のIQNがターゲットのACLでホワイトリストに登録したものと一致していることを確認します。/etc/iscsi/initiatorname.iscsiを編集します:

InitiatorName=iqn.2024-05.com.itfromzero:client01

設定を反映させるためにサービスを再起動します:

sudo systemctl restart iscsid open-iscsi

検出とログイン

ネットワークをスキャンしてストレージサーバーを見つけます。192.168.1.100は、実際のサーバーのIPに置き換えてください。

sudo iscsiadm -m discovery -t sendtargets -p 192.168.1.100

検出に成功したら、特定のターゲットにログインします:

sudo iscsiadm -m node -T iqn.2024-05.com.itfromzero:storage01 -p 192.168.1.100 --login

lsblkを実行して確認します。おそらく/dev/sdcとして、新しいドライブが表示されるはずです。これでパーティション作成、フォーマット、マウントの準備が整いました。

検証と永続的なマウント

私は長年にわたり数十台のLinux VPSインスタンスを管理してきましたが、苦い経験から学んだ教訓が一つあります。それは「安定性を検証すること」です。次のコマンドを実行して接続統計を確認してください:

sudo iscsiadm -m session -P 3

エラーがないか注意深く確認します。混雑した1GbE回線でのネットワークの「瞬断」は、iSCSIディスクの切断や強制的な読み取り専用モードへの移行を引き起こす可能性があります。レイテンシの急増が見られる場合は、ジャンボフレーム(MTU 9000)の有効化を検討してください。

再起動テスト

再起動後もマウントを維持するには、/etc/fstab_netdevフラグを使用します。これにより、ネットワークが完全に初期化される前にシステムがドライブをマウントしようとするのを防ぎます。

UUID=550e8400-e29b-41d4-a716-446655440000 /mnt/iscsi-storage ext4 defaults,_netdev 0 0

ネットワークが要件を満たしていれば、iSCSIは非常に堅牢です。本番環境では、iSCSIトラフィックを独自のVLANまたは専用の物理スイッチに分離することを常にお勧めします。これにより、突然のバックアップジョブがデータベースのパフォーマンスを低下させるのを防ぐことができます。それでは、構築を楽しんでください!

Share: