openvz から lxc への移動で出てきたデータ各種

個人的に遭遇した問題ばかりなので、一般論としてもそうとは限らないので注意。

1.ブリッジ関連

ブリッジの設定なんて昔からよくやっていたわけだけど、なかば惰性で設定してたみたいだ。それが出てきた。

 1) 同じ設定なのにVirtualbox上に構築しようとすると、うまくルーティングできない。
 
  これはVirtualboxのブリッジ設定の方の問題だった。物理デバイスを指定する「ブリッジ」から別の設定にすると解決した。
 
 2) br0(ブリッジにつけた名前)にIPを正しく振ってなかった。
 
  ここにユニークIPをひとつ振りなさいか。マジでわかってなかったんだな僕ぁ……。
  ちなみに現在、母ノードの /etc/network/interfaces はこうなっている。
  

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 192.168.1.21
        netmask 255.255.255.0
        gateway 192.168.1.1

# This is an autoconfigured IPv6 interface
#iface eth0 inet6 auto

# for Bridge(lxc)
auto br0
iface br0 inet static
       pre-up /sbin/brctl addbr br0
       pre-up /sbin/brctl addif br0 eth0
       pre-up /sbin/ifconfig eth0 up
       address 192.168.1.22
       netmask 255.255.255.0
       network 192.168.1.0
       broadcast 192.168.1.255
       gateway 192.168.1.1
  

  わかるだろうか?
  本体が 192.168.1.21 として、ブリッジを 192.168.1.22 としている。で、lxcコンテナたちで固定IPが必要なやつは、全てこの br0 を指し示すようにするのね。
  具体的には、以下のように。
  

*** /var/lib/lxc/timeserver/config の例 ***


# network
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.ipv4 = 192.168.1.28/24
lxc.network.ipv4.gateway = 192.168.1.1

  わかっていたら当たり前の話なんだけど、このへんがわかってないと極端な話、「2つ以上lxcで固定IPとる時は、br1,br2…って作らないとダメなんだろうか?」とかアホな事を考えたり、テレクラ状態で動いてしまっている sshd を lxc のせいにしたりしてしまうかもしれない。ていうか後半は僕がやっちまった事。
  うん。うろ覚えでなく、ちゃんと覚えておけって事ですね。

2.アプリケーション編

lxcの設定自体は今や、ぐぐると腐るほどあるので、ここではサーバ移動一般でも遭遇するタイプの問題とも言えると思う。

openvzで使っていた子ノードの環境は、Debian squeezeが多く、そして母艦のCPUの都合で i386 だった。これを全部 wheezy amd64 とした。よって起きた問題の中には、これらの環境の違いに起因するものも含まれるので注意。

 1) MySQLサーバに接続できない。
 
  基本的に止まっているMySQL鯖のコピーなんて、DB本体(Debianなら /var/lib/mysql)を tar で固めて転送してしまえばいい。あとはメンテ上気になるなら、/etc/debian/debian.cnf の内容を書き写せばいいくらいだろう。しかしこの2つをきちんとやっても全く接続できなかった。これで数時間はまった。
  結論からいうと…… デフォルトのMySQL鯖がTCP接続を許してないのをすっかり忘れていた のだ。昔、postgresqlでも類似の問題にはまった記憶があったのに、いやぁ、自宅利用のDB鯖なんて順調に動いてたら普段触らないもの、すっかり忘れていた。
  よって、wheezyな新鯖で以下を設定した。
  

*** /etc/mysql/my.cnf の例 ***

#bind-address           = 127.0.0.1

  ここがコメントアウトされてないと、localhostしかダメになるのだ。
  ちなみに気づいたのは、安全のために全ノードに nmap でportscanかけたからでした。ここが有効になっていると portscan しても mysql ポートが開いてないのがわかるんですよね。

3.運用編

 1) いちいち lxc-create しないで、種環境作って lxc-clone しよう。
 
  実に些細な事だけど、これやっとくと最短なら一分以内で新ノードが作れる。誇張でもなんでもなく。
  うちは二分ちょっとかかるけど、その大部分は固定IPを決める作業。逆に言うと、DHCPでいいのならこの作業もいらないわけで、 lxc-clone -o 種環境 -n 新環境 の一発打ち込んで、あとは待てば終わり。そこそこのマシンなら本当に一分かからないし、早いマシンなら15秒くらいでイケるかも。
  いやぁ、マジ便利になったもんです。

# lxc-clone -o basenode -n newnode

  僕はネーミングセンスないので、種環境の名前はそのまんま「base」にしました。

コメントを残す

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

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