2009年4月30日木曜日

仮想サーバのバックアップ(その2)

--- バックアップを実行

バックアップ用の新しいディスクにパーティションを切って、rsyncでバックアップ

# mkdir /var2
# mount /dev/sdb1 /var2
# mkdir /var2/lib/vservers -p
# vserver サーバ名 stop
# rsync -av --delete /var/lib/vservers/サーバ名 ./
...
sent 2046517748 bytes received 526147 bytes 5873870.57 bytes/sec
total size is 2044493323 speedup is 1.00

MySQL,Apche2,PHP,Bind9とかが入っていて、データ含めて約2GBを5MB/secでコピーできた。
データファイルは1GB程度あるので、アプリケーションを含むシステムが1GBグぐらい。
USBのディスクがかなり遅いが、データの更新が無ければ、2回目は10秒程度で終了した。

---IPnuts側のデータを保存

仮想サーバではなく、IPnutsでデータとして保存すべきフォルダが/varにあり/varがtmpfsにマウントされていない(ディスクにマウントされている)とブートディスクに保存されないので、-fオプションをつけてlrp_data-saveを実行してブートディスクに保存しておく。IPnutsのデータファイルのリストは/var/lib/lrpkg/*.dataファイルにかかれている。これは、ブートディスクの/dataフォルダに保存される。sslで認証局を作ったり、証明書でOpenVPNの設定を行うと保存が必要になる。また、手動でdnsmasqのtftpを設定する場合も/var/lib/dnsmasqにデータを保存する。

# lrp_data-save -f

(ただし、これは正常にシャットダウンすると必ずブートディスクに保存される。)

/etc/fstabを変更し一旦設定を保存し再起動で、現行の動作を確認

LABEL=VAR /var ext3 defaults 0 2
LABEL=HOME /home ext3 defaults 0 2
LABEL=TMP /tmp ext3 defaults 0 2
LABEL=SWAP none swap sw 0 0

LABEL=VAR2 /var2 ext3 defaults 0 2
### for recover
#LABEL=VAR2 /var ext3 defaults 0 2
#LABEL=HOME2 /home ext3 defaults 0 2
#LABEL=TMP2 /tmp ext3 defaults 0 2
#LABEL=SWAP2 none swap sw 0 0

---リカバー時の動作確認
本体が動作しているのであれば、/etc/fstabを書き直して設定保存してもいいが、本体が起動しない場合もある。この場合は、ブートディスクの/systemフォルダにfstabがあるのでこれを編集して起動する。


#LABEL=VAR /var ext3 defaults 0 2
#LABEL=HOME /home ext3 defaults 0 2
#LABEL=TMP /tmp ext3 defaults 0 2
#LABEL=SWAP none swap sw 0 0

#LABEL=VAR2 /var2 ext3 defaults 0 2
### for recover
LABEL=VAR2 /var ext3 defaults 0 2
LABEL=HOME2 /home ext3 defaults 0 2
LABEL=TMP2 /tmp ext3 defaults 0 2
LABEL=SWAP2 none swap sw 0 0


lrp_data-saveで保存されるパッケージのデータは、/varがtmpfsではない場合(ディスクにマウントされている場合)起動時にロードされないので、リカバー時には手動で
# lrp_data-load -f
を実行し再起動する必要がある。これを避けるには、/var/lib/lrpkg/*.dataの中身をみてあらかじめバックアップ先にバックアップしておけばよい。

起動後動作確認すればOK。元にもどすときは、再度ブートディスクの/system/fstabを編集して再起動する。

仮想サーバのバックアップ(その1)

これまで、drbdでシステムを2重化し、バックアップをほかのマシンにコピーしていたシステムを、IPnuts内の仮想サーバに移行しようとしている。drbdで2台使用し、バックアップに1台、合計3台、このシステムにからんでいたが、単純に1台で運用するように変更する。

仮想サーバはvserverを使用する。これだと、パフォーマンスとかメモリとかの心配がほとんどない。

vserverはすでに/var/lib/vserver内にあってテスト的に動作しているので、これのバックアップを行うテストをする。

/etc/fstabは

#
proc /proc proc noauto 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
shm /dev/shm tmpfs defaults 0 0
/dev/cdrom /cdrom iso9660 noauto,ro
#/dev/hda2 none swap sw 0 0
LABEL=VAR /var ext3 defaults 0 2
LABEL=HOME /home ext3 defaults 0 2
LABEL=TMP /tmp ext3 defaults 0 2
LABEL=SWAP none swap sw 0 0

# You may edit only under line when you know that you do
tmpfs / tmpfs rw,size=160M
#tmpfs /tmp tmpfs rw,size=12M
#tmpfs /var tmpfs rw,size=24M

現行のディスクのパーティション:

Device Boot Start End Blocks Id System
/dev/hda1 1 38753 19531480+ 83 Linux
/dev/hda2 38754 40692 977256 83 Linux
/dev/hda3 40693 42631 977256 82 Linux swap / Solaris
/dev/hda4 42632 77520 17584056 83 Linux


これにUSBでディスクをつないでバックアップする。IPnutsなので、/var以外にデータは無いが復旧しやすいように、パーティションは同じ構成にする。
バックアップするのは、/var/lib/vserver/xxxの仮想環境。設定は、IPnutsの場合、常にブートディスクのUSBに保存される(しないといけない)ので、今回バックアップの必要はない。

復旧時にはfstabのラベルを

LABEL=VAR2 /var ext3 defaults 0 2
LABEL=HOME2 /home ext3 defaults 0 2
LABEL=TMP2 /tmp ext3 defaults 0 2
LABEL=SWAP2 none swap sw 0 0

にすれば動作するように、新しいディスクにはラベルをつけておく。

2009年4月29日水曜日

インターネット越しのpxeブート

gpxeのhttpでの呼び出しがタイムアウトを起こしやすく、現在のところ難しい。

gpxeとdnsmasq (まとめ1)

dnsmasqの設定がある程度固まりました。

/etc/dnsmasq.conf (抜粋)

interface=eth0
dhcp-option=15,"sesame.local"
dhcp-option=6,192.168.0.254

dhcp-range=net1,192.168.0.100,192.168.0.200,12h
dhcp-option=net1,3,192.168.0.254
conf-dir=/etc/dnsmasq.d/conf.d



/etc/dnsmasq.d/conf.d/tftpd.conf(抜粋)

##### default boot pxe-gpxelinux.0-bootmenu ######

# pxelinux.magic
#dhcp-option-force=208,f1:00:74:7e
# Configuration file name
dhcp-option-force=209,conf/bootmenu.cfg
# Path prefix
dhcp-option-force=210,http://192.168.3.20/gpxe/
# Reboot time. (Note 'i' to send 32-bit value)
#dhcp-option-force=211,60i

enable-tftp
dhcp-boot=gpxelinux.0
tftp-root=/var/lib/dnsmasq/tftpboot
log-dhcp

######## end default #############

### Sample: gpxelinux.0 - gpxelinux.cfg ####
#dhcp-mac = 43a2-gw, 00:0c:29:xx:xx:xx
#dhcp-option-force = 43a2-gw,209,43a2-gw.cfg

### pxe - undi - gpxe.scr ###

dhcp-userclass = gpxe , "gPXE"
dhcp-no-override

dhcp-mac = vmpxe1, 00:0c:29:xx:xx:aa
dhcp-boot = net:vmpxe1 , undionly.kpxe
dhcp-boot = net:gpxe, net:vmpxe1, "http://192.168.3.20/gpxe/43a2-gw.scr"

dhcp-mac = vmpxe2, 00:0c:29:xx:xx:bb
dhcp-boot = net:vmpxe2 , undionly.kpxe
dhcp-boot = net:gpxe, net:vmpxe2, "http://192.168.3.20/gpxe/gpxemenu.scr"

#600sc
dhcp-host = 00:11:22:33:44:55, net:600sc, 192.168.0.36
dhcp-boot = net:600sc , undionly.kpxe
dhcp-boot = net:gpxe, net:600sc, "http://192.168.3.20/gpxe/43a2-gw.scr"


########### end


/etc/dnsmasq.confから/etc/dnsmasq.d/conf.d/tftpd.confが読み込まれてネットブート関連の設定が読み込まれます。

---デフォルト---
tftpでgpxelinux.0を読み込み、http://192.168.3.20/gpxe/conf/bootmenu.cfgを読み込みます。

http://192.168.3.20/gpxe/conf/bootmenu.cfg:

DEFAULT vesamenu.c32
PROMPT 0

menu background conf/y150-1.jpg
menu title IPnuts pxe boot menu
prompt 0
timeout 1000
#allowoptions 0
menu timeoutrow 20
menu vshift 2
menu rows 8
menu color title 1;36;44 #ff8bc2ff #00000000 std
menu color unsel 37;44 #ff1069c5 #00000000 std
menu color sel 7;37;40 #ff000000 #ffff7518 all
menu color hotkey 1;37;44 #ffffffff #00000000 std
menu color hotsel 1;7;37;40 #ff000431 #ffff7518 all
menu color tabmsg 31;40 #90ffff00 #00000000 std
menu color cmdline 37;40 #c0ffffff #ff000000 std

LABEL 43a2-gw
MENU LABEL ^1. 43a-gw
KERNEL 43a2-gw/linux626.c01
APPEND initrd=43a2-gw/root626.c01

パスはhttp://192.168.3.20/gpxe/がプリフィックスでgpxelinux.0が動作しているので、vesamenu.c32はhttp://192.168.3.20/gpxe/にあり、イメージファイルのy150-1.jpgは
http://192.168.3.20/gpxe/confにあります。

---その他---

その他、macアドレスでIDを指定して、undionly.kpxeとそれぞれのスクリプトをチェインしています。

http://192.168.3.20/gpxe/gpxemenu.scr

#!gpxe
imgfree
show ip
chain vesamenu.c32 conf/gpxemenu.cfg

gpxemenu.scrがチェインされて、gpxemenu.scrのあるパスがカレントになるのでパスを設定するときは注意が必要です。

http://192.168.3.20/gpxe/conf/gpxemenu.cfg

menu background conf/y150-1.jpg
menu title IPnuts gpxe boot menu
#menu autoboot
prompt 0
timeout 1000
#allowoptions 0
menu timeoutrow 20
menu vshift 2
menu rows 8
menu color title 1;36;44 #ff8bc2ff #00000000 std
menu color unsel 37;44 #ff1069c5 #00000000 std
menu color sel 7;37;40 #ff000000 #ffff7518 all
menu color hotkey 1;37;44 #ffffffff #00000000 std
menu color hotsel 1;7;37;40 #ff000431 #ffff7518 all
menu color tabmsg 31;40 #90ffff00 #00000000 std
menu color cmdline 37;40 #c0ffffff #ff000000 std

LABEL 43a2-gw
MENU LABEL ^1. 43a-gw
KERNEL 43a2-gw/linux626.c01
APPEND initrd=43a2-gw/root626.c01

pxe - undionly.kpxe by dnsmasq 先日の訂正

昨日の訂正
pxe -> gpxe(undionly.kpxe) -> gpxeのスクリプト 
までのチェインロードが、dnsmasqのDHCPで動作しました。


dhcp-no-override
dhcp-userclass = gpxe , "gPXE"
dhcp-boot=net:#gpxe,undionly.kpxe
dhcp-boot = "http://192.168.3.20/gpxe/43a2-gw.scr"

dhcp-no-override が必要でした。wikiにもチャンとかいてありました。

wikiと違って、dhcp3-serverで指定していたことと同等にするため、gpxeを判別するためにuser-classを指定し、最初のpxeブート時にはundionlyを読み込ませています。

2009年4月28日火曜日

pxe - undionly.kpxe by dnsmasq

昨日、プロフィール入れてみました。
IPnutsの開発が遅々として進まず、動作検証できてから公開なんてとてもおぼつかないので
アルファ品質、テスト版というか、開発中環境をそのままアップしようと考えています。

しばらくは、まだそれの準備段階になるのですが、それでもまだうだうだする気配。
#ようは、チラシの裏レベル

文章を書くのが苦手でここまできてしまいましたが、続けられたらいいなと思います。
よろしくです。
------

今日のメモ:
dnsmasqというアプリケーションがあって、dnsとdhcpとtftpを全部これにやらそうとしています。
なので、開発環境ではこれまでのdhcpサーバは置き換えられています。

現在、IPnutsの開発環境でネットワークブートのテストをしていて、
dnsmasq+gpxe で動作検証しています。

vmwareで gpxeのisoイメージを立ち上げると、非常に遅いので、pxeで立ち上げて、gpxe環境を持ってこようとしている。

1 pxe(BIOS)-> gpxelinux.0
 syslinux.cfg相等のコンフィグファイルとカーネル、ルートファイルシステムがhttpで読みこめる

または
2 pxe(BIOS)-> undionly.kpxe 
 httpでgpxeのスクリプトコンフィグファイルとカーネル、ルートファイルシステムがhttpで読みこめる

が選択肢
2の場合、
pxe(BIOS)-> undionly.kpxe -> スクリプト までがチェインするので最初のpxeではdhcpでbootファイルとしてundionly.kpxeを渡し、次にはスクリプトをdhcpで渡さないといけないので、dhcp3サーバだと


if exists user-class and option user-class = "gPXE" {
filename "http://192.168.0.15/gpxe/43a2-gw.scr";
} else {
filename "undionly.kpxe";
}
のような指定をする。

dnsmasqの場合、
http://www.etherboot.org/wiki/dnsmasq
に書いてあるようにdnsmasq.confを設定しても、gpxe.pxe(undionly.kpxeも)にfilename(ブートファイル)を渡してくれない。
訂正:dnsmasqの設定ファイルに、dhcp-no-override を追加すればできました。wikiにちゃんと書いてあった。

結論:
社内&vmwareの環境だとpxeブート->gpxelinux.0で起動させることにする。
これの欠点は、httpで各ファイルを持ってこようとするとdhcpサーバでいろいろ設定をやる必要がある。
gpxeのスクリプトが読めるとdhcpサーバで複雑な設定が不要になるので、2.の方法でやりたかった。

以下その設定。httpのパスと、設定ファイルを指定できる。

dhcpd.confの場合:

option pxelinux.configfile code 209 = text;
option pxelinux.pathprefix code 210 = text;
site-option-space "pxelinux";

...

### ホストの指定内で
option pxelinux.pathprefix "http://192.168.0.15/gpxe/";
option pxelinux.configfile "43a2-gw";


dnsmasq.confの場合

dhcp-option-force=209,43a2-gw.cfg
dhcp-option-force=210,http://192.168.3.20/gpxe/


dnsmasqを使うのでこの設定をちゃんとしてやる必要がある。メニュー表示にして、コンフィグファイルは一つにしようかなと思っている。