2011年5月15日日曜日

仮想環境を使って簡単にRHEL6のiscsiマルチパスを検証する


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


iscsi + multipath は仮想環境を使うと簡単にテストできるので、初めて本番環境で触ることになる人とか、触ったことないけどどんなものか知りたいって人はこの方法を試してみてください。

Table of Contents
=================
1 準備するもの
 1.1 仮想化ソフト
 1.2 Solaris10の環境
 1.3 このテストで構築している環境
2 ストレージサーバの準備
 2.1 仮想マシンの作成
 2.2 仮想マシンのネットワーク構成
 2.3 Solaris10のインストール
 2.4 Solaris10の準備
3 iscsi クライアント
 3.1 RHEL6でのテスト
  3.1.1 準備
  3.1.2 iscsiセッションを張る
  3.1.3 補足
  3.1.4 マルチパスを構成する準備
  3.1.5 マルチパスの設定
  3.1.6 マルチパス化されたストレージを使う
  3.1.7 テストしてみる


1 準備するもの

1.1 仮想化ソフト

VMware Server/workstationやVirtualBoxがいいでしょう。私はVirtualBoxを使っています。ESX系を使えば仮想スイッチを構成して綺麗にネットワークが分離できますが、特に必須ではないです。


1.2 Solaris10の環境

これもSolaris10じゃなくてもいいですが、Solaris10だとZFSのshareiscsiが使えるの凄く簡単になります。

これらの環境は上であげてあるものを必ずしも使う必要はありません。好きな環境を使いましょう。ここでは VirtualBox + Solaris10 を使っています。



2 ストレージサーバの準備

2.1 仮想マシンの作成

Solaris側もクライアント側もNICを4つくらいつける。それだけ。


2.2 仮想マシンのネットワーク構成

上で作ったネットワークポートが通信できるように構成しましょう。いちばん簡単なのは全てブリッジか、全て内部ネットワーク。セグメントを考慮してスイッチをわけてもいいし、分けなくてもテストできます。ここでは全てブリッジ接続します。全て同じネットワークに属していても複数セグメントを使った通信の検証はできます。


2.3 Solaris10のインストール

ZFSを使えるようにしましょう。インストール時にルート領域のフォーマットを聞かれますのでZFSを選ぶだけです。


2.4 Solaris10の準備

いくつかSolaris側でやっておくこと。

sshdにrootでログインできるようにする。検証には便利です。
[root@sol10 ~]# vi /etc/ssh/sshd_config

PermitRootLogin yes
[root@sol10 ~]# svcadm restart ssh

ip を各インターフェースに割り当てる。ここでは全てのインターフェースに別のセグメントを割り当てます。
[root@sol10 ~]# ifconfig e1000g1 plumb
[root@sol10 ~]# ifconfig e1000g2 plumb
[root@sol10 ~]# ifconfig e1000g3 plumb

[root@sol10 ~]# ifconfig e1000g1 192.168.10.51 netmask 255.255.255.0
[root@sol10 ~]# ifconfig e1000g2 192.168.20.51 netmask 255.255.255.0
[root@sol10 ~]# ifconfig e1000g3 192.168.30.51 netmask 255.255.255.0

[root@sol10 ~]# ifconfig e1000g1 up
[root@sol10 ~]# ifconfig e1000g2 up
[root@sol10 ~]# ifconfig e1000g3 up

[root@sol10 ~]# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
e1000g0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet 192.168.1.51 netmask ffffff00 broadcast 192.168.1.255
        ether 8:0:27:a0:d0:4
e1000g1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
        inet 192.168.10.51 netmask ffffff00 broadcast 192.168.10.255
        ether 8:0:27:98:cf:d6
e1000g2: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 4
        inet 192.168.20.51 netmask ffffff00 broadcast 192.168.20.255
        ether 8:0:27:85:6c:8b
e1000g3: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 5
        inet 192.168.30.51 netmask ffffff00 broadcast 192.168.30.255
        ether 8:0:27:68:d9:5d

iscsiの共有設定
[root@sol10 ~]# zfs create rpool/iscsi
[root@sol10 ~]# zfs create -V 10gb rpool/iscsi/iscsi01
[root@sol10 ~]# zfs create -V 10Gb rpool/iscsi/iscsi02


[root@sol10 ~]# iscsitadm modify admin -d /rpool/iscsi

[root@sol10 ~]# zfs set shareiscsi=on rpool/iscsi/iscsi01
[root@sol10 ~]# zfs set shareiscsi=on rpool/iscsi/iscsi02

[root@sol10 ~]# iscsitadm show stats
operations    bandwidth
device                 read  write   read  write
--------------------  -----  -----  -----  -----
rpool/iscsi/iscsi01       0      0     0K     0K
rpool/iscsi/iscsi02       0      0     0K     0K

[root@sol10 ~]# iscsitadm list target -v
Target: rpool/iscsi/iscsi01
    iSCSI Name: iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
    Alias: rpool/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/rpool/iscsi/iscsi01
            Status: online
Target: rpool/iscsi/iscsi02
    iSCSI Name: iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
    Alias: rpool/iscsi/iscsi02
    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/rpool/iscsi/iscsi02
            Status: online

これでiscsiストレージは準備環境です。



3 iscsi クライアント

3.1 RHEL6でのテスト

3.1.1 準備

OSインストールはデフォルトでOKです。ひたすら次へ次へ。

ここでは検証ですので、内部FWのiptablesをOFFにしています。
[root@rhel6 ~]# chekconfig iptables off
[root@rhel6 ~]# /etc/init.d/iptables stop

アドレスを設定します。
[root@rhel6 ~]# ifconfig eth1 192.168.10.61 netmask 255.255.255.0
[root@rhel6 ~]# ifconfig eth2 192.168.20.61 netmask 255.255.255.0
[root@rhel6 ~]# ifconfig eth3 192.168.30.61 netmask 255.255.255.0

[root@rhel6 ~]# ifconfig eth1 down
[root@rhel6 ~]# ifconfig eth2 down 
[root@rhel6 ~]# ifconfig eth3 down 

[root@rhel6 ~]# ifconfig eth1 up
[root@rhel6 ~]# ifconfig eth2 up
[root@rhel6 ~]# ifconfig eth3 up

[root@rhel6 ~]# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 08:00:27:1A:56:EE
          inet addr:192.168.1.61  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: 2001:c90:941:1984:a00:27ff:fe1a:56ee/64 Scope:Global
          inet6 addr: fe80::a00:27ff:fe1a:56ee/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1586 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1095 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:157039 (153.3 KiB)  TX bytes:159691 (155.9 KiB)
 
eth1      Link encap:Ethernet  HWaddr 08:00:27:E5:8E:0E
          inet addr:192.168.10.61  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: 2001:c90:941:1984:a00:27ff:fee5:8e0e/64 Scope:Global
          inet6 addr: fe80::a00:27ff:fee5:8e0e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:242 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:29891 (29.1 KiB)  TX bytes:1028 (1.0 KiB)
 
eth2      Link encap:Ethernet  HWaddr 08:00:27:EF:14:E1
          inet addr:192.168.20.61  Bcast:192.168.20.255  Mask:255.255.255.0
          inet6 addr: 2001:c90:941:1984:a00:27ff:feef:14e1/64 Scope:Global
          inet6 addr: fe80::a00:27ff:feef:14e1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:236 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:29503 (28.8 KiB)  TX bytes:748 (748.0 b)
 
eth3      Link encap:Ethernet  HWaddr 08:00:27:93:60:CC
          inet addr:192.168.30.61  Bcast:192.168.30.255  Mask:255.255.255.0
          inet6 addr: 2001:c90:941:1984:a00:27ff:fe93:60cc/64 Scope:Global
          inet6 addr: fe80::a00:27ff:fe93:60cc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:242 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:29805 (29.1 KiB)  TX bytes:496 (496.0 b)
 
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:336 (336.0 b)  TX bytes:336 (336.0 b)

Solaris側の全インターフェースとping疎通がとれているか確認しておきましょう。

iscsiイニシエーターが必要となりますので、インストールされていない場合は標準メディアからインストールしましょう。
[root@rhel6 ~]# rpm -ihv iscsi-initiator-utils-6.2.0.872-10.el6.x86_64.rpm

これで準備完了。


3.1.2 iscsiセッションを張る

実際にSolarisのターゲットに向かって、RHELから接続を行います。

まずポータルを登録します。
[root@rhel6 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.1.51
iscsid を起動中:                                           [  OK  ]
192.168.1.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.10.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.20.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.30.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.1.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.10.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.20.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.30.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6

初めの一回目の操作で、自動でiscsidが起動します。ちなみのこのデーモンはiscsiadmのデータベースにエントリが何もないと手動起動できません。

この調子で、他のポータルも登録しておきます。
[root@rhel6 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.10.51
192.168.10.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.1.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.20.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.30.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.10.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.1.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.20.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.30.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6

[root@rhel6 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.20.51
192.168.20.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.1.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.10.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.30.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.20.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.1.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.10.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.30.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6

[root@rhel6 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.30.51
192.168.30.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.1.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.10.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.20.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.30.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.1.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.10.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.20.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6


登録されたポータルはこんな感じで確認できます。
[root@rhel6 ~]# iscsiadm -m discovery
192.168.30.51:3260 via sendtargets
192.168.1.51:3260 via sendtargets
192.168.20.51:3260 via sendtargets
192.168.10.51:3260 via sendtargets

次にdiscoveryされたポータル上のターゲットを操作します。

見つかったターゲット一覧は以下のコマンドで確認できます。
[root@rhel6 ~]# iscsiadm -m node
192.168.30.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.1.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.20.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.10.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.30.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.1.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.20.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
192.168.10.51:3260,1 iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8

ここでこのサーバからアクセスさせたくないターゲットが見えている場合は手動で削除できます。
[root@rhel6 ~]# iscsiadm -m node -T iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8 -o delete
ここでは-Tを指定して、異なるポータルのターゲットも一括削除していますが、-p でIP指定でも削除できます。更に、-T -pを組み合わせて詳細に特定しての削除も行えます。

削除すると以下の状態になります。
[root@rhel6 ~]# iscsiadm -m node
192.168.30.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.1.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.20.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
192.168.10.51:3260,1 iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d


基本的にはこれだけでOKです。

後は、ログインすればOS側からデバイスとして認識されます。
[root@rhel6 ~]# iscsiadm -m node --login
Logging in to [iface: default, target: iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6, portal: 192.168.30.51,3260]
Logging in to [iface: default, target: iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6, portal: 192.168.1.51,3260]
Logging in to [iface: default, target: iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6, portal: 192.168.20.51,3260]
Logging in to [iface: default, target: iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6, portal: 192.168.10.51,3260]
Login to [iface: default, target: iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6, portal: 192.168.30.51,3260] successful.
Login to [iface: default, target: iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6, portal: 192.168.1.51,3260] successful.
Login to [iface: default, target: iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6, portal: 192.168.20.51,3260] successful.
Login to [iface: default, target: iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6, portal: 192.168.10.51,3260] successful.

OSからの確認
[root@rhel6 ~]# fdisk -l

ディスク /dev/sda: 2199.0 GB, 2199022206976 バイト
ヘッド 255, セクタ 63, シリンダ 267349
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x000aea83

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *           1          64      512000   83  Linux
パーティション 1 は、シリンダ境界で終わっていません。
/dev/sda2              64      267350  2146969600   8e  Linux LVM

ディスク /dev/dm-0: 53.7 GB, 53687091200 バイト
ヘッド 255, セクタ 63, シリンダ 6527
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

ディスク /dev/dm-0 は正常なパーティションテーブルを含んでいません

ディスク /dev/dm-1: 2113 MB, 2113929216 バイト
ヘッド 255, セクタ 63, シリンダ 257
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

ディスク /dev/dm-1 は正常なパーティションテーブルを含んでいません

ディスク /dev/dm-2: 2142.7 GB, 2142693752832 バイト
ヘッド 255, セクタ 63, シリンダ 260501
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

ディスク /dev/dm-2 は正常なパーティションテーブルを含んでいません

ディスク /dev/sdb: 10.7 GB, 10737418240 バイト
ヘッド 64, セクタ 32, シリンダ 10240
Units = シリンダ数 of 2048 * 512 = 1048576 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

ディスク /dev/sdb は正常なパーティションテーブルを含んでいません

ディスク /dev/sdc: 10.7 GB, 10737418240 バイト
ヘッド 64, セクタ 32, シリンダ 10240
Units = シリンダ数 of 2048 * 512 = 1048576 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

ディスク /dev/sdc は正常なパーティションテーブルを含んでいません

ディスク /dev/sdd: 10.7 GB, 10737418240 バイト
ヘッド 64, セクタ 32, シリンダ 10240
Units = シリンダ数 of 2048 * 512 = 1048576 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

ディスク /dev/sdd は正常なパーティションテーブルを含んでいません

ディスク /dev/sde: 10.7 GB, 10737418240 バイト
ヘッド 64, セクタ 32, シリンダ 10240
Units = シリンダ数 of 2048 * 512 = 1048576 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

ディスク /dev/sde は正常なパーティションテーブルを含んでいません

[root@rhel6 ~]# cat /proc/scsi/scsi
Attached devices:
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: VBOX     Model: CD-ROM           Rev: 1.0
  Type:   CD-ROM                           ANSI  SCSI revision: 05
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: VBOX HARDDISK    Rev: 1.0
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi3 Channel: 00 Id: 00 Lun: 00
  Vendor: SUN      Model: SOLARIS          Rev: 1
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi5 Channel: 00 Id: 00 Lun: 00
  Vendor: SUN      Model: SOLARIS          Rev: 1
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi4 Channel: 00 Id: 00 Lun: 00
  Vendor: SUN      Model: SOLARIS          Rev: 1
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi6 Channel: 00 Id: 00 Lun: 00
  Vendor: SUN      Model: SOLARIS          Rev: 1
  Type:   Direct-Access                    ANSI  SCSI revision: 05


3.1.3 補足

ターゲットにログインするとSolarisからセッションの状態を確認できます。
[root@sol10 ~]bash-3.00# iscsitadm list target -v

Target: rpool/iscsi/iscsi01
    iSCSI Name: iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
    Alias: rpool/iscsi/iscsi01
    Connections: 4
        Initiator:
            iSCSI Name: iqn.1994-05.com.redhat:ad4bef8934
            Alias: rhel6.sol-net.jp
        Initiator:
            iSCSI Name: iqn.1994-05.com.redhat:ad4bef8934
            Alias: rhel6.sol-net.jp
        Initiator:
            iSCSI Name: iqn.1994-05.com.redhat:ad4bef8934
            Alias: rhel6.sol-net.jp
        Initiator:
            iSCSI Name: iqn.1994-05.com.redhat:ad4bef8934
            Alias: rhel6.sol-net.jp
    ACL list:
    TPGT list:
    LUN information:
        LUN: 0
            GUID: 600144f04dce76f200080027a0d00400
            VID: SUN
            PID: SOLARIS
            Type: disk
            Size:   10G
            Backing store: /dev/zvol/rdsk/rpool/iscsi/iscsi01
            Status: online
   Target: rpool/iscsi/iscsi02
       iSCSI Name: iqn.1986-03.com.sun:02:2281633a-294b-6f93-f5b6-99995ba4b1e8
       Alias: rpool/iscsi/iscsi02
       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/rpool/iscsi/iscsi02
               Status: online
上の手順を行うと、iscsi01に対して4つのセッションが張られていることがわかります。


3.1.4 マルチパスを構成する準備

RHEL6でもマルチパスの構成にはdm-multipathを使います。

以下のパッケージが必要となるので、標準メディアからインストールしましょう。
[root@rhel6 ~]# mount /dev/cdrom /media
mount: ブロックデバイス /dev/sr0 は書き込み禁止です、読込み専用でマウントします

[root@rhel6 ~]# cd /media/Server/Packages/

[root@rhel6 Packages]# rpm -ihv device-mapper-multipath-libs-0.4.9-31.el6.x86_64.rpm
警告: device-mapper-multipath-libs-0.4.9-31.el6.x86_64.rpm: ヘッダ V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
準備中...                ########################################### [100%]
   1:device-mapper-multipath########################################### [100%]

[root@rhel6 Packages]# rpm -ihv device-mapper-multipath-0.4.9-31.el6.x86_64.rpm
警告: device-mapper-multipath-0.4.9-31.el6.x86_64.rpm: ヘッダ V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
準備中...                ########################################### [100%]
   1:device-mapper-multipath########################################### [100%]


3.1.5 マルチパスの設定

マルチパスの設定は/etc/multipath.confで行います。サンプルが/usr/share/doc/device-mapper-multipath-0.4.9/multipath.confにあるので、これをコピーして編集します。
[root@rhel6 ~]# cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/

実はこれだけでもとりあえずマルチパスは動かせます。
[root@rhel6 ~]# /etc/init.d/multipathd restart
multipathd デーモンを起動中:                               [  OK  ]

[root@rhel6 ~]# multipath -ll
mpathb (3600144f04dce76f200080027a0d00400) dm-3 SUN,SOLARIS
size=10G features='0' hwhandler='0' wp=rw
  `- 3:0:0:0 sdb 8:16 active ready running
|-+- policy='round-robin 0' prio=1 status=enabled
  `- 5:0:0:0 sdc 8:32 active ready running
|-+- policy='round-robin 0' prio=1 status=enabled
  `- 4:0:0:0 sdd 8:48 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 6:0:0:0 sde 8:64 active ready running

もうちょっと詳細に設定してみます。

マルチパスを構成する上で必要なのがwwid or scsi_id になります。これはscsi_idで取得できますが、RHEL6以降はコマンドの仕様が大きく変わっているので注意してください。ここではRHEL6の例を示します。
[root@rhel6 ~]# scsi_id --page=0x83 --whitelisted --device=/dev/sda
1ATA     VBOX HARDDISK                           VB7a8aca28-9776cfae

[root@rhel6 ~]# scsi_id --page=0x83 --whitelisted --device=/dev/sdb
3600144f04dce76f200080027a0d00400

[root@rhel6 ~]# scsi_id --page=0x83 --whitelisted --device=/dev/sdc
3600144f04dce76f200080027a0d00400

[root@rhel6 ~]# scsi_id --page=0x83 --whitelisted --device=/dev/sdd
3600144f04dce76f200080027a0d00400

[root@rhel6 ~]# scsi_id --page=0x83 --whitelisted --device=/dev/sde
3600144f04dce76f200080027a0d00400
RHEL5の場合は、 /sbin/scsi_id -g -u -s /block/sdX で確認できます。

この出力結果が同じものは同一LUNを参照しているので、マルチパス管理下に置くことにします。

以下の内容をファイルの最終行に追記します。
[root@rhel6 ~]# vim /etc/multipath.conf

multipaths {
       multipath {
               wwid                    3600144f04dce76f200080027a0d00400
               alias                   zfsiscsi01
               path_grouping_policy    multibus
               path_checker            readsector0
               path_selector           "round-robin 0"
               failback                manual
               rr_weight               priorities
               no_path_retry           5
       }
}
multipath.confのその他の細かなオプションはこちらを参照してください。またRHEL6になって指定できるオプションが増えていますので、そちらはman multipath.confを参照してみてください。

デーモンの再起動か、multipath と打つと設定が反映されます。
[root@rhel6 ~]# /etc/init.d/multipathd restart
multipathd デーモンを停止中:                               [  OK  ]
multipathd デーモンを起動中:                               [  OK  ]
[root@rhel6 ~]# multipath -ll
zfsiscsi01 (3600144f04dce76f200080027a0d00400) dm-3 SUN,SOLARIS
size=10G features='1 queue_if_no_path' hwhandler='0' wp=rw
  `- 3:0:0:0 sdb 8:16 active ready running
|-+- policy='round-robin 0' prio=1 status=enabled
  `- 5:0:0:0 sdc 8:32 active ready running
|-+- policy='round-robin 0' prio=1 status=enabled
  `- 4:0:0:0 sdd 8:48 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
  `- 6:0:0:0 sde 8:64 active ready running


3.1.6 マルチパス化されたストレージを使う

これまでの設定を行うと、zfsiscsi01というデバイスが作成されます。
[root@rhel6 ~]# ls -l /dev/mapper
合計 0
crw-rw----. 1 root root 10, 58  5月 14 20:19 2011 control
lrwxrwxrwx. 1 root root      7  5月 14 20:19 2011 vg_rhel6-lv_home -> ../dm-2
lrwxrwxrwx. 1 root root      7  5月 14 20:19 2011 vg_rhel6-lv_root -> ../dm-0
lrwxrwxrwx. 1 root root      7  5月 14 20:19 2011 vg_rhel6-lv_swap -> ../dm-1
lrwxrwxrwx. 1 root root      7  5月 14 22:40 2011 zfsiscsi01 -> ../dm-3
これに対して、操作を行います。

まずはパーティション作成
[root@rhel6 ~]# fdisk /dev/mapper/zfsiscsi01

デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルをディスク識別子 0x3c82c732 で作成します。
あなたが書き込みを決定するまで、変更はメモリ内だけに残します。
その後はもちろん以前の内容は修復不可能になります。
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを
      強く推奨します。 and change display units to
         sectors (command 'u').

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
パーティション番号 (1-4): 1
最初 シリンダ (1-1305, 初期値 1):
初期値 1 を使います
Last シリンダ, +シリンダ数 or +size{K,M,G} (1-1305, 初期値 1305):
初期値 1305 を使います

コマンド (m でヘルプ): p

ディスク /dev/mapper/zfsiscsi01: 10.7 GB, 10737418240 バイト
ヘッド 255, セクタ 63, シリンダ 1305
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x3c82c732

            デバイス ブート      始点        終点     ブロック   Id  システム
/dev/mapper/zfsiscsi01p1               1        1305    10482381   83  Linux

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。

警告: パーティションテーブルの再読込みがエラー 22 で失敗しました: 無効な引数です。
カーネルはまだ古いテーブルを使っています。新しいテーブルは
次回リブート時か、partprobe(8)またはkpartx(8)を実行した後に
使えるようになるでしょう
ディスクを同期しています。

mapper で管理されるデバイスはパーティション作成しても、自動でデバイスの再読み込みが行われないので手動で行います。
[root@rhel6 ~]# kpartx -a /dev/mapper/zfsiscsi01

[root@rhel6 ~]# ls -l /dev/mapper/
合計 0
crw-rw----. 1 root root 10, 58  5月 14 20:19 2011 control
lrwxrwxrwx. 1 root root      7  5月 14 20:19 2011 vg_rhel6-lv_home -> ../dm-2
lrwxrwxrwx. 1 root root      7  5月 14 20:19 2011 vg_rhel6-lv_root -> ../dm-0
lrwxrwxrwx. 1 root root      7  5月 14 20:19 2011 vg_rhel6-lv_swap -> ../dm-1
lrwxrwxrwx. 1 root root      7  5月 14 22:40 2011 zfsiscsi01 -> ../dm-3
lrwxrwxrwx. 1 root root      7  5月 14 23:18 2011 zfsiscsi01p1 -> ../dm-4

ファイルシステムを作成します
[root@rhel6 ~]# mke2fs -t ext4 /dev/mapper/zfsiscsi01p1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2620595 blocks
131029 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
8192 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 35 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

マウントします。
[root@rhel6 ~]# mkdir /mnt/iscsi01

[root@rhel6 ~]# mount -t ext4 /dev/mapper/zfsiscsi01p1 /mnt/iscsi01

[root@rhel6 ~]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_rhel6-lv_root
                       50G  1.4G   46G   3% /
tmpfs                 499M     0  499M   0% /dev/shm
/dev/sda1             485M   30M  430M   7% /boot
/dev/mapper/vg_rhel6-lv_home
                      2.0T  199M  1.9T   1% /home
/dev/mapper/zfsiscsi01p1
                      9.9G  151M  9.2G   2% /mnt/iscsi01
これで使えるようになります。


3.1.7 テストしてみる

パス切断テストは、Solaris側でNICをダウンさせることで擬似障害テストが可能です。
[root@rhel6 ~]# ifconfig e1000g1 down

しばらくたつとRHEL6で切断が検知され障害パスが切断されます。
[root@rhel6 ~]# multipath -ll
zfsiscsi01 (3600144f04dce76f200080027a0d00400) dm-3 SUN,SOLARIS
size=10G features='1 queue_if_no_path' hwhandler='0' wp=rw
  `- 3:0:0:0 sdb 8:16 active ready  running
|-+- policy='round-robin 0' prio=1 status=enabled
  `- 5:0:0:0 sdc 8:32 active ready  running
|-+- policy='round-robin 0' prio=1 status=enabled
  `- 4:0:0:0 sdd 8:48 active ready  running
`-+- policy='round-robin 0' prio=0 status=enabled
  `- 6:0:0:0 sde 8:64 failed faulty running
このパスの切り替え時間はiscsid側はデフォルトで120秒。変更するには、/etc/iscsi/iscsid.conf の node.session.timeo.replacement_timeout = 120 という部分を変更する。

セッションの状態を確認すると、
[root@rhel6 ~]# iscsiadm -m session -P 1
Target: iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
        Current Portal: 192.168.30.51:3260,1
        Persistent Portal: 192.168.30.51:3260,1
                **********
                Interface:
                **********
                Iface Name: default
                Iface Transport: tcp
                Iface Initiatorname: iqn.1994-05.com.redhat:ad4bef8934
                Iface IPaddress: 192.168.30.61
                Iface HWaddress: <empty>
                Iface Netdev: <empty>
                SID: 1
                iSCSI Connection State: LOGGED IN
                iSCSI Session State: LOGGED_IN
                Internal iscsid Session State: NO CHANGE
        Current Portal: 192.168.1.51:3260,1
        Persistent Portal: 192.168.1.51:3260,1
                **********
                Interface:
                **********
                Iface Name: default
                Iface Transport: tcp
                Iface Initiatorname: iqn.1994-05.com.redhat:ad4bef8934
                Iface IPaddress: 192.168.1.61
                Iface HWaddress: <empty>
                Iface Netdev: <empty>
                SID: 2
                iSCSI Connection State: LOGGED IN
                iSCSI Session State: LOGGED_IN
                Internal iscsid Session State: NO CHANGE
        Current Portal: 192.168.20.51:3260,1
        Persistent Portal: 192.168.20.51:3260,1
                **********
                Interface:
                **********
                Iface Name: default
                Iface Transport: tcp
                Iface Initiatorname: iqn.1994-05.com.redhat:ad4bef8934
                Iface IPaddress: 192.168.20.61
                Iface HWaddress: <empty>
                Iface Netdev: <empty>
                SID: 3
                iSCSI Connection State: LOGGED IN
                iSCSI Session State: LOGGED_IN
                Internal iscsid Session State: NO CHANGE
        Current Portal: 192.168.10.51:3260,1
        Persistent Portal: 192.168.10.51:3260,1
                **********
                Interface:
                **********
                Iface Name: default
                Iface Transport: tcp
                Iface Initiatorname: iqn.1994-05.com.redhat:ad4bef8934
                Iface IPaddress: 192.168.10.61
                Iface HWaddress: <empty>
                Iface Netdev: <empty>
                SID: 4
                iSCSI Connection State: TRANSPORT WAIT
                iSCSI Session State: FREE
                Internal iscsid Session State: REOPEN
このようになっています。この状態でもマルチパスが正常に設定されていれば、I/O可能です。

[root@rhel6 ~]# dd if=/dev/urandom of=/mnt/iscsi01/test1 bs=1024k count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 14.0274 s, 7.5 MB/s

セッションを復旧する。
[root@rhel6 ~]# ifconfig e1000g1 up

セッションはすぐに復旧します。
[root@rhel6 ~]# iscsiadm -m session -P 1
Target: iqn.1986-03.com.sun:02:397bd5c4-5c57-4d51-a708-fe36d27315d6
        Current Portal: 192.168.30.51:3260,1
        Persistent Portal: 192.168.30.51:3260,1
                **********
                Interface:
                **********
                Iface Name: default
                Iface Transport: tcp
                Iface Initiatorname: iqn.1994-05.com.redhat:ad4bef8934
                Iface IPaddress: 192.168.30.61
                Iface HWaddress: <empty>
                Iface Netdev: <empty>
                SID: 1
                iSCSI Connection State: LOGGED IN
                iSCSI Session State: LOGGED_IN
                Internal iscsid Session State: NO CHANGE
        Current Portal: 192.168.1.51:3260,1
        Persistent Portal: 192.168.1.51:3260,1
                **********
                Interface:
                **********
                Iface Name: default
                Iface Transport: tcp
                Iface Initiatorname: iqn.1994-05.com.redhat:ad4bef8934
                Iface IPaddress: 192.168.1.61
                Iface HWaddress: <empty>
                Iface Netdev: <empty>
                SID: 2
                iSCSI Connection State: LOGGED IN
                iSCSI Session State: LOGGED_IN
                Internal iscsid Session State: NO CHANGE
        Current Portal: 192.168.20.51:3260,1
        Persistent Portal: 192.168.20.51:3260,1
                **********
                Interface:
                **********
                Iface Name: default
                Iface Transport: tcp
                Iface Initiatorname: iqn.1994-05.com.redhat:ad4bef8934
                Iface IPaddress: 192.168.20.61
                Iface HWaddress: <empty>
                Iface Netdev: <empty>
                SID: 3
                iSCSI Connection State: LOGGED IN
                iSCSI Session State: LOGGED_IN
                Internal iscsid Session State: NO CHANGE
        Current Portal: 192.168.10.51:3260,1
        Persistent Portal: 192.168.10.51:3260,1
                **********
                Interface:
                **********
                Iface Name: default
                Iface Transport: tcp
                Iface Initiatorname: iqn.1994-05.com.redhat:ad4bef8934
                Iface IPaddress: 192.168.10.61
                Iface HWaddress: <empty>
                Iface Netdev: <empty>
                SID: 4
                iSCSI Connection State: LOGGED IN
                iSCSI Session State: LOGGED_IN
                Internal iscsid Session State: NO CHANGE

マルチパスもすぐに復旧します。パスチェックの感覚はmultipath.confの中の、polling_intervalで設定されています。デフォルトで5秒間隔。
[root@rhel6 ~]# multipath -ll
zfsiscsi01 (3600144f04dce76f200080027a0d00400) dm-3 SUN,SOLARIS
size=10G features='1 queue_if_no_path' hwhandler='0' wp=rw
  `- 3:0:0:0 sdb 8:16 active ready running
|-+- policy='round-robin 0' prio=1 status=enabled
  `- 5:0:0:0 sdc 8:32 active ready running
|-+- policy='round-robin 0' prio=1 status=enabled
  `- 4:0:0:0 sdd 8:48 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
  `- 6:0:0:0 sde 8:64 active ready running

また、現在設定されているmultipathのパラメータは以下で取得できます。
[root@rhel6 ~]# multipath -ll -v 3


以上のように、仮想環境を使って設定・テスト可能です。これらのテストはRHELのbondingと組み合わせたり、Solaris側で割り当てるIPを全て同じセグメントにしたりと様々な環境で試せます。必要であれば試してみてください。

0 件のコメント:

コメントを投稿