職場の多目的サーバが吹っ飛んだ。HDDが壊れたらしい。
このサーバは公開等していないが、ちょっとしたデータ収集みたいな雑用に使われていたマシンで、Debian wheezyで動いていた。とりあえず環境を開発PC上の仮想に退避しつつ「これ復活させたいんですけどHDD買っていい?」と上に尋ねてみた。あくまでこのマシンは僕の独断で稼働させていたもので、指示された立てたものではないからだ。
(今の仕事場にはサーバにあたるマシンが全くない。が、ゼロだと業務の内容によっては不便な事があり、一台だけ多目的サーバを立ててよいと許可をとりつけてある。要は僕の開発環境の一部という扱いだけど、連続運転するもので)
それでHDDは注文したのだけど、問題は退避したデータを仮想に適合する方。
以下の注文があった。
1.Web公開はしておきたい。(「こんなんできましたー」みたいなサンプル見せに一度的に使う事があるので)
2.だが公開ノードは仮想にしておきたい。
3.iptablesを色々いじるのは勘弁。
4.lxcをいじると br0 でよくハマるけど、あれ何とかならないか?
んー、これを解決する方法か。
ならば、以下でやってみよう。
1.LXCで仮想化する。
2.br0は/etc/network/interfacesにチマチマ書かず、libvirt 経由でローカルなセグメントを使う。
3.作る仮想ノードはWeb用(webserver)と、汎用(develop)の二つ。
libvirt は特定のMACアドレス等に固定IPを振る機能があり、子ノード側からはDHCPに見える。
つまりネットワーク設定について子は親を意識する必要が全然ない。
反面、閉じたセグメントにあるのでDNS等を置いてしまうとiptables等で穴をあけなくちゃいけないんだけど、
このままやらずに仮想化しておきたいよねえ。
でも、iptablesをごちゃごちゃ小細工するのはしたくない。これは本題のマシンじゃないんだから、あとで面倒は少ない方がいい。
<network> <name>default</name> <bridge name="virbr0"/> <forward/> <ip address="192.168.122.1" netmask="255.255.255.0"> <dhcp> <range start="192.168.122.142" end="192.168.122.254"/> <host mac="ae:6c:28:16:8f:10" name="webserver" ip="192.168.122.10" /> <host mac="ae:6c:28:16:8f:11" name="develop" ip="192.168.122.11" /> </dhcp> </ip> </network>
これ設定したら以下を。
# virsh net-autostart default
次がLXC側。
LXC(web)のconfig
# Template used to create this container: /usr/share/lxc/templates/lxc-debian
# Parameters passed to the template:
# For additional config options, please look at lxc.container.conf(5)
#lxc.network.type = empty
lxc.rootfs = /var/lib/lxc/isetta/rootfs
# Common configuration
lxc.include = /usr/share/lxc/config/debian.common.conf
# network
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = virbr0
lxc.network.name = eth0
lxc.network.hwaddr=ae:6c:28:16:8f:10
# Container specific configuration
lxc.mount = /var/lib/lxc/isetta/fstab
lxc.utsname = web
lxc.arch = amd64
lxc.autodev = 1
lxc.kmsg = 0
lxc.start.auto = 1
LXC(develop)のconfig
lxc.utsname = develop
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = virbr0
lxc.network.name = eth0
lxc.network.hwaddr = ae:6c:28:16:8f:11
lxc.start.auto = 1
あとは、ホスト側で nginxのリバースプロキシ設定を。
/etc/nginx/sites-available/default
server { server_name ellidanus-b.ddo.jp; proxy_set_header Host $http_host; location / { proxy_pass http://192.168.122.10/; } }
うん。
もちろんこれらの設定はdnsのポート転送等は含まないので、そういうのが必要なら別途やらなくちゃいけない。
でも、たったこれだけでも色々使えるぞと。