LoginSignup
8
7

More than 3 years have passed since last update.

【iSCSI】SANの構築

Last updated at Posted at 2020-09-04

目標

iSCSIを利用してSANを構築(AWS環境上に構築)し、動作を確認する。

はじめに

学習のためAWSネットワーク上にiSCSIによるSAN構築をしてみたのですが、AWSには高速ネットワークストレージのEBSがあるので、
そこに自らSANを構築するメリットが正直あるのか私にはわからないです。。ただ学習用のハンズオンということでご容赦頂ければと思います。

前提

・AWS EC2サーバ2台が構築済みであること(ターゲットとして利用する側のEC2にはデータボリューム/dev/sdbをアタッチし、セキュリティグループで3260番ポートを開けておく)

利用環境

仮想マシン : AWS EC2サーバ 2台
OS(AMI) : Red Hat Enterprise Linux 8 (HVM), SSD Volume Type

iSCSIとは

TCP/IPネットワーク上でSCSI接続を利用可能にする仕組みです。
iSCSIを利用することローカルストレージ同然にネットワーク上のストレージを利用することが可能となります。
また、iSCSI等によって構築されたストレージ専用ネットワークSAN(※)と呼びます。

※補足
SANの実装方法に関しては『Fibre Channel (ファイバチャネル,略称FC)』や『FC over Ethernet (読み方:エフシーオーイー, 略称FCoE)』、『iSCSI (読み方:アイスカジー)』といったものがあり、
Fibre Channel を利用したSANは高速だが、専用のデバイスが必要なため高価というデメリットがあります。
それに対しFC over Ethernet(SCSI コマンドを Ethernet にカプセル)やiSCSI(SCSI コマンドを Ethernet および IPにカプセル化)はカプセル化に伴うオーバヘッドが存在するため多少速度は遅くなりますが、
一般のネットワーク機器が利用できるため安価というメリットがあります。

参考にさせて頂いたサイト
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典(iSCSIとは)
【図解】初心者にも分かる iSCSI の仕組み ~FCやNAS(NFS)との違いやメリット,デメリット~(SAN の種類とメリット・デメリット)

SANとNASの違い

SANと似た概念にNASが存在します。
SANがLANとは独立したストレージ専用ネットワークであるのに対し、
NASはLANに接続されたストレージのことを指し、よくあるファイルサーバはこのNASのことを指します。
NASの実装方式にはNFSやSamba等があります。

双方のメリットは簡単に記載すると以下となります。

SAN
NASと比べて処理が高速

NAS
競合を気にすることなく、複数のサーバOSが同時に NAS を利用可能

より詳しくは、参考にさせて頂いたサイト
【図解】初心者にも分かる iSCSI の仕組み ~FCやNAS(NFS)との違いやメリット,デメリット~(NAS (CIFS, NFS接続) との違い、メリット・デメリット)

作業の流れ

項番 タイトル
1 イニシエータの構築
2 ターゲットの構築
3 イニシエータからターゲットへの接続
4 iSCSIストレージを実際に利用可能にする

手順

1.イニシエータの構築

iSCSIクライアントであるイニシエータの構築を行います。

①イニシエータ用パッケージのインストール
イニシエータに必要なパッケージをインストールします。

イニシエータとして利用するEC2にOSログイン後、まずはルートスイッチ
sudo su -

イニシエータ用パッケージをインストールします。
yum install -y iscsi-initiator-utils

②イニシエータ用サービスの起動
サービス起動→サービス状態確認→サービス自動起動有効化
systemctl start iscsid.service
systemctl status iscsid.service
systemctl enable iscsid.service

③イニシエータのIQN確認
構築したイニシエータのIQN(iSCSI上でイニシエータやターゲットを識別するための識別名)を確認します(ここで出力されるイニシエータのIQNは、ターゲット構築時のACL設定で利用するのでメモします)。

cat /etc/iscsi/initiatorname.iscsi実行

# InitiatorName=<イニシエータのIQN>が出力されること
[root@ip-172-31-35-67 ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.redhat:32c11771b058

2.ターゲットの構築

iSCSIストレージであるターゲットを構築します。

①ターゲット用EC2サーバの設定確認(セキュリティグループ、データボリューム)
ターゲットとして利用するEC2セキュリティグループの3260番ポート(iSCSI利用ポート)が開いていることを確認してください。
tempsnip.png

iSCSIストレージのバックストアとして利用するデータボリューム/dev/sdb(サイズは8GBとしました)もアタッチしておきます。
tempsnip.png

②ターゲット用パッケージのインストール
ターゲットとして利用するEC2にOSログイン後、ルートスイッチ
sudo su -

ターゲット設定用パッケージのtargetcliをインストールします。
yum install targetcli

③サービス起動
サービス起動→サービス状態確認→サービス自動起動有効化
sytemctl start target.service
systemctl status target.service
systemctl enable target.service

④ターゲット構築
ターゲットではtargetcliコマンドを利用してターゲットの設定を行います。
targetcliを引数なしで実行することで対話型の使用となります。

targetcli実行(※)
※コマンド失敗時
ディストリビューションによっては必要なパッケージがインストールされていなくコマンドが失敗する可能性があります。
その場合yum install dbus && yum install dbus-pythonを実行後、再度targetcliを実行してみてください。

# エラーなくiSCSIコンソールに遷移すること。
[root@ip-172-31-34-219 ~]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.51
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

# LINUXと同様、lsコマンドを実行することでiSCSIの構成(ディレクトリ形式)を確認することが可能
/> ls
o- / .................................................................. [...]
  o- backstores ....................................................... [...]
  | o- block ........................................... [Storage Objects: 0]
  | o- fileio .......................................... [Storage Objects: 0]
  | o- pscsi ........................................... [Storage Objects: 0]
  | o- ramdisk ......................................... [Storage Objects: 0]
  o- iscsi ..................................................... [Targets: 0]
  o- loopback .................................................. [Targets: 0]
/>

まずはバックストア(iSCSIで利用する実ストレージ。ブロックデバイスを指定するのが一般的)の設定を行います。
今回はデータボリューム/dev/xvdb(EC2の/dev/sdbはOS上では/dev/xvdbとしてマッピングされる)をバックストアとして利用します。
またバックストア名はtest-back-storeとしました。

iSCSIコンソール上で以下コマンドを実行
cd /backstores/block
create name=test-back-store dev=/dev/xvdb

# 「Created block storage object test-back-store using /dev/xvdb.」と出力されること。
/> cd /backstores/block
/backstores/block> create name=test-back-store dev=/dev/xvdb
Created block storage object test-back-store using /dev/xvdb.

続いてiSQSIターゲットを作成します。
IQNを`iqn.2020-09.com.example.redhat:target0として設定しました。

以下コマンドを実行
cd /iscsi
create iqn.2020-09.com.example.redhat:target0

# 「Created block storage object test-back-store using /dev/xvdb.」と出力されること。
/backstores/block> cd /iscsi
/iscsi> create iqn.2020-09.com.example.redhat:target0
Created target iqn.2020-09.com.example.redhat:target0.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.

なお、iSCSIコンソール上で引数なしcdを実行すると、カーソルを利用したディレクトリ移動が可能です。

cd実行
以下の図のように、o- lunsにカーソル移動しENTER
image.png
続いてLUN(iSCSIターゲットの論理ドライブ番号。言い換えるならば、iSCSIターゲットに紐づけられたバックストア群)を設定し、バックストアとiSCSIターゲットの紐づけを行います。

create /backstores/block/test-back-store実行


# 「Created LUN 0.」と出力されること
/iscsi/iqn.20...et0/tpg1/luns> create /backstores/block/test-back-store
Created LUN 0.

iSCSIターゲットのACL(アクセス制御リスト。簡単に言うと、どのiSCSIイニシエータから(該当IQNの)iSCSIターゲットに接続を許可するのか、という設定。)にiSCSIイニシエータ構築時に確認したiSCSIイニシエータのIQNを登録し、イニシエータ⇔ターゲット間の疎通を可能とさせます。

以下コマンド実行
cd ../acls
create iqn.1994-05.com.redhat:32c11771b058


# 「Created Node ACL for <iSCSIイニシエータのIQN>」「Created mapped LUN 0.」が出力されること
/iscsi/iqn.20...et0/tpg1/luns> cd ../acls
/iscsi/iqn.20...et0/tpg1/acls> create iqn.1994-05.com.redhat:32c11771b058
Created Node ACL for iqn.1994-05.com.redhat:32c11771b058
Created mapped LUN 0.

最後にiSCSIターゲットの設定内容を保存し、iSCSIコンソールを終了します。

cd /
saveconfig
exit

# saveconfig実行後、「Configuration saved to /etc/target/saveconfig.json」と出力されること。
/iscsi/iqn.20...et0/tpg1/acls> cd /
/> saveconfig
Configuration saved to /etc/target/saveconfig.json
/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json

3.イニシエータからターゲットへの接続

イニシエータからターゲットへの接続を試みます。

iscsiadmコマンドを利用してiSCSIイニシエータからiSCSIターゲットの情報を確認します。

iscsiadm -m discovery -t sendtargets -p <iSCSIターゲットのプライベートIPアドレス>実行

# iSCSIターゲットのIQN(iqn.2020-09.com.example.redhat:target0)が出力されること
[root@ip-172-31-35-67 ~]# iscsiadm -m discovery -t sendtargets -p 172.31.34.219
172.31.34.219:3260,1 iqn.2020-09.com.example.redhat:target0`

iSCSIターゲットにログインします。

iscsiadm -m node --login実行


# ログイン成功メッセージが出力されること。
[root@ip-172-31-35-67 ~]# iscsiadm -m node --login
Logging in to [iface: default, target: iqn.2020-09.com.example.redhat:target0, portal: 172.31.34.219,3260]
Login to [iface: default, target: iqn.2020-09.com.example.redhat:target0, portal: 172.31.34.219,3260] successful.

lsblk(ブロックデバイスの一覧表示)に-Sオプションを付けることで、
SCSIデバイスのみを表示可能となります。
以下のようにiSCSIストレージの内容が出力されれば、iSCSIストレージが利用可能となりOKです。

lsblk -S実行

[root@ip-172-31-35-67 ~]# lsblk -S
NAME HCTL       TYPE VENDOR   MODEL             REV TRAN
sda  2:0:0:0    disk LIO-ORG  test-back-store  4.0  iscsi

4.iSCSIストレージを実際に利用可能にする

以下操作をイニシエータ側から実施します。

①iSCSIストレージのマウント
接続したiSCSIストレージはイニシエータ側では/dev/sdaとして認識されたようなので、/dev/sdaのパーティションを1つ切ります。

fdisk /dev/sda

# 2GBのパーティションを1つ作成
[root@ip-172-31-35-67 ~]# fdisk /dev/sda

elcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xcc899df6.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-16777215, default 2048): 2048
Last sector, +sectors or +size{K,M,G,T,P} (2048-16777215, default 16777215): +2G

Created a new partition 1 of type 'Linux' and of size 2 GiB.

Command (m for help): w

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

ファイルシステム(ext3)の作成
mke2fs -j /dev/sda1

# エラー出力がないこと
[root@ip-172-31-35-67 ~]# mke2fs -j /dev/sda1
mke2fs 1.45.4 (23-Sep-2019)
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: 120ec71d-090a-4647-94ed-7f38a6d39fd9
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

/mntにマウント
mount /dev/sda1 /mnt

# エラーが出力されないこと
[root@ip-172-31-35-67 ~]# mount /dev/sda1 /mnt
[root@ip-172-31-35-67 ~]#

マウント状態確認
df -h

# /dev/sda1がエントリにあればOK
[root@ip-172-31-35-67 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        386M     0  386M   0% /dev
tmpfs           408M     0  408M   0% /dev/shm
tmpfs           408M   11M  398M   3% /run
tmpfs           408M     0  408M   0% /sys/fs/cgroup
/dev/xvda2       10G  1.2G  8.9G  12% /
tmpfs            82M     0   82M   0% /run/user/1000
/dev/sda1       2.0G  3.1M  1.9G   1% /mnt

※参考
興味本位の操作です。
iSCSIストレージ側からみても、ext3が作成されているのが分かります。
また、iSCSI側でマウントをしようとすると既にイニシエータでストレージが利用されているため、マウントエラーとなります。

# 以下はiSCSIストレージ側で実行
[root@ip-172-31-34-219 ~]# sudo parted -l
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdb: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

# ext3ファイルシステム構築されている
Number  Start   End     Size    Type     File system  Flags
 1      1049kB  2149MB  2147MB  primary  ext3

# イニシエータでストレージが利用されているため、マウントエラー
[root@ip-172-31-34-219 ~]# mount /dev/xvdb1 /mnt
mount: /mnt: /dev/xvdb1 already mounted or mount point busy.

参考書籍

Linux教科書 LPICレベル2 Version4.5対応

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7