CetnOS7でiSCSIターゲットを構築2018/11/17CentOSストレージ以前、自宅にESXiを構築しました。ESXi上の仮想マシンのディスクイメージは、業務ではESXiローカルに配置することはほぼなく、別ホストのSANストレージ上に配置することがほとんどです。ESXiのストレージ接続の勉強のために、自宅CentOS機でiSCSIターゲットを構築したため、その手順をメモっておきます。勉強のための勉強です。長くなったのでESXiからのマウントは別記事で。targetcliのインストール&target起動これがCentOS7においてiSCSIターゲットを構築・管理するツールです。私のCentOS機ではデフォルトで入っていました。targetclitargetcli-2.1.fb46-6.el7_5.noarch12自動起動を有効にし、サービスを開始します。LVMでiSCSI用ブロックデバイスの作成targetは様々な形式でSANを提供できるようです。ファイルシステム上に作成したファイルをSANディスクとして提供したり、ブロックデバイスをそのままSANディスクとして提供したり、SCSIコマンドをパススルーしてSCSIデバイスを直接提供したり、RAMディスクを提供したり。このSANの提供方式、すなわちデータを格納している実体のことをバックストアと呼ぶそうです。参考:https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/storage_administration_guide/ch24今回は一番オーソドックスなブロックデバイス形式を採用します。/dev/sdaなどと言った生のディスクをそのままブロックデバイスとして提供できるのですが、後からの容量の追加・変更がめんどくさいので、生のディスク上にパーティションを切り、LVMを乗せ、論理ボリュームを提供することとします。今回は新しくSSDを買いました。CentOS機にSATAケーブルで接続し、それが/dev/sdcとして認識されたところから始めます。ちなみにlsblkコマンドのiオプションはASCII形式で出力するオプション。Teratermとかからコピぺする際に文字化けを防ぐのに便利です(ブログ書くためにググって知った)。gdiskコマンドでパーティションを切ります。LVM(8e00)とします。現状こうなっていました。inherit123456789101112131415新規ボリュームグループを作成し、そこにさっき作成したパーティションを参加させ、ボリュームグループの容量100%で論理ボリュームを切ります。created.123456こうなりました。inherit1234567891011121314151617181920212223ディスクを追加・変更した際は/etc/fstabを編集するのが通例ですが、今回はブロックデバイスを直接SANディスクとするため不要です。私も「よく考えたらそうか」って感じだったのですが、fstabはその名の通りファイルシステムのマウント設定ですので今回は無関係です。CentOSからファイルシステムを作成するわけではないですし、マウントするわけでもありません。targetcliでバックストアの作成targetcliでtargetの設定を変更していきます。今回は対話型でコマンドを打っていきますが、非対話型でやることもできます。targetcliコンソールに入ったら、targetcliのlsサブコマンドをたたき、どんな設定があるか確認します。0]123456789101112131415バックストアとは、SANストレージのデータが保存される実体です。先述の通り、4種類のバックストアの形式があります。今回はブロックデバイス形式で。/backstores/block/のツリーに移動し、createサブコマンドでブロックデバイスをバックストアに追加します。/dev/VgISCSI/LvISCSI.123一旦targetcliの設定のルートに戻り、lsサブコマンドを叩くとこうなっている。続いて、/iscsiのツリーに移動し、createサブコマンドでiscsiターゲットを作成します。ターゲットにはiqnという一意の名前を付ける必要があります。命名規則はネットに転がってます。3260.123456/iscsiのツリーにこんな設定ができました。targetcliコマンドでiscsiターゲットにLUNの追加ここで実際にブロックデバイスをiscsiターゲットに紐づけます。さっき作ったiqnのiscsiターゲットのツリー内のtpg1/lunsに移動し、backstores内のブロックデバイスを指定してLUNを作成します。0.123さっき作ったiqnのツリーにこんな設定ができました。targetcliで待ち受けIPアドレスの設定iqnのツリー内のtpg1/portals内に、待ち受けIPアドレス、ポート番号の設定が保存されています。デフォルトでは0.0.0.0:3260であり、全てのNICでiSCSIイニシエータを待ち受けるため、特定のNICのIPアドレスに変更します。デフォルトの設定を削除した後に、新規にIPアドレス、ポート番号を変更します。192.168.90.1:3260.123456789こうなります。targetcliでaclにiscsiイニシエータのiqnを登録iscsiでは、iscsiイニシエータ側のiqnを事前にターゲット側に登録しておくことでアクセス制御を行います。iqn内のtpg1/aclに移動し、ターゲットにiqnをcreate1サブコマンドで登録しておきます。最終的にこうなりました。0]123456789101112131415161718192021保存してtargetcliから抜け、targetを再起動することで設定が有効になります。ファイアウォール穴あけiSCSIターゲットが待ち受けるポート3260/tcpを開けます。実際に効果があるのかまだ検証できてないですが、iSCSIでブロックデバイスのデータを直接やり取りするなど、巨大なファイルを扱う通信が多い場合、mtu上限値を上げ、ジャンボフレームに対応させることで、パケットの分割・結合の手間が省け、通信性能が上がることが多いそうです。ipコマンドで現在のmtuを確認。デフォルトの1500となっています。forever(snip)123456789enp1s0のコネクション名を確認し、そのコネクションのmtu設定を確認します。NetworkManagerなので、mtuがなんていうプロパティで保存されているのかはおそらく個人差あります。自動123456789私の環境では802-3-ethernet.mtuというプロパティにmtu設定が保存されているようでしたので、それを9000くらいに設定し、NICを再起動して設定をリロードします。1"```無事mtu値が9000になっていることを確認します。forever(snip)12345678910111213141516長かったですが、これでCentOS側(ISCSIターゲット側)の設定は終わり。実務じゃ使うことない知識ですが、どのストレージ製品も中身はたぶんOSSなので、GUIの設定画面の裏でもこんなことが行われているんじゃなかろうかと思います。ESXiからのマウントはまた別記事で書きます。