ネットワーク設定がイマイチだったので、改善してみた。
OpenVZも悪くないが、何しろDebianのオフィシャルツリーの中に入ってないし制限も多い。必要な機能が3.0以降のカーネルから削除されたというのが大きいのだろう。だんだんと使用条件が嚴しくなってしまう事が容易に想像できるので、LXCへの移行を昨年からぼちぼちやっていた。
ただし昨年の時点では、以下の問題があって移行がためらわれた。
思えば詳しい知識もなく、cgroupってなぁにって状態での設定であったからうまくいくわけもない。Ubuntuでは動いたがUbuntu serverに全面移行するのも業腹。もう少し待とうと結論づけたのだった。
そして先月(2014/5)、再度のチェックを開始したが、インストールも簡便になり、せいぜいcgroupとブリッジの設定をするだけで動くようになった。いやそれどころか、DHCP前提ならそのブリッジの設定すら必要なかった。
これならいけるだろうという事で、再度の検証を行った。
Debian wheezyは2014/5現在、安定版(stable)である。である。LXCはメインツリーに含まれており、以下でセットアップできる。
# aptitude install lxc lxctl
インストール時にデータ置き場をどこにするか聞かれると思う。デフォルトは /var/lib/lxc あたりだと思うが、うちでは /home/lxc に変更している。これは歴史的事情で、コンテンツは /home に入れておきたいから。openVZのデータ領域も /home/vz に入れている。
これで必要なものは揃うはずである。
ネットワークは有線ひとつでDHCPで使おうっていうのならブリッジ設定はいらないだろう。今回使いたいのはApache上でWordpressなブログを動かすサーバと、bind9ベースのDHCPサーバの二点である。しかし個別の設定はコピペでほとんど間に合うので、ブリッジとcgroupの設定のみをここに書く。
cgroup /sys/fs/cgroup cgroup defaults 0 0
# mount /sys/fs/cgroup
これはブリッジ。ちなみに ブリッジにもユニークなIPをちゃんとあげないとダメなので要注意 。僕はWeb鯖と同じにして大失敗した。テレクラ状態になったり、Web鯖にsshログインしたはずが親の方に行っちゃったりした。わはは ^^;;;;
で、 br0 っていうのが子ノード用のネットワークデバイスとなる。もちろんIPアドレス(192.168.1.13)は、あなたのネットワークにあわせて設定してほしい。
# for bridge(lxc) iface br0 inet static address 192.168.1.13 netmask 255.255.255.0 gateway 192.168.1.1 bridge_ports eth0 bridge_stp off bridge_maxwait 1
この br0 を、ネット(eth0)が上がった時に up するように仕掛けてみる。具体的には、eth0の設定の最後に以下を追加する。
(iface ... eth0用の設定) post-up ifup br0
この post-up という記述がキモ。eth0がupして然る後、br0もアップする。
これで、あとはネットワークを切り直すか再起動する。
Webサーバ。IPは192.168.1.14固定。Apache+php5+mod_mysqlを入れる。
cgroupとブリッジ設定ができていれば、導入は実に簡単。
# lxc-create -t debian -n isetta
親機側と子側に矛盾なく設定しよう。
# network lxc.network.type=veth lxc.network.link=br0 lxc.network.flags=up lxc.network.ipv4 = 192.168.1.14/24 lxc.network.ipv4.gateway = 192.168.1.1
auto eth0 iface eth0 inet static address 192.168.1.14 netmask 255.255.255.0 gateway 192.168.1.1
子側でApache関係をインストール。
# cd /etc/lxc/auto # ln -s /home/lxc/isetta/config isetta.config
DNSサーバ。192.168.1.4固定。bins9で、 宅内LAN内のサーバに対し 内外どちらからも適切にアクセスするための仕掛けを供給 している。個別設定は今のところ、/etc/bind 配下を丸コピーして自分自身とWeb鯖の正引き、逆引きをいじるだけで対応。
# lxc-create -t debian -n nike
親機側と子側に矛盾なく設定しよう。
ちなみに2ノード目だが、 ブリッジ設定は br0 をそのまま使えばいい。
# network lxc.network.type=veth lxc.network.link=br0 lxc.network.flags=up lxc.network.ipv4 = 192.168.1.4/24 lxc.network.ipv4.gateway = 192.168.1.1
auto eth0 iface eth0 inet static address 192.168.1.4 netmask 255.255.255.0 gateway 192.168.1.1
# cd /etc/lxc/auto # ln -s /home/lxc/nike/config nike.config
別の適当なマシンから、以下を実行してみる。
# host -v www.google.com 192.168.1.4
上ではいちいち lxc-create で作っているが、以下の手順が本来はおすすめ。
こっちが絶対楽なので。