1
色々捗る自宅検証環境!Linux+SCST+ZFSで作る多機能型FC-SANストレージとSANbootのおはなし
オープンソースカンファレンス
2012 Tokyo/Fall
自宅SAN友の会(#jitakusan)
Satoru Nakaya(@giraffeforestg)
自己紹介
自宅SAN友の会
#jitakusan
× 中谷 悟
× 岐阜・名古屋で大学向けインフラSEやってます。
× 岐阜在住。(飛騨牛うまい , 鵜飼有名)
× VMware , KVM , Shibboleth , Capistrano , Zabbix
を実践投入しつつ、OpenStack , CloudStack ,
Chef , OpenAM を勉強中です。
本日はよろしくお願いします。
2
自宅検証環境における課題
自宅SAN友の会
#jitakusan
× 検証したいターゲットが沢山あるのに、自宅のマシンが足りない。環境切り替える度に再インストールやリストアは面倒、、、
※仮想マシンで済めばいいけど、プライベートクラウドとか
ハイパーバイザーを検証する時にネストとかも大変
3
自宅検証環境における課題
自宅SAN友の会
#jitakusan
× たとえヤフオクとかeBayで中古サーバを山ほど大人買いしたとしても、置く場所がない。
× ラックを買えばいいいじゃない!と言うが、40Uフル搭載しようものなら木造住宅の貧弱な床が抜けてしまいます、、、(家族の理解があったとしても)
4
解決方法
自宅SAN友の会
#jitakusan
× そこで本日のテーマ!
Linux+SCST+ZFSで作る多機能型FC-SANストレージとSANbootのおはなし
自宅サーバのディスクをFC-SANストレージに統合し、SANbootさせることで、少ないマシンでも効率的に様々なプライベートクラウドを検証できるようにしちゃいます。
5
解決方法
自宅SAN友の会
#jitakusan
× Before × AfterOpenStack検証環境 CloudStack検証環境
XXXシステム検証環境FC-SAN
統合
6
ご注意!
自宅SAN友の会
#jitakusan
本物の運用環境や商用・エンタープライズな環境には使用しないでください。
あくまで自宅の検証環境を充実させる手段として紹介します。
サーバにFC-HBAを搭載する際には感電等に十分ご注意ください。
電源ケーブルさしたまま作業しないように。もろもろ部品はさわるな危険。
ZFSをLiunxで使用する上でのライセンスの問題があるかもしれません。使用は各自の判断でお願いします。
(ZFSのライセンスであるCDDLがGPLと相性が悪い)
7
環境の説明~物理的に使用したもの~
自宅SAN友の会
#jitakusan
× 検証用サーバ:PRIMERGY RX200S4 x1
└FC-HBA(Emulex LPe1150) x1
× ストレージ用サーバ:PRIMERGY RX300S4 x1
└FC-HBA(QLogic QLE2460) x1
× その他 FCケーブル x1
合計約 ¥40,000円
8
環境の説明~物理的に使用したもの~
自宅SAN友の会
#jitakusan9
検証用サーバ
ストレージ用サーバ
環境の説明~物理的に使用したもの~
自宅SAN友の会
#jitakusan
× FC-HBA購入の際にはPCI-EとかPCI-Xとか、フルサイズとかロープロファイルの違いに注意してね。
10
環境の説明~論理的に使用したもの~
自宅SAN友の会
#jitakusan
× 検証用サーバ
└CentOS6.3 x86_64 , Ubuntu 11.10 64 bit
× ストレージ用サーバ
└CentOS6.3 x86_64
└linux-2.6.39(kernel)
└SCST(A Generic SCSI Target Subsystem for Linux)
└ZFS (Linux on ZFS)
└qemu-img
11
作ってみよう!
自宅SAN友の会
#jitakusan
× 1.ストレージ用サーバをFC-SANストレージにする
× 2.ZFSをSCSTのバックエンドとして使用することで、スナップショット/ロールバック機能を実現する。またSCSTのディスクイメージファイルをqemu-imgで作成し、シンプロビジョニング可能とする。
× 3.検証用サーバをストレージ用サーバのディスクからSANbootさせる
12
作ってみよう!(構成図)
自宅SAN友の会
#jitakusan
ディスク
FC直結(4Gbps)
ZFS/quem-img
CentOS+SCST
ディスクレス
SANboot
検証用サーバ
ストレージ用サーバ
13
1.ストレージ用サーバをFC-SANストレージにする
自宅SAN友の会
#jitakusan
× (1)ストレージ用サーバにCentOS6.3をインストールする
× (2)SCSTのパッチをあてたカーネルをインストールする
× (3)SCSTをインストールする
SCSTやFC-SANストレージに関して自宅SAN友の会/お役立ちリンク/Linuxベース ストレージmetamdさん , smzkstsさんの資料を参考にしています。https://sites.google.com/site/jitakusan/linkその他,SRCHACKさんのページを参考にしています。
14
1.ストレージ用サーバをFC-SANストレージにする(1)ストレージ用サーバにCentOS6.3をインストールする
自宅SAN友の会
#jitakusan
× CentOS6.3 x86_64をインストールしてください
※RX300S4の場合、6.3のインストーラが起動できなかった
ので、6.2をインストールした後でyum updateで6.3にした。
× OSインストール時のインストールパッケージのカスタマイズ
・開発ツール
・開発ライブラリ
後はお好みで。
× ディスクはOSとデータで領域を分けてください。
※今回はsda:OS , sdb:データ(ZFS用)とした。
15
1.ストレージ用サーバをFC-SANストレージにする(2)SCSTのパッチをあてたカーネルをインストールする
自宅SAN友の会
#jitakusan
× SCSTのソースをダウンロードする
# cd /root
# svn co https://scst.svn.sourceforge.net/svnroot/scst
× Linux kernelをダウンロードする
# cd /usr/src
# wget ftp://ftp.iij.ad.jp/pub/linux/kernel/linux/kernel/v2.6/linux-2.6.39.tar.gz
# tar xvf linux-2.6.39.tar.gz
# ln -s linux-2.6.39 linux
16
1.ストレージ用サーバをFC-SANストレージにする(2)SCSTのパッチをあてたカーネルをインストールする
自宅SAN友の会
#jitakusan
× KernelにSCSTのpatchをあてる
# cd /usr/src
# patch -p0 < /root/scst/trunk/scst/kernel/scst_exec_req_fifo-2.6.39.patch
■ 参考
can't find file to patch at input line 4
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|=== modified file 'block/blk-map.c'
|--- old/block/blk-map.c 2012-08-08 02:57:29 +0000
|+++ new/block/blk-map.c 2012-08-08 03:02:56 +0000
--------------------------
File to patch:
このメッセージが出力されたらpatchをあてる対象のファイルが見つかっていないので、pacthファイルの中身をみて、シンボリックリンクはる等して、位置をあわせること例:ln –s linux-2.6.39.4 linux-2.6.39
17
1.ストレージ用サーバをFC-SANストレージにする(2)SCSTのパッチをあてたカーネルをインストールする
自宅SAN友の会
#jitakusan
× qla2xxxドライバの差し替え
# mv /usr/src/linux/drivers/scsi/qla2xxx /usr/src/linux/drivers/scsi/qla2xxx_bk
# ln -s /root/scst/trunk/qla2x00t /usr/src/linux/drivers/scsi/qla2xxx
18
1.ストレージ用サーバをFC-SANストレージにする(2)SCSTのパッチをあてたカーネルをインストールする
自宅SAN友の会
#jitakusan
× Linux kernelの.config作成
# cd /usr/src/linux
# make menuconfig
Device Drivers->
SCSI device support->
SCSI low level drivers->
<M> QLogic QLA2XXX Fibre Channel Support
[*] QLogic 2xxx target mode support (NEW)
以下が選択されていることを確認し.configをsaveする。
× Makefile編集
# vi Makefile
EXTRAVERSION = -scst
19
1.ストレージ用サーバをFC-SANストレージにする(2)SCSTのパッチをあてたカーネルをインストールする
自宅SAN友の会
#jitakusan
× Kernelのコンパイルとインストール(長時間必要)
# make bzImage && make modules && make modules_install && make install
× OS起動時のKernelを選択
# vi /boot/grub/grub.conf
default=0
× OS再起動
# reboot
# uname -r
2.6.39-scst
20
1.ストレージ用サーバをFC-SANストレージにする(3)SCSTをインストールする
自宅SAN友の会
#jitakusan
× scstのコンパイルとインストール# cd /root/scst/trunk && make 2release
# cd /root/scst/trunk/scst/src && make all && make install
# cd /root/scst/trunk/qla2x00t/qla2x00-target && make && make install
# yum install redhat-lsb -y
# cd /root/scst/trunk/scstadmin && make && make install
21
1.ストレージ用サーバをFC-SANストレージにする(3)SCSTをインストールする
自宅SAN友の会
#jitakusan
× scstの設定
# ln -s /lib/modules/2.6.39-scst/kernel/drivers/scsi/qla2xxx/qla2xxx.ko /lib/modules/2.6.39-scst/extra/qla2xxx.ko
# modprobe scst
# modprobe qla2x00tgt
# modprobe qla2xxx
# modprobe scst_disk
# modprobe scst_vdisk
22
1.ストレージ用サーバをFC-SANストレージにする(3)SCSTをインストールする
自宅SAN友の会
#jitakusan
× scstの設定
# vi /etc/init.d/scst
# chkconfig: 2345 99 87
# vi /etc/default/scst
SCST_TARGET_MODULES="scst qla2x00tgt scst_disk scst_vdisk”
# scstadmin -write_config /etc/scst.conf
# chkconfig --add scst
# chkconfig scst on
# reboot
# service scst status
SCST status: OK
23
2.ZFSをSCSTのバックエンドとして使用する
自宅SAN友の会
#jitakusan
× (1)ZFSをインストールする
× (2)SCSTのディスクイメージファイルをqemu-imgで作成する
× (3)SCSTを設定する
24
2.ZFSをSCSTのバックエンドとして使用する(1)ZFSをインストールする
自宅SAN友の会
#jitakusan
× splをインストールする
# yum install libuuid-devel lsscsi -y
# wget http://github.com/downloads/zfsonlinux/spl/spl-0.6.0-rc10.tar.gz
# tar xvf spl-0.6.0-rc10.tar.gz
# cd spl-0.6.0-rc10
# ./configure && make && make install
25
2.ZFSをSCSTのバックエンドとして使用する(1)ZFSをインストールする
自宅SAN友の会
#jitakusan
× zfsをインストールする
# cd
# wget http://github.com/downloads/zfsonlinux/zfs/zfs-0.6.0-rc10.tar.gz
# tar xvf zfs-0.6.0-rc10.tar.gz
# cd zfs-0.6.0-rc10
# ./configure && make && make install
26
2.ZFSをSCSTのバックエンドとして使用する(1)ZFSをインストールする
自宅SAN友の会
#jitakusan
× ZFSのストレージプールとファイルシステムを作成する
# zpool create pool01 /dev/sdb
invalid vdev specification
use '-f' to override the following errors:
/dev/sdb does not contain an EFI label but it may contain partition
information in the MBR.
ラベルをつけろと怒られるので付与する# parted /dev/sdb(parted) mklabel gpt(parted) quit
27
2.ZFSをSCSTのバックエンドとして使用する(1)ZFSをインストールする
自宅SAN友の会
#jitakusan
× ZFSのストレージプールとファイルシステムを作成する
# zpool create pool01 /dev/sdb
# zfs create pool01/lun01
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool01 128K 268G 31K /pool01
pool01/lun01 30K 268G 30K /pool01/lun01
28
2.ZFSをSCSTのバックエンドとして使用する(2)SCSTのディスクイメージファイルをqemu-imgで作成する
自宅SAN友の会
#jitakusan
× SCSTのディスクイメージファイルをqemu-imgで作成する
# yum install qemu-img -y
# qemu-img create -f raw /pool01/lun01/lun01.img 10G
# ls -ls /pool01/lun01/lun01.img
1 -rw-r--r--. 1 root root 10737418240 8月 18 18:47 2012 /pool01/lun01/lun01.img
10241328 -rw-r--r--. 1 root root 10485760000 8月 18 18:56 2012 /pool01/lun01/lun01.img.dd
↑参考:ddでファイル作成した場合は全領域を最初から確保。# dd if=/dev/zero of=/pool01/lun01/lun01.img.dd bs=1M count=10000
ファイルのディスク割り当て量(1024 バイトブロック単位)実使用量だけ消費する。(シンプロビジョニング)
29
2.ZFSをSCSTのバックエンドとして使用する(3)SCSTを設定する
自宅SAN友の会
#jitakusan
× Target Device有効化,グループ作成,ボリューム作成,ボリューム公開等
# scstadmin -enable 21:00:00:e0:8b:9c:b2:02 -driver qla2x00t
# scstadmin -add_group group01 -driver qla2x00t -target 21:00:00:e0:8b:9c:b2:02
# scstadmin -add_init 10:00:00:00:c9:70:f1:fd -driver qla2x00t -target 21:00:00:e0:8b:9c:b2:02 -group group01
# scstadmin -open_dev lun01 -handler vdisk_fileio -attributes filename=/pool01/lun01/lun01.img
# scstadmin -add_lun 0 -driver qla2x00t -target 21:00:00:e0:8b:9c:b2:02 -group group01 -device lun01
# scstadmin -write_config /etc/scst.conf
ストレージ用サーバHBAのWWPN
検証用サーバHBAのWWPN
ボリュームの保存先指定blockioではなくfileio
WWNPは後述するFC-BIOSや# cat /sys/class/fc_host/host?/port_name で確認可能。
30
3.検証用サーバをストレージ用サーバのディスクからSANbootさせる
自宅SAN友の会
#jitakusan
× (1)検証用サーバのBIOSを設定する
× (2)検証用サーバのFC-BIOSを設定する
× (3)検証用サーバにOSをインストールする
31
3.検証用サーバをストレージ用サーバのディスクからSANbootさせる(1)検証用サーバのBIOSを設定する
自宅SAN友の会
#jitakusan
× BIOSを設定する
F2 -> Advanced -> PCI Configuration
32
3.検証用サーバをストレージ用サーバのディスクからSANbootさせる(1)検証用サーバのBIOSを設定する
自宅SAN友の会
#jitakusan
× BIOSを設定する
PCI SLOTS Configuration -> Option ROM Scan : Enabled
33
3.検証用サーバをストレージ用サーバのディスクからSANbootさせる(2)検証用サーバのFC-BIOSを設定する
自宅SAN友の会
#jitakusan
× FC-BIOSを設定する
Alt-E ※ちなみにQLogicの場合はAlt-Qになります
34
3.検証用サーバをストレージ用サーバのディスクからSANbootさせる(2)検証用サーバのFC-BIOSを設定する
自宅SAN友の会
#jitakusan
× FC-BIOSを設定する
1 -> 2 (Configure This Adapter’s Parameters)
35
3.検証用サーバをストレージ用サーバのディスクからSANbootさせる(2)検証用サーバのFC-BIOSを設定する
自宅SAN友の会
#jitakusan
× FC-BIOSを設定する
1 (Enable or Disable BIOS) -> 1 (Enable) -> Esc -> Esc
36
3.検証用サーバをストレージ用サーバのディスクからSANbootさせる(2)検証用サーバのFC-BIOSを設定する
自宅SAN友の会
#jitakusan
× FC-BIOSを設定する
1 (Configure Boot Devices) -> Select a Boot Entry :1
37
3.検証用サーバをストレージ用サーバのディスクからSANbootさせる(2)検証用サーバのFC-BIOSを設定する
自宅SAN友の会
#jitakusan
× FC-BIOSを設定する
Select The Two Digit Number of The Desired Boot Decice :01
-> Enter Two digits of starting LUN (Hex): 00
38
3.検証用サーバをストレージ用サーバのディスクからSANbootさせる(2)検証用サーバのFC-BIOSを設定する
自宅SAN友の会
#jitakusan
× FC-BIOSを設定する
Enter a Selection : 01
-> 1 (Boot The device via WWPN) -> x -> Y (Reboot)
39
3.検証用サーバをストレージ用サーバのディスクからSANbootさせる(3)検証用サーバにOSをインストールする
自宅SAN友の会
#jitakusan
× 以下のようにFC-SAN上のディスクが見えるので
自分の好きなようにインストールしてください。
40
3.検証用サーバをストレージ用サーバのディスクからSANbootさせる(3)検証用サーバにOSをインストールする
自宅SAN友の会
#jitakusan
× SANboot 完了!
41
運用を楽しむ(1)
自宅SAN友の会
#jitakusan
× 検証用サーバのbootディスクをコマンドで切り替える
# qemu-img create -f raw /pool01/lun01/lun01_ubuntu.img 10G
# scstadmin -open_dev lun01_ubuntu -handler vdisk_fileio -attributes filename=/pool01/lun01/lun01_ubuntu.img
# scstadmin -replace_lun 0 -driver qla2x00t -target 21:00:00:e0:8b:9c:b2:02 -group group01 -device lun01_ubuntu
# scstadmin -write_config /etc/scst.conf
lun01 lun01_ubuntu
CentOSUbuntu
作業前に検証用サーバはshutdownしてね。
42
運用を楽しむ(1)
自宅SAN友の会
#jitakusan
× 検証用サーバのbootディスクをコマンドで切り替える
43
運用を楽しむ(1)
自宅SAN友の会
#jitakusan
× 検証用サーバのbootディスクをコマンドで切り替える
44
運用を楽しむ(1)
自宅SAN友の会
#jitakusan
× もとのディスクに切り替える場合
# scstadmin -replace_lun 0 -driver qla2x00t -target 21:00:00:e0:8b:9c:b2:02 -group group01 -device lun01
# scstadmin -write_config /etc/scst.conf
作業前に検証用サーバはshutdownしてね。
45
運用を楽しむ(2)
自宅SAN友の会
#jitakusan
× ZFSのスナップショットとロールバックをたしなむ
# zfs snapshot pool01/lun01@snapshot_01
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
pool01/lun01@snapshot_01 0 - 9.77G -
# zfs rollback pool01/lun01@snapshot_01
ロールバックコマンドで、スナップショット取得時にファイルをもどせるので検証サーバの構成を大幅に構成変更する前に、スナップショットをとっておき、失敗したら戻すといった、VMwareのスナップショットと似たような使い方が可能!
作業前に検証用サーバはshutdownしてね。
46
注意事項
自宅SAN友の会
#jitakusan
× OS再起動後、ZFSのストレージプールが見えなくなったら、、、# zpool list
no pools available
# zpool import
pool: pool01
id: 14095442938340910494
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:
pool01 ONLINE
sdb ONLINE
# zpool import -f 14095442938340910494
# service scst restart
というか再起動したら必ず発生するのは何か抜けているのかな、、、すいません。ワカリマセン。
この手順で復旧できます。
47
さいごに
自宅SAN友の会
#jitakusan
× 試してみたいことが沢山!自宅SANを活用して、新しいものを楽しもう!
☺
48
Top Related