備忘録もかねてここに記述しておく.
ことの初め
メリット
- ストレージを集約できる。一台のストレージを見たら全部分かる。
- ホストの増減が簡単
- 障害が発生してもすぐに別マシーンで起動ができるよ。
- ただ、MACアドレスが変わるのがちょっと面倒くさい。
- 障害が発生してもすぐに別マシーンで起動ができるよ。
- 単位ホストあたりのコストが安く付く。これ重要
デメリット
- ネットワークは相当注意しないとすぐ破綻する。
- 1Gbpsで直結で出せる速度は論理値Max119MiB/s、で、うちだと70MiB/s,ハブ経由だと40MiB/s
- でもレイテンシが低いから結構いい
構想
流れ
- UbuntuのISO(鯖でも机でもOKでも64bitがおすすめ)を用意します。今回は10.04LTS(10.10,11.04はAMDのCPUでKVMが一部動かない。)
- VMを一匹作ります。iscsiターゲットにVMホスト機能があるとそっちからも呼べて便利
- VMイメージをiscsiディスクとしてiscsiターゲットから公開します。
- DHCP3鯖を入れて、そこにgPXEとiscsiから起動するんですよ設定を書く
- VMのイメージにiscsiイニシエーターを設定、起動シーケンスの要衝initramfsで起動ディスクとしてiscsiを見るように設定する。
- ネットワークから起動してみる。
- VMイメージがKVMホストで便利になる様にブリッジの設定を行う。
作り方
sudo apt-get install tftpd-hpa
-
- 設定
sudo nano /etc/default/tftpd-hpa
-
-
- 内容は以下のとおり
-
#Defaults for tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"
sudo ln -s /var/lib/tftpboot /tftpboot
- gPXEの入手
- このページを参考にされたしgpxe-1.0.0-gpxe.kpxeというファイルがgetできればOK
http://d.hatena.ne.jp/adsaria/20100622/1277181310
-
- 入手はこちらから
http://rom-o-matic.net/gpxe/gpxe-1.0.0/contrib/rom-o-matic/build.php
-
-
- これは一度、PXEでbootをしてその後SANbootを行うというもの。これ自身がいわゆるOS。
-
sudo mkdir /tftpboot/gPXE
sudo cp /home/alfe/gpxe-1.0.0-gpxe.kpxe /tftpboot/gPXE/
apt-get install iscsitarget
- iscsi環境を設定
sudo nano /etc/ietd.conf
-
- 内容は下記のとおり、色々ディスクを増やしたい場合はLUNの数字を変えていく。
Target iqn.2011-07.net.lan:p2955be_Lucid64.disk
Lun 0 Path=/mnt/vms/iscsi955beLucidServer.img,Type=fileio
- iscsiターゲットサービスの有効化
sudo nano /etc/default/iscsitarget
ISCSITARGET_ENABLE=true
- iscsiターゲットサービスを再起動
- この時tail -f /var/log/syslogなんかやってると存在しないファイルを指定しているのがメッセージが出てくることで分かる。
sudo service iscsitarget restart
DHCPとTFTP
- DHCPサービスを面倒なのでiscsiターゲット鯖上に設定
- なお、編集する前に起動するNICのMACアドレスを取得しておくこと。
- 違うものを設定しておいてもOK。ただ、画面でIPアドレスを探す場面で出てくるはずなのでそれをメモること。
sudo nano /etc/dhcp3/dhcpd.conf
default-lease-time 600; max-lease-time 7200; log-facility local7; allow unknown-clients; option space gpxe; option gpxe-encap-opts code 175 = encapsulate gpxe; option gpxe.no-pxedhcp code 176 = unsigned integer 8; option gpxe.keep-san code 8 = unsigned integer 8; ddns-update-style none; subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.64 192.168.0.128; option broadcast-address 192.168.0.255; option domain-name-servers 192.168.0.1; option domain-name "lan.net"; # Domain name option routers 192.168.0.1; } host diskless-955beEth1 { hardware ethernet 00:12:34:56:78:9a; # Ethernet MAC address fixed-address 192.168.0.80; # Hostname or IP address option host-name "phenom2955be"; if exists user-class and option user-class = "gPXE" { filename ""; option root-path "iscsi:192.168.0.239:::<LUNの番号>:iqn.2011-07.net.lan:p2955be_Lucid64.disk"; option gpxe.keep-san 1; } else { filename "/gPXE/gpxe-1.0.0-gpxe.kpxe"; } } host diskless-955beEth2 { hardware ethernet 00:12:34:56:78:9b; # Ethernet MAC address fixed-address 192.168.0.81; # Hostname or IP address option host-name "phenom2955be"; }
- DHCP鯖再起動
sudo service dhcp3-server restart
以上でサーバー側(SANbootディスク用)の準備はOK
クライアント側の設定
- 次のサイトを参考にした
http://etherboot.org/wiki/sanboot/ubuntu_iscsi2
- まずBIOSでネットワークブートを出来るように設置する。
- またKVMのホストとしても使用するので、仮想化支援機能もONにしておく。
- 次に、一度ネットワークブート対象のイメージをKVM経由で起動。
- 次のパッケージをインストール
sudo apt-get install ssh open-iscsi open-iscsi-utils libvirt-bin kvm bridge-utils udhcpc sysv-rc-config
- 追加設定ファイルの入手
http://etherboot.org/wiki/sanboot/ubuntu_iscsi2
/etc/initramfs-tools/hooks/iscsi
と
/etc/initramfs-tools/scripts/local-top/iscsi
のファイルをもらってきて(コピペして)
実行権限を与える
sudo chmod +x /etc/initramfs-tools/hooks/iscsi
sudo chmod +x /etc/initramfs-tools/scripts/local-top/iscsi
実行権限を忘れると起動してくれない。
ちなみに(11.04では不要)
- /etc/initramfs-tools/scripts/local-top/iscsiにはipconfigと言うdhcpのコマンドが含まれているが状況によっては不安定でdhcpのDHCPOFFERを受け取ってくれない。
- したがってこの場合は以下のサイトを参考に別のdhcpクライアントudhcpcを導入して行を入れ替える。
http://www.mail-archive.com/linux-fai@uni-koeln.de/msg03793.html
- 内容はudhcpcパッケージは既に上で導入済みなので続けinitramfsにudhcpcを呼べるように追加する。
- http://bazaar.launchpad.net/~ltsp-upstream/ltsp/ltsp-trunk/annotate/head:/client/initramfs/hooks/udhcp
- →このファイルをdownload fileより取得
- 以下のファイルとして保存
- /etc/initramfs-tools/hooks/udhcp
sudo chmod +x /etc/initramfs-tools/hooks/udhcp
- http://bazaar.launchpad.net/~ltsp-upstream/ltsp/ltsp-trunk/annotate/head:/client/initramfs/scripts/init-premount/udhcp
- →このファイルをdownload fileより取得
- 以下のファイルとして保存
- /etc/initramfs-tools/scripts/init-premount/udhcp
sudo chmod +x /etc/initramfs-tools/scripts/init-premount/udhcp
-
- liveは必要ない。
- /etc/initramfs-tools/scripts/local-top/iscsiのipconfigの行(46行目?)を下記のように書き換える。
udhcpc -n -i ${netdev}
さらに(10.10では多分不要)
/etc/initramfs-tools/scripts/init-premount/udhcp
には/temp/dhcp-script.shを生成するが
この内容が受け取った内容のみを表示するようになっているので、実質的なスクリプトになる様に変更する。
135行目のgenerate_dhcp_scriptの内容を
http://d.hatena.ne.jp/katona/20071101/p2
を参考に
#!/bin/sh echo $1ing... test -z "$ip" && ip=0.0.0.0 test -n "$subnet" && netmask="netmask $subnet" ifconfig $interface $ip $netmask test -n "$router" && route add default gw $router $interface test -n "$dns" && echo nameserver $dns > /etc/resolv.conf
が出力されるように修正。
-
- ここのところをきちんと作り込めばブリッジでもbondingでもOKなはず。問題はinitramfsの段階でそれを実現する方法がどうなのかは未調査。
- /etc/initramfs-tools/scripts/local-top/iscsiのipconfigの行(46行目?)を下記のように書き換える。
udhcpc -n -i ${netdev} -s /temp/dhcp-script.sh
- ネットワークの設定:
- ここで変なのを書いてしまうと動かない(ブリッジとかbondingとか)
sudo nano /etc/network/interfaces
-
- 全部のloを除いて、ネットワーク接続インターフェイスは下記のmanualのみとする。autoの行もいらない。
auto lo iface lo inet loopback iface eth0 inet manual iface eth1 inet manual
- initramfsを更新する
sudo update-initramfs -u -k all
-
- これは今後はアップグレードをしても必要ないはず。
- +
- 以上が済んだらVMを停止。
sudo shutdown -h now
#--------------------
SAN bootのクライアント側から起動
- これで起動するように成るはず
- と言うのも不安定で起動する場合としない場合があるため。数回再起動するとうまく行く場合がある。
- udhcpcの設定が完璧ならほぼ問題なく起動する。不安定なのはipconfigなの。
- 二回連続でしっぱいする(initramfsが表示される)ようならどっか間違ってる。
- と言うのも不安定で起動する場合としない場合があるため。数回再起動するとうまく行く場合がある。
ブリッジの設定
やっぱり仮想化にはブリッジが便利だよねと言うわけで入れてみる。
sudo apt-get install bridge-utils
問題
- これはSANbootでbootディスクが見ている方をブリッジ化しようとするとすぐにフリーズする。
- なので、どっちのNICをブリッジにするかは確認して以下のスクリプトを書き直して欲しい。
- ちなみに/etc/network/interfaces に通常どおり書くとSANboot自体が失敗するので注意。
- で、そのブリッジを自動設定するスクリプトを組んでみる。
sudo nano /etc/network/if-up.d/addip
-
- 内容は以下のとおり
#!/bin/bash eth="eth0" br="br0" mask="255.255.255.0" cmd="/sbin/ifconfig "${br}" | grep 'inet addr:' | wc -l " count=`eval ${cmd}` if [ ${count} -eq 0 ] then cmd="ifconfig "${eth}" 0.0.0.0" eval ${cmd} sleep 1 cmd="brctl addbr "${br} eval ${cmd} cmd="brctl addif "${br}" "${eth} eval ${cmd} cmd="ifconfig "${br}" up" eval ${cmd} sleep 10 cmd="udhcpc -n -i "${br}" " eval ${cmd} echo ${cmd} fi
- 後処理
$ sudo chmod +x /etc/network/if-up.d/addip
$ sudo -s
# crontab -e
- で次の行を追加する。
2 * * * * /etc/network/if-up.d/addip
プラスアルファ
VMイメージにnfsを使う場合はホスト側にnfs-commonもインストールしておく。
- これを忘れているとnfsディスク追加のところでつまづく。あれなんでついかできないんだっけ?みたいな。
sudo apt-get install nfs-common
以下何らかの参考になったのでURLを書いておく、Grazie!
- http://d.hatena.ne.jp/adsaria/20090206/1233905957
- http://d.hatena.ne.jp/adsaria/20090213
- http://d.hatena.ne.jp/adsaria/20090126
- http://d.hatena.ne.jp/adsaria/20110305/1299312702
- http://d.hatena.ne.jp/adsaria/20100622/1277181310
- http://d.hatena.ne.jp/adsaria/archive?word=PXE
- http://d.hatena.ne.jp/viver/20070926/p1
- http://d.hatena.ne.jp/kakurasan/20081002/p1
- http://d.hatena.ne.jp/kakurasan/20081001/p1
- http://d.hatena.ne.jp/kakurasan/20081006/p1
- http://d.hatena.ne.jp/sfujisak/20080306/p1
- http://blog.crox.net/archives/29-Diskless-Ubuntu-Feisty-Fawn-NFS-install.html
- http://etherboot.org/wiki/sanboot/iscsi_boot
- http://etherboot.org/wiki/sanboot/ubuntu_iscsi2
- http://etherboot.org/wiki/sanboot/iscsi_boot
- http://apfelboymchen.homeunix.net/gnu/notes/booting_ubuntu_iscsi.html
- http://gihyo.jp/admin/serial/01/ubuntu-recipe/0128
- https://www.blackmoon.homeip.net/wordpress/archives/117
- http://d.hatena.ne.jp/int128/20090421/1240328744
- http://logc.wordpress.com/2011/05/08/pxe-partimage-on-livecd-by-pxe-boot-%E3%81%A7%E3%81%AEhdd%E3%81%AE%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97/
- http://ubuntuforums.org/showthread.php?p=10970467#post10970467