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 3600144f04dce76f200080027a0d00400RHEL5の場合は、 /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 件のコメント:
コメントを投稿