ディスクレス 1CD Linux ロードバランサー

Linux LVS + Keepalived を使ったロードバランサーKnoppix上に作って、故障しづらいディスクレスロードバランサーを作ってみた。
Knoppixのカスタマイズは、「KNOPPIXを用いたLaTeX環境の構築とその活用」(http://www.ntt.co.jp/qos/tools/) をほとんどそのまんま使っている。

  • 用意するもの

Knoppix 5.1.1のISOイメージ
VMware

作業は、実マシンを用意しても良いけど、Windows上のVMwareで行った。


概要は以下のとおり

  1. 新しいVirtualMachineを1つ作り、CD-ROMドライブとして、Knoppix 5.1.1のISOイメージ を設定して起動する。
  2. そのVirtualMachine内にKnoppixリマスタリング環境を作成する
  3. 不要モジュールの削除、ipvsadm, keepalived などのモジュール追加、設定ファイルの追加、sysctl パラメータの設定
  4. カスタムISOイメージの作成

という感じ。

VirtualMachine のスペックは、HDDを5GB、メモリを1GB程度以上で作成。
起動時に以下のようにテキストモードで起動する。

boot: knoppix 2

fdisk などで、パーティションを作成

# fdisk /dev/hda
/dev/hda1 83(Linux) 5GBくらい
/dev/hda2 82(Swap)  1GBくらい

以下のようにファイルシステムの作成とスワップ作成

# mke2fs /dev/hda1
# mkswap /dev/hda2

再起動

# reboot

テキストモードで起動

boot: knoppix 2

先ほどフォーマットしたファイルシステムをマウント後、必要なディレクトリ作成

# mount /dev/hda1 /mnt/hda1
# mkdir -p /mnt/hda1/source/KNOPPIX
# mkdir -p /mnt/hda1/master/KNOPPIX/KNOPPIX

必要なファイルをコピー

# cp -Rpv /KNOPPIX/* /mnt/hda1/source/KNOPPIX
# cp -p /cdrom/KNOPPIX/*.* /mnt/hda1/master/KNOPPIX/KNOPPIX
# cp /cdrom/*.* /mnt/hda1/master/KNOPPIX/
# cp -Rpv /cdrom/boot /mnt/hda1/master/KNOPPIX/

大体 以下のようになる。

# ls /mnt/hda1/master/KNOPPIX
KNOPPIX autorun.bat autorun.inf boot cdrom.ico index.html

chroot していよいよリマスタリング開始

# chroot /mnt/hda1/source/KNOPPIX
# mount -t proc /proc proc

いったんchrootすると、ネットワークが使えなくなるので以下で再度使えるようにする

ネットワーク設定をバックアップ

# cd /etc/dhcpc
# mv resolv.conf resolv.conf.org
# cd ../network
# mv interfaces interfaces.org


ALT+2 でchrootしていない別コンソールを開いて、繋がるネットワークの設定をchroot環境にコピー

# cd /etc/dhcpc
# cp resolv.conf /mnt/hda1/source/KNOPPIX/etc/dhcpc/
# cd ../network
# cp interfaces /mnt/hda1/source/KNOPPIX/etc/network/


ALT+1 でchrootしたコンソールへ戻り、ネットワークの疎通確認

# ping www.yahoo.com

ping がうまくいかない場合は、ネットワークを落としてから上げる。

# ifdown eth0
# ifup eth0
# ping www.yahoo.com


必要に応じて、apt レポジトリの編集。近くのレポジトリに変えたり、deb-src などを削除したりする。めんどくさければ省略化。

# vi /etc/apt/sources.list

いったんアップデート

# apt-get update


オリジナルKnoppixには要らないパッケージの削除(省略可)

# dpkg-query -W --showformat=’${Installed-Size} ${Package}\n’ | sort -nr | less

サイズの大きいパッケージ順に表示される。

openoffice-de-en
sun-java5-bin
kde-i18n-es
wine
kde-i18n-de
kde-i18n-fr
kde-i18n-it
kde-i18n-ja
qemu
mplayer
libgl1-mesa-dri
gimp-data
sun-java5-demo
sun-java5-jdk
kdevelop
scribus
mozilla
xpdf
kdvi

あたりを削除することにする。

以下のようにモジュールをリストして、削除のシミュレートをして、実際に削除 という感じで。

# dpkg -l | grep wine
# apt-get -s remove --purge wine winetools
# apt-get remove --purge wine winetools
# dpkg -l | grep openoffice
# apt-get -s remove --purge openoffice-de-en openoffice.org-debian-menus ttf-openoffice
# apt-get remove --purge openoffice-de-en openoffice.org-debian-menus ttf-openoffice
# dpkg -l | grep sun-java5-bin
# apt-get -s remove --purge sun-java5-bin
# apt-get remove --purge sun-java5-bin

...繰り返し


オリジナルKNOPPIXに入れたいモジュールをインストールする。

# apt-get install ipvsadm 
# apt-get install keepalived
# apt-get install iproute
# apt-get install subversion
# apt-get install sysv-rc-conf
# apt-get install sysvconfig


keepalived の設定 ( 2008-04-10 - Sleepless geek in Seattle 等を参照)

# vi /etc/keepalived/keepalived.conf
# vi /etc/keepalived/web.conf
# vi /etc/keepalived/smtp.conf

/etc/sysctl.conf の設定

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0

その他、自分好みの設定をしておく


chroot 終了前の掃除など

# cd /etc/dhcpc
# mv resolv.comf.org resolv.conf
# cd ../network
# mv interfaces.org interfaces
# cd /var/lib/dpkg
# ls
alternatives diversions-old parts available info statoverride available-old lock status cmethopt methods status-old diversions methlock updates
# rm *-old
# cd /var/lib/apt/lists/
# rm ring*
# rm security*
# rm deb*
# ls
lock partial


最後にlocate コマンドでファイルの高速検索を可能にするためにlocatedb のアップデートを行なう。

# updatedb

chroot の解除

# umount /proc
# exit

bash の履歴などを削除

# rm /mnt/hda1/source/KNOPPIX/.bash_history
# cd /mnt/hda1/master/KNOPPIX
# rm -rf coLinux qemu-0.6.0-windows

以下のようにカスタムISOイメージのリビジョンを記録しておくと便利

# touch /mnt/hda1/master/KNOPPIX/Custom-080422

重要 KNOPPIX5.1.1 では、以下の作業が必須(旧バージョンでは不要だった)

# mkdir /mnt/hda1/master/KNOPPIX/KNOPPIX/modules
# cp -p /cdrom/KNOPPIX/modules/*.* /mnt/hda1/master/KNOPPIX/KNOPPIX/modules

この設定は、最近のKNOPPIXで必要になったため、NTTの資料には載っていない。

cloopファイルを作成

# mkisofs -R -l -V "My KNOPPIX iso9660 filesystem" -hide-rr-moved -v /mnt/hda1/source/KNOPPIX | create_compressed_fs - 65536 > /mnt/hda1/master/KNOPPIX/KNOPPIX/KNOPPIX

イメージのテスト(省略可)

# mkdir /mnt/hda1/KNOPPIX
# mkdir /mnt/hda1/KNOPPIX/modules
# cp -p /cdrom/KNOPPIX/modules/*.* /mnt/hda1/KNOPPIX/modules/
# cd /mnt/hda1/KNOPPIX
# ln -s ../master/KNOPPIX/KNOPPIX/KNOPPIX

再起動する。
再起動の際に、先ほど作成したcloopファイルから起動してテストするために以下のオプションを付けて起動する。

boot: knoppix fromhd=/dev/hda1

うまく起動できたら、ISOイメージを作成する。

# cd /mnt/hda1/master/KNOPPIX
# mkisofs -l -r -J -V "My-KNOPPIX" -v -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -o ../my-knoppix041109.iso -no-emul-boot -boot-load-size 4 -boot-info-table /mnt/hda1/master/KNOPPIX