#author("2016-12-07T00:02:18+09:00","default:nowsky","nowsky") *iSCSI [#wc7c21ec] SCSIコマンドをTCP/IPでカプセリングする事で、既存のIP網でSCSIを扱えるようにする技術。 SAN(StorageAreaNetwork)の形成に利用する技術で、従来はFC(FiberChannel)が使われていた。 既存設備を流用出来るがiSCSIのメリットだがSCSIコマンドをIP網に流す為、 TCP/IPの性質上、パケット送受信・L2/L3スイッチの負荷は注視する必要がある。 iSCSIは&font(b){1対1のサーバ(iSCSIターゲット)・クライアント(iSCSIイニシエータ)方式};が基本体系となる為、 一つのターゲットに&color(#ff0000){複数のイニシエータを接続するのは非推奨};動作となる。 それでも接続する場合は、ターゲットをクラスタリング構成にするか、 複数イニシエータからの同時操作を抑制(排他)制御する必要がある。 よく、iSCSI・NFS・CIFSで比較される事があるが、 用途がそれぞれ違うので、必要に応じて最適な物を選択する。 ~ *参考サイト [#sa0f4edb] -[[Stray Penguin - iSCSI :+http://www.asahi-net.or.jp/~aa4t-nngk/iscsi.html]] -[[nkjmkzk.net - iSCSI Initiatorのタイムアウト設定:+http://www.nkjmkzk.net/?p=1298]] -[[iscsi-targetログイン認証付き。Linuxiscsiイニシエータ接続:+http://linux-story.seesaa.net/article/123790372.html]] -[[udevを使ってデバイス名を固定する:+http://ameblo.jp/itboy/entry-12061407921.html]] -[[Linuxで4096バイトセクタHDDをfdisk:+http://d.hatena.ne.jp/dayflower/20100330/1269931922]] ~ *iSCSIイニシエータ [#j1b241f6] -&size(16){&font(b){プログラムのインストール};}; ターゲットに接続する為のアプリがインストールされていない場合インストールしておく。 &font(b){iscsi};と&font(b){iscsid};で間違えそうだが、イニシエータツールは&font(b){&color(#ff0000){iscsi};};、接続を行うデーモンは&font(b){&color(#ff0000){iscsid};};となる。 # yum install iscsi-initiator-utils # chkconfig iscsid on ---- -&size(16){&font(b){基本設定};}; iSCSI利用環境では自動ログイン・マウントが基本になると思われるので、基本設定を変更する。 設定内容は基本的にそのまま(デフォルト)となるが、「node.startup」「node.session.auth.*」は下記の様に変更する。 # vi /etc/iscsi/iscsid.conf --- # iscsidの起動方法 iscsid.startup = /etc/rc.d/init.d/iscsid force-start # 自動起動・自動接続を行う node.startup = automatic # ログイン時の読込みを禁止 node.leading_login = No # デフォルトの認証方式をCHAPに変更 node.session.auth.authmethod = CHAP # コネクションエラー発生から、I/Oエラー応答までの待ち時間(単位:秒) node.session.timeo.replacement_timeout = 120 # ログイン時の待ち時間(単位:秒) node.conn[0].timeo.login_timeout = 15 # ログアウト時の待ち時間(単位:秒) node.conn[0].timeo.logout_timeout = 15 # ping死活監視間隔(単位:秒) node.conn[0].timeo.noop_out_interval = 5 # ping死活監視がエラーと判断するまでの待ち時間(単位:秒) node.conn[0].timeo.noop_out_timeout = 5 # デフォルトユーザ・パスワードをコメントアウト。CHAP認証情報は後で入力する #node.session.auth.username = iscsi_user #node.session.auth.password = iscsi_pass #node.session.auth.username_in = username_in #node.session.auth.password_in = password_in ---- -&size(16){&font(b){ターゲットへの接続};}; 念の為、ターゲット一覧を確認した上で接続(ログイン)を行う。 ターゲット指定で利用するIQN/EUIはターゲット側で生成した値を指定する。 今回は下記条件で作成したiSCSIターゲットへのログイン方法をメモしておく | 認証方法 | CHAP | | iSCSIターゲット | 192.168.0.1 | | ポート番号 | 3260 | | ポータルグループタグ | 1 | | IQN | iqn.2016-12.com.hoge:iscsi-target:iscsi.hostname.e12345 | | ログインユーザ名 | USER | | ログインパスワード | PASSWORD | ++ ターゲットが発見出来ているか確認 # iscsiadm -m node --- 192.168.0.1:3260,1 iqn.2016-12.com.hoge:iscsi-target:iscsi.hostname.e12345 ++ ターゲットが発見出来ない場合は、手動登録を行う # iscsiadm -m discovery -t sendtargets -p 192.168.0.1:3260 --- 192.168.0.1:3260,1 iqn.2016-12.com.hoge:iscsi-target:iscsi.hostname.e12345 ++ 認証方式・ユーザ・パスワードをイニシャルセットする # iscsiadm -m node -T iqn.2016-12.com.hoge:iscsi-target:iscsi.hostname.e12345 -p 192.168.0.1:3260,1 --op update -n node.session.auth.authmethod -v CHAP # iscsiadm -m node -T iqn.2016-12.com.hoge:iscsi-target:iscsi.hostname.e12345 -p 192.168.0.1:3260,1 --op update -n node.session.auth.username -v USER # iscsiadm -m node -T iqn.2016-12.com.hoge:iscsi-target:iscsi.hostname.e12345 -p 192.168.0.1:3260,1 --op update -n node.session.auth.password -v PASSWORD ++ ターゲットへのログイン # iscsiadm -m node -T iqn.2016-12.com.hoge:iscsi-target:iscsi.hostname.e12345 -p 192.168.0.1:3260,1 --login ++ ログイン情報の確認 # cat /var/lib/iscsi/send_targets/{ターゲットIPアドレス,ポート番号}/{IQN,ポータルグループ,ポート番号}/default ++ ターゲットからログアウト # iscsiadm -m node -T iqn.2016-12.com.hoge:iscsi-target:iscsi.hostname.e12345 -p 192.168.0.1:3260,1 --logout ++ ターゲットの削除 # iscsiadm -m node -o delete -T iqn.2016-12.com.hoge:iscsi-target:iscsi.hostname.e12345 -p 192.168.0.1:3260 ---- -&size(16){&font(b){デバイス名の固定化};}; Linuxのデバイス名(/dev/sd*)は、デバイスIDの順序によって順番に割り当てられている。 一度割り当てられたデバイス名が変更される事は基本的に無いのだが、 デバイス起動順序によっては&font(b){デバイス名が変わってしまう};事がある。 デバイス名の変更が発生すると、/etc/fstabのマウント指定に影響が出る為、 &font(b){udevを利用する事で&color(#ff0000){マウントポイントを固定化};させる。}; 色々な固定方法が存在するのだが、設定が一番楽だった下記手法を記載しておく。 ポイントはデバイス固定ルールで指定する&font(b){&color(#ff0000){「ENV{ID_SERIAL}」「NAME="sd*%n"」};};の二つとなる。 メモは下記条件を元に作成。コマンド実行結果は長いので必要な部分のみ抜粋する。 | 変更前デバイス名 | /dev/sdb | | 変更前のマウントポイント1 | /dev/sdb1 | | 変更前のマウントポイント2 | /dev/sdb2 | | 固定後デバイス名 | /dev/sdc | | 固定後のマウントポイント1 | /dev/sdc1 | | 固定後のマウントポイント2 | /dev/sdc2 | ++ iSCSIターゲットのデバイスシリアル番号の確認 # udevadm info --query=all --name=/dev/sdb | grep ID_SERIAL= | sed 's/.*=//g' --- abcdef111222333444555666777888999 ++ デバイス固定ルールの作成 # vi /etc/udev/rules.d/80-scsi.rules --- SUBSYSTEM=="block", ENV{ID_BUS}=="scsi", ENV{ID_SERIAL}=="abcdef111222333444555666777888999", NAME="sdc%n", OWNER:="root", GROUP:="disk", MODE:="0660" ++ デバイスの再認識 # start_udev ++ デバイス認識状況の再確認 # ls -l /dev/disk/by-path ++ デバイスのパーミッション確認 # ls -l /dev/sdc* --- brw-rw---- 1 root disk 8, 30 12月 1 12:00 2016 /dev/sdc brw-rw---- 1 root disk 8, 31 12月 1 12:00 2016 /dev/sdc1 ---- -&size(16){&font(b){HDDのフォーマット};}; ターゲットへの接続とデバイス番号の固定化が完了したら、 普通のローカルHDDと同様にパーティション設定・フォーマットを行う。 この時、イニシエータでログインしたターゲットHDDが&font(b){&color(#ff0000){4Kバイトセクタモード};};で作成されていた場合、 パーティションの開始位置を&font(b){&color(#ff0000){0から64(8の2倍)};にずらした上で、フォーマットを行う};必要がある。 この辺りは、ググれば幾らでも出てくるのでメモは割愛...? ---- -&size(16){&font(b){HDDのマウント};}; フォーマットが終わった後はfstabにマウントポイントなどを設定するのだが、 iSCSIを使っている事からネットワークマウントを行う為の設定である&font(b){&color(#ff0000){「_netdev」};};を追加する。 例としてext4でフォーマットしたパーティションのコンフィグ作成内容をメモしておく ++ パーティションUUIDの取得 # blkid /dev/sdc1 --- /dev/sdc1: UUID="f424f1fa-cd1f-4780-94d1-e686897f809e" TYPE="ext4" ++ fstabルールの作成 # vi /etc/fstab --- UUID=f424f1fa-cd1f-4780-94d1-e686897f809e /mnt/sdc1 ext4 defaults,_netdev 1 2 ++ マウント # mkdir /mnt/sdc1 # mount -a