ある日の風景

職場の多目的サーバが吹っ飛んだ。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のポート転送等は含まないので、そういうのが必要なら別途やらなくちゃいけない。
でも、たったこれだけでも色々使えるぞと。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)