CentOS Stream 9でiSCSI Initiatorを設定する:企業環境向けSAN/NASディスク接続ガイド

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

iSCSIかFibre Channelか — あなたのインフラに適した選択は?

かつてNetAppのストレージシステムを持つ会社で働いていたとき、LinuxサーバーをSANに接続する際に最初に出てくる疑問は常に:iSCSIかFibre Channel(FC)か?でした。これは「どちらが優れているか」ではなく「現在のインフラに適しているのはどちらか」という問いです。

FCはレイテンシが1ms以下でスループットも非常に安定していますが、専用のHBAカード(約$300〜500/枚)や専用FCスイッチが必要で、初期コストは数万ドルに達することも。iSCSIは既存のEthernet/IP環境で動作し、特別なハードウェアは不要です。10GbEなら中規模企業のワークロードには十分なスループットが得られます。SMBやdev/test環境では、現実的な選択肢はかなり明確です。

iscsiadm対Cockpit対iSNS:何を使うべきか?

CentOS/RHELでiSCSI initiatorを管理する方法はいくつかあります。実際に三つとも試した結果をご紹介します:

  • iscsiadm(CLI):公式ツールで全機能対応、スクリプト化も可能 — 本番環境で使えるのはこれ。構文はやや冗長ですが、慣れれば問題ありません。
  • Cockpit + iSCSIモジュール:ブラウザGUI、CLI不慣れな管理者に便利 — ただしコントロールが少なく、エラー時のデバッグが難しい。
  • iSNS(Internet Storage Name Service):iSCSIのDNSのようなもの、大規模ストレージ環境での自動検出 — 別途iSNSサーバーのインストールが必要で、数十LUN程度なら過剰です。

sendtargets対静的ノード対iSNS

あまり解説されていませんが、セットアップ時に重要な部分です:

  • sendtargets:iSCSIポータルに直接クエリし、サーバーがターゲットのリストを返す — シンプルで、ポータルのアドレスが分かれば使えます。筆者が90%の場面で使う方法。
  • 静的ノード(Static node):ディスカバリーなしでターゲットのIQNを直接設定 — ターゲットが確定していてより細かく制御したい場合に使用。
  • iSNS:大規模エンタープライズ環境での自動検出 — 専用iSNSサーバーが必要で、ターゲットが数百台ある場合に適切。

実際のところ、90%のケースではsendtargets + iscsiadmだけで十分です — 補助サーバーへの依存なし、スクリプト化も容易で、デバッグもはるかにシンプルです。

実践的な導入:インストールからディスクマウントまで

ステップ1:iSCSI Initiatorのインストール

CentOS Stream 9はiscsi-initiator-utilsパッケージを使用します:

sudo dnf install -y iscsi-initiator-utils
sudo systemctl enable --now iscsid

initiatorのIQN(iSCSI Qualified Name)を確認します — ストレージシステム上のサーバーの「識別アドレス」です:

cat /etc/iscsi/initiatorname.iscsi
# 出力例:InitiatorName=iqn.1994-05.com.redhat:xxxxxxxx

IQNはマシンごとに一意です。IQNを変更せずにVMをクローンすると、アクティブなセッションと競合が発生します — サーバーをマイグレーションした際に実際に遭遇したエラーです。

ステップ2:CHAP認証の設定

「内部ストレージネットワークに認証は不要」という理由でこのステップは省略されがちです。しかし、iSCSIにはデフォルトの暗号化がなく、トラフィックは平文で送信されます。CHAPは少なくとも認証を提供し、ターゲットをネットワークセグメント全体に公開しないようにします:

sudo vi /etc/iscsi/iscsid.conf

以下の行を見つけて修正します:

# CHAPを有効にする
node.session.auth.authmethod = CHAP

# 認証情報(ストレージ管理者に確認すること)
node.session.auth.username = your_username
node.session.auth.password = your_password

# Mutual CHAPが必要な場合(ターゲットがinitiatorを逆方向に認証する)
node.session.auth.username_in = target_username
node.session.auth.password_in = target_password

ステップ3:Discovery — iSCSIターゲットの検出

sendtargetsを使って検出します(192.168.1.100はiSCSIポータルのIPに置き換えてください):

sudo iscsiadm -m discovery -t sendtargets -p 192.168.1.100:3260

出力には利用可能なターゲットが一覧表示されます:

192.168.1.100:3260,1 iqn.2024-01.com.company:storage.lun01
192.168.1.100:3260,1 iqn.2024-01.com.company:storage.lun02

ステップ4:ターゲットへのログイン

検出したすべてのターゲットにログインします:

sudo iscsiadm -m node --loginall=automatic

または特定のターゲットにログインします:

sudo iscsiadm -m node \
  --targetname "iqn.2024-01.com.company:storage.lun01" \
  --portal "192.168.1.100:3260" \
  --login

アクティブなセッションを確認します:

sudo iscsiadm -m session -P 1

ステップ5:ディスクの認識を確認

ログインが成功すると、カーネルはLUNを通常のSCSIデバイスとして認識します — 再起動は不要です:

lsblk
# または
sudo fdisk -l | grep "Disk /dev/sd"

/dev/sdb/dev/sdc…などが新たに表示されていれば — それがiSCSI LUNです。

ステップ6:フォーマットとマウント

# XFSでフォーマット(ストレージワークロードに推奨)
sudo mkfs.xfs /dev/sdb

# マウントポイントを作成
sudo mkdir -p /mnt/iscsi-data

# テストマウント
sudo mount /dev/sdb /mnt/iscsi-data

# 確認
df -hT /mnt/iscsi-data

ステップ7:起動時の自動マウント — このステップを見落とさないでください

iSCSIマウントが通常のディスクと異なる重要な点:マウント前にネットワークが準備されている必要があります。/etc/fstab_netdevオプションがないと、マウントタイムアウト待ちでサーバーがブート画面で止まる可能性があります — このミスだけで起動のたびに90秒余計にかかるのを実際に見たことがあります:

sudo blkid /dev/sdb  # UUIDを取得
sudo vi /etc/fstab
# 以下の行を追加(実際のUUIDに置き換えること):
UUID=xxxx-xxxx-xxxx  /mnt/iscsi-data  xfs  defaults,_netdev,nofail  0 0

nofailオプションにより、ストレージターゲットが利用できない場合でもサーバーのブートが止まりません。関連サービスを有効化します:

sudo systemctl enable iscsi iscsid
sudo systemctl enable remote-fs.target

実践的なヒント — 緊急マイグレーション作業から学んだこと

CentOS 8のEOL時、1週間でRocky Linuxへ5台のサーバーを緊急マイグレーションしなければなりませんでした — ストレージのダウンタイムが本番データベースに直接影響するため、iSCSIが最もストレスのある部分でした。その作業から学んだことをまとめます:

  • マイグレーション前にIQNを記録する:旧マシンと新マシンのIQNは異なります。ストレージ管理者がIQNでACLを設定している場合は更新を依頼する必要があります — そうしないとログインしてもLUNが見えず、デバッグに半日費やすことになります。
  • 可能であればマルチパスを使用するdevice-mapper-multipathパッケージにより、同じLUNへの複数パスが可能になります — 1本のネットワーク経路が切断されても自動フェイルオーバー。本番データベースでは「あると便利」ではなく、ほぼ必須です。
  • MTUの整合性を確認する:Jumbo Frames(MTU 9000)はiSCSIのスループットを大幅に改善しますが、NIC → スイッチ → ストレージアレイまでのパス全体で統一する必要があります。MTUの不一致はパケットフラグメンテーションを引き起こし、スループットが30〜40%低下しますがログには異常が表示されません — このタイプのバグは見つけるのに数時間かかります。
  • ストレージトラフィック用に専用ネットワークを使用する:管理トラフィックとNICを共用しないこと。少なくとも専用VLANを使用する — バックアップジョブが実行中にデータベースのストレージを詰まらせる事態を防ぎます。

よくあるエラーのトラブルシューティング

ログイン失敗 — 認証エラー

# ノードにCHAPを直接更新
sudo iscsiadm -m node \
  --targetname "iqn.2024-01.com.company:storage.lun01" \
  --portal "192.168.1.100:3260" \
  -o update \
  -n node.session.auth.authmethod -v CHAP

sudo iscsiadm -m node \
  --targetname "iqn.2024-01.com.company:storage.lun01" \
  --portal "192.168.1.100:3260" \
  -o update \
  -n node.session.auth.username -v your_user \
  -n node.session.auth.password -v your_pass

リブート後にターゲットが再接続されない

# ノードのスタートアップモードをautomaticに設定
sudo iscsiadm -m node -o update -n node.startup -v automatic

# サービスが実行中か確認
sudo systemctl status iscsid iscsi

メンテナンス時の安全なログアウト

# 先にアンマウント — 重要、このステップをスキップしないこと
sudo umount /mnt/iscsi-data
sudo sync

# その後にログアウト
sudo iscsiadm -m node --logoutall=all

CentOS Stream 9上のiSCSIは本番環境対応で、データベースストレージとして十分な安定性を持っています — 実際に数十LUNの環境で運用していますが問題は発生していません。セットアップが失敗する原因はツールの複雑さではなく、よく見落とされる三つのポイントです:CHAP認証、HAのためのマルチパス、そしてfstabの_netdev。この三つを正しく設定すれば、残りはかなりスムーズに進みます。

Share: