2010年5月15日土曜日

RedHat における iSCSI 設定とマルチパス


このエントリーをはてなブックマークに追加


こちらも参考にしてみてください。
---------------------------------------------
参考>> 仮想環境を使って簡単にRHEL6のiscsiマルチパスを検証する
---------------------------------------------

Linux で iSCSI を使う方法と、マルチパス化する方法について記載する。

クライアント:RedHat Enterprise Linux 5.3
ストレージ:Solaris10 ZFS iSCSI


Solaris10側でのiSCSIの準備

(1) ネットワーク環境

テストするSolaris10環境がNIC1枚しかないので少々工夫する。

>ifconfig -a
lo0: flags=2001000849 mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
e1000g0: flags=1000843 mtu 1500 index 2
        inet 192.168.1.10 netmask ffffff00 broadcast 192.168.1.255
        ether 0:14:4f:4a:bb:6a
vboxnet0: flags=1000843 mtu 1500 index 3
        inet 192.168.56.1 netmask ffffff00 broadcast 192.168.56.255
        ether 8:0:27:79:a1:e4

論理インターフェースを作成し、IPを割り当てる。iSCSIはこの論理IPに対してアクセスする。

>ifconfig e1000g0:1 plumb
>ifconfig e1000g0:2 plumb
>ifconfig e1000g0:3 plumb
>ifconfig e1000g0:4 plumb
>ifconfig e1000g0:1 192.168.1.201 netmask 255.255.255.0 up
>ifconfig e1000g0:2 192.168.1.202 netmask 255.255.255.0 up
>ifconfig e1000g0:3 192.168.1.203 netmask 255.255.255.0 up
>ifconfig e1000g0:4 192.168.1.204 netmask 255.255.255.0 up

>ifconfig -a
lo0: flags=2001000849 mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
e1000g0: flags=1000843 mtu 1500 index 2
        inet 192.168.1.10 netmask ffffff00 broadcast 192.168.1.255
        ether 0:14:4f:4a:bb:6a
e1000g0:1: flags=1000843 mtu 1500 index 2
        inet 192.168.1.201 netmask ffffff00 broadcast 192.168.1.255
e1000g0:2: flags=1000843 mtu 1500 index 2
        inet 192.168.1.202 netmask ffffff00 broadcast 192.168.1.255
e1000g0:3: flags=1000843 mtu 1500 index 2
        inet 192.168.1.203 netmask ffffff00 broadcast 192.168.1.255
e1000g0:4: flags=1000843 mtu 1500 index 2
        inet 192.168.1.204 netmask ffffff00 broadcast 192.168.1.255
vboxnet0: flags=1000843 mtu 1500 index 3
        inet 192.168.56.1 netmask ffffff00 broadcast 192.168.56.255
        ether 8:0:27:79:a1:e4


(2)iSCSIターゲットの起動

>svcs -a |grep iscsi
disabled       18:17:06 svc:/system/iscsitgt:default

>svcadm enable svc:/system/iscsitgt:default

>svcs -a |grep iscsi
online         18:17:13 svc:/network/iscsi/initiator:default


(3)iSCSIボリュームの作成

>zfs create spool/iscsi
>zfs create -V 10gb spool/iscsi/iscsi01
>zfs list |grep iscsi
spool/iscsi                                 10.0G  4.22T  31.4K  /spool/iscsi
spool/iscsi/iscsi01                           10G  4.22T  23.9K  -


(4)iSCSIの基本設定

>iscsitadm modify admin -d /spool/iscsi
>iscsitadm show admin
iscsitadm:
    Base Directory: /spool/iscsi
    CHAP Name: Not set
    RADIUS Access: Not set
    RADIUS Server: Not set
    iSNS Access: Not set
    iSNS Server: Not set
    iSNS Server Status: Not applicable
    Fast Write ACK: Not set

(5)iSCSIボリュームの有効化
>iscsitadm show stats
                        operations    bandwidth
device                 read  write   read  write
--------------------  -----  -----  -----  -----

>iscsitadm list target
表示なし

>zfs set shareiscsi=on spool/iscsi/iscsi01
>iscsitadm show stats
                        operations    bandwidth
device                 read  write   read  write
--------------------  -----  -----  -----  -----
spool/iscsi/iscsi01       0      0     0K     0K

>iscsitadm list target -v
Target: spool/iscsi/iscsi01
    iSCSI Name: iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562
    Alias: spool/iscsi/iscsi01
    Connections: 0
    ACL list:
    TPGT list:
    LUN information:
        LUN: 0
            GUID: 0
            VID: SUN
            PID: SOLARIS
            Type: disk
            Size:   10G
            Backing store: /dev/zvol/rdsk/spool/iscsi/iscsi01
            Status: online



Linux側の作業

# uname -a
Linux rhel5-xvm 2.6.18-128.el5 #1 SMP Wed Dec 17 11:42:39 EST 2008 i686 i686 i386 GNU/Linux

# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.3 (Tikanga)


(1)事前パッケージの準備

iscsiイニシエータ
# rpm -qa |grep iscsi
iscsi-initiator-utils-6.2.0.868-0.18.el5

マルチパス
# rpm -qa |grep multi
device-mapper-multipath-0.4.7-23.el5


インストールメディアに含まれているので、インストールされていない場合はインストールしておく。


(2) LinuxからiSCSIターゲットを認識させる

初期は何も登録されていない。
# iscsiadm -m node
iscsiadm: no records found!

一つのIPを認識させると、付属する他のIPポータルも検索してくれる(余分なもののついてくる
# iscsiadm --mode discovery --type sendtargets --portal 192.168.1.201
192.168.1.10:3260,1 iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562
192.168.1.201:3260,1 iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562
192.168.1.202:3260,1 iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562
192.168.1.203:3260,1 iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562
192.168.1.204:3260,1 iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562
192.168.56.1:3260,1 iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562

余分なターゲットポータルを削除する。
# iscsiadm -m node -o delete -T iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562 -p 192.168.56.1:3260,1
# iscsiadm -m node -o delete -T iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562 -p 192.168.1.10:3260,1
# iscsiadm -m node
192.168.1.203:3260,1 iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562
192.168.1.201:3260,1 iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562
192.168.1.204:3260,1 iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562
192.168.1.202:3260,1 iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562


(3)ターゲットへログインする

最初は何もログインしていない
# iscsiadm -m session
iscsiadm: No active sessions.

ログインする
# iscsiadm -m node --login
Logging in to [iface: default, target: iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562, portal: 192.168.1.203,3260]
Logging in to [iface: default, target: iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562, portal: 192.168.1.201,3260]
Logging in to [iface: default, target: iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562, portal: 192.168.1.204,3260]
Logging in to [iface: default, target: iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562, portal: 192.168.1.202,3260]
Login to [iface: default, target: iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562, portal: 192.168.1.203,3260]: successful
Login to [iface: default, target: iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562, portal: 192.168.1.201,3260]: successful
Login to [iface: default, target: iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562, portal: 192.168.1.204,3260]: successful
Login to [iface: default, target: iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562, portal: 192.168.1.202,3260]: successful

ログインしたセッションを確認
# iscsiadm -m session
tcp: [6] 192.168.1.203:3260,1 iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562
tcp: [7] 192.168.1.201:3260,1 iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562
tcp: [8] 192.168.1.204:3260,1 iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562
tcp: [9] 192.168.1.202:3260,1 iqn.1986-03.com.sun:02:46de72a8-5705-ec14-c178-9fe760cbf562

ここで余分なセッションへログインしている場合は以下でログオフしておく
# iscsiadm -m node -p 192.168.XX.XX:3260,1 --logout

* iSCSI のセッションタイムアウトについて
パスにエラーが発生した場合、ターゲットポータルから何秒応答がなかったらエラーとみなすかを設定する必要がある。
ここでエラーをハンドルし、マルチパスデーモンに渡され、上位でパスの切り替えが行われる。
標準で120秒でエラーとなるように設定されている。
これを変更するには、
/etc/iscsi/iscsid.conf を編集

node.session.timeo.replacement_timeout = 120

デフォルトで120秒。ここを短くすることでフェイルオーバー速度を上げることができる。
ただし、短くしすぎると高負荷時に頻繁にパスの切り替えが発生してしまうので注意が必要。


(4)ディスクの確認

認識したディスクを確認
# fdisk -l
----------------------------------
Disk /dev/hda: 2199.0 GB, 2199022206976 bytes
255 heads, 63 sectors/track, 267349 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          65      522081   83  Linux
/dev/hda2              66         326     2096482+  82  Linux swap / Solaris
/dev/hda3             327      267349  2144862247+  83  Linux

Disk /dev/sda: 10.7 GB, 10737418240 bytes
64 heads, 32 sectors/track, 10240 cylinders
Units = シリンダ数 of 2048 * 512 = 1048576 bytes


ディスク /dev/sda は正常な領域テーブルを含んでいません


Disk /dev/sdb: 10.7 GB, 10737418240 bytes
64 heads, 32 sectors/track, 10240 cylinders
Units = シリンダ数 of 2048 * 512 = 1048576 bytes


ディスク /dev/sdb は正常な領域テーブルを含んでいません


Disk /dev/sdc: 10.7 GB, 10737418240 bytes
64 heads, 32 sectors/track, 10240 cylinders
Units = シリンダ数 of 2048 * 512 = 1048576 bytes


ディスク /dev/sdc は正常な領域テーブルを含んでいません


Disk /dev/sdd: 10.7 GB, 10737418240 bytes
64 heads, 32 sectors/track, 10240 cylinders
Units = シリンダ数 of 2048 * 512 = 1048576 bytes


ディスク /dev/sdd は正常な領域テーブルを含んでいません
----------------------------------
一つのディスクが複数の経路で見えていることが分かる。


(5)マルチパスの設定

ここからの設定は基本的にFC-SANでのマルチパス設定と変わらない。
device-mapper multipathを使用する。詳細は以前のエントリーを参照してください。

マルチパス対象となるデバイスのwwidを識別する。

二つの方法がある
[1.by-idを確認する]
# ls -l /dev/disk/by-id/
合計 0
lrwxrwxrwx 1 root root  9  5月 16  2010 ata-VBOX_CD-ROM_VB2-01700376 -> ../../hdc
lrwxrwxrwx 1 root root  9  5月 16  2010 ata-VBOX_HARDDISK_VB2b054e7c-64e79e01 -> ../../hda
lrwxrwxrwx 1 root root 10  5月 16  2010 ata-VBOX_HARDDISK_VB2b054e7c-64e79e01-part1 -> ../../hda1
lrwxrwxrwx 1 root root 10  5月 16  2010 ata-VBOX_HARDDISK_VB2b054e7c-64e79e01-part2 -> ../../hda2
lrwxrwxrwx 1 root root 10  5月 16  2010 ata-VBOX_HARDDISK_VB2b054e7c-64e79e01-part3 -> ../../hda3
lrwxrwxrwx 1 root root  9  5月 15 19:46 scsi-3600144f04bee77860000144f4abb6a00 -> ../../sdc

ここの表示は、fdisk -l で表示される全てのパスは表示されないので注意。
ただし、fdiskで表示されたデバイス名(sda, sdb, sdc, sdd)のどれかが、by-idに表示されるので、
ここでは 3600144f04bee77860000144f4abb6a00 がwwid だとわかる(scsi- の部分はいらない)

[2.scsiコマンドで確認する]
# /sbin/scsi_id -g -u -s /block/sda
3600144f04bee77860000144f4abb6a00

# /sbin/scsi_id -g -u -s /block/sdb
3600144f04bee77860000144f4abb6a00

# /sbin/scsi_id -g -u -s /block/sdc
3600144f04bee77860000144f4abb6a00

# /sbin/scsi_id -g -u -s /block/sdd
3600144f04bee77860000144f4abb6a00


/etc/multipath.conf を編集する。
------------------------------------
blacklist {
        devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
        devnode "^hd[a-z]"
}

blacklist_exceptions {
        wwid    "3600144f04bee77860000144f4abb6a00"
}

defaults {
        user_friendly_names yes
}
multipaths {
        multipath {
                wwid                    "3600144f04bee77860000144f4abb6a00"
                alias                   zfs-iscsi01
                path_grouping_policy    multibus
                path_checker            readsector0
                path_selector           "round-robin 0"
                failback                manual
                rr_weight               priorities
                no_path_retry           5
        }
}
----------------------------------------

# multipath -ll
zfs-iscsi01 (3600144f04bee77860000144f4abb6a00) dm-0 SUN,SOLARIS
[size=10G][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=4][enabled]
 \_ 0:0:0:0 sda 8:0   [active][ready]
 \_ 1:0:0:0 sdb 8:16  [active][ready]
 \_ 2:0:0:0 sdc 8:32  [active][ready]
 \_ 3:0:0:0 sdd 8:48  [active][ready]

これでマルチパスが設定されていることが確認できる。

# multipath -v 3
dm-0: blacklisted
fd0: blacklisted
hda: blacklisted
hdc: blacklisted
md0: blacklisted
ram0: blacklisted
ram10: blacklisted
ram11: blacklisted
ram12: blacklisted
ram13: blacklisted
ram14: blacklisted
ram15: blacklisted
ram1: blacklisted
ram2: blacklisted
ram3: blacklisted
ram4: blacklisted
ram5: blacklisted
ram6: blacklisted
ram7: blacklisted
ram8: blacklisted
ram9: blacklisted
sda: not found in pathvec
sda: mask = 0x1f
sda: bus = 1
sda: dev_t = 8:0
sda: size = 20971520
sda: vendor = SUN
sda: product = SOLARIS
sda: rev = 1
sda: h:b:t:l = 0:0:0:0
sda: serial =
sda: path checker = readsector0 (config file default)
sda: state = 2
sda: getprio = NULL (internal default)
sda: prio = 1
sda: getuid = /sbin/scsi_id -g -u -s /block/%n (config file default)
sda: uid = 3600144f04bee77860000144f4abb6a00 (callout)
sdb: not found in pathvec
sdb: mask = 0x1f
sdb: bus = 1
sdb: dev_t = 8:16
sdb: size = 20971520
sdb: vendor = SUN
sdb: product = SOLARIS
sdb: rev = 1
sdb: h:b:t:l = 1:0:0:0
sdb: serial =
sdb: path checker = readsector0 (config file default)
sdb: state = 2
sdb: getprio = NULL (internal default)
sdb: prio = 1
sdb: getuid = /sbin/scsi_id -g -u -s /block/%n (config file default)
sdb: uid = 3600144f04bee77860000144f4abb6a00 (callout)
sdc: not found in pathvec
sdc: mask = 0x1f
sdc: bus = 1
sdc: dev_t = 8:32
sdc: size = 20971520
sdc: vendor = SUN
sdc: product = SOLARIS
sdc: rev = 1
sdc: h:b:t:l = 2:0:0:0
sdc: serial =
sdc: path checker = readsector0 (config file default)
sdc: state = 2
sdc: getprio = NULL (internal default)
sdc: prio = 1
sdc: getuid = /sbin/scsi_id -g -u -s /block/%n (config file default)
sdc: uid = 3600144f04bee77860000144f4abb6a00 (callout)
sdd: not found in pathvec
sdd: mask = 0x1f
sdd: bus = 1
sdd: dev_t = 8:48
sdd: size = 20971520
sdd: vendor = SUN
sdd: product = SOLARIS
sdd: rev = 1
sdd: h:b:t:l = 3:0:0:0
sdd: serial =
sdd: path checker = readsector0 (config file default)
sdd: state = 2
sdd: getprio = NULL (internal default)
sdd: prio = 1
sdd: getuid = /sbin/scsi_id -g -u -s /block/%n (config file default)
sdd: uid = 3600144f04bee77860000144f4abb6a00 (callout)
===== paths list =====
uuid                              hcil    dev dev_t pri dm_st  chk_st  vend/pr
3600144f04bee77860000144f4abb6a00 0:0:0:0 sda 8:0   1   [undef][ready] SUN,SOL
3600144f04bee77860000144f4abb6a00 1:0:0:0 sdb 8:16  1   [undef][ready] SUN,SOL
3600144f04bee77860000144f4abb6a00 2:0:0:0 sdc 8:32  1   [undef][ready] SUN,SOL
3600144f04bee77860000144f4abb6a00 3:0:0:0 sdd 8:48  1   [undef][ready] SUN,SOL
params = 1 queue_if_no_path 0 1 1 round-robin 0 4 1 8:0 1000 8:16 1000 8:32 1000 8:48 1000
status = 2 0 0 0 1 1 E 0 4 0 8:0 A 0 8:16 A 0 8:32 A 0 8:48 A 0
3600144f04bee77860000144f4abb6a00: exception-listed
sda: ownership set to zfs-iscsi01
sda: not found in pathvec
sda: mask = 0xc
sda: state = 2
sda: prio = 1
sdb: ownership set to zfs-iscsi01
sdb: not found in pathvec
sdb: mask = 0xc
sdb: state = 2
sdb: prio = 1
sdc: ownership set to zfs-iscsi01
sdc: not found in pathvec
sdc: mask = 0xc
sdc: state = 2
sdc: prio = 1
sdd: ownership set to zfs-iscsi01
sdd: not found in pathvec
sdd: mask = 0xc
sdd: state = 2
sdd: prio = 1
zfs-iscsi01: pgfailback = -1 (LUN setting)
zfs-iscsi01: pgpolicy = multibus (LUN setting)
zfs-iscsi01: selector = round-robin 0 (LUN setting)
zfs-iscsi01: features = 0 (internal default)
zfs-iscsi01: hwhandler = 0 (internal default)
zfs-iscsi01: rr_weight = 2 (LUN setting)
zfs-iscsi01: minio = 1000 (config file default)
zfs-iscsi01: no_path_retry = 5 (multipath setting)
pg_timeout = NONE (internal default)
zfs-iscsi01: set ACT_NOTHING (map unchanged)
3600144f04bee77860000144f4abb6a00: exception-listed
3600144f04bee77860000144f4abb6a00: exception-listed
3600144f04bee77860000144f4abb6a00: exception-listed


(6)フォーマットしてマウントする

# ll /dev/mpath/
合計 0
lrwxrwxrwx 1 root root 7  5月 15 20:23 mpath0 -> ../dm-0

# parted /dev/mpath/mpath0
GNU Parted 1.8.1
/dev/dm-0 を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。

(parted) print
エラー: /dev/dm-0 を開けません。ディスクラベルが認識できません。

(parted) mklabel gpt
(parted) print

モデル: Linux device-mapper (dm)
ディスク /dev/dm-0: 10.7GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt

番号  開始  終了  サイズ  ファイルシステム  名前  フラグ

(parted) mkpart primary 0 10G
(parted) print

モデル: Linux device-mapper (dm)
ディスク /dev/dm-0: 10.7GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt

番号  開始    終了    サイズ  ファイルシステム  名前     フラグ
 1    17.4kB  10.7GB  10.7GB                    primary

(parted) quit


# kpartx -a /dev/mpath/mpath0
# ll /dev/mpath/
合計 0
lrwxrwxrwx 1 root root 7  5月 15 20:23 mpath0 -> ../dm-0
lrwxrwxrwx 1 root root 7  5月 15 21:11 mpath0p1 -> ../dm-2


# mkfs -t ext3 /dev/mpath/mpath0p1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1310720 inodes, 2621431 blocks
131071 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


# mkdir /mnt/mpath0
# mount -t ext3 /dev/mpath/mpath0p1 /mnt/mpath0

# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/hda3             2.0T  2.6G  1.9T   1% /
/dev/hda1             494M   16M  453M   4% /boot
tmpfs                 506M     0  506M   0% /dev/shm
/dev/dm-2             9.9G  151M  9.2G   2% /mnt/mpath0

以上で手順は終了。
後は、パス切断を行ってテストを行ってください。

CentOS徹底入門第2版

CentOS徹底入門第2版

価格:4,494円(税込、送料別)

0 件のコメント:

コメントを投稿