All Your Bugs Are Belong To Ass

tutumでできるwebapp冗長化構成

サービスのリデプロイをするとき、単発のコンテナでサービスしてると、どうしてもダウンタイムが発生してしまいます。

このブログは現在tutum + digital ocean + awsで運用されていて、webappコンテナが3つ稼働しています。つまり、冗長化構成がとられているんですね。

webappの冗長化構成については、tutumのドキュメンテーションにもかいてある事項ではあるんですけど、このブログでも大まかな解説をします。

まずwebappサービスをつくろう

以前解説した手法で、webappサービスを構築してください。

この時、コンテナ数は2個以上にしたいですので、node portはdynamicのままにしておきましょう。そうしないと、同一コンテナ内でstatic port同士が衝突するという悲しい結果になってしまいます。

haproxyをつかおう

実はtutumにはhaproxyのdocker imageが既に用意されています。Launch Service>jump start>Proxiesに、tutum/haproxyがあるので、こいつを使います。

こいつでhaproxyサービスを立ち上げて、既に用意したサービスにリンクしてやると、リンク先サービスにあるコンテナのnode portを認識し、自動的に冗長化構成を構築してくれます。すごい!

Node Portは、外からアクセスする際のポート番号を指定しましょう。コンテナ数は1つにしてくださいね。それから、haproxyサービスの立ち上げで必須なのが、リンク先サービスに前項で構築したサービスを指定することと、API RolesにFull Accessを指定すること。どちらが抜けてもhaproxy側のログにエラーが出てきますので、しっかり確認してください。

これでサービスを起動すると、haproxyサービスのlogに、こんな感じのやつが出てくるはずです。

[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z global
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    maxconn 4096
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    pidfile /var/run/haproxy.pid
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    user haproxy
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    group haproxy
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    daemon
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z defaults
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    mode http
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    option redispatch
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    timeout connect 5000
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    timeout client 50000
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    timeout server 50000
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z frontend default_frontend
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    bind 0.0.0.0:80 
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    default_backend cluster
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z backend cluster
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    balance roundrobin
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    server cluster-49163 myapp-2.d78d27dd-ytnobody.node.tutum.io:49163
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    server cluster-49160 myapp-1.d78d27dd-ytnobody.node.tutum.io:49160
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z    server cluster-49160 myapp-3.d78d27dd-ytnobody.node.tutum.io:49164
[myapp-haproxy-1] 2014-11-07T09:59:08.118084377Z 

ここまでできれば完成です。あとはhaproxyのNode Portめがけてリクエストを投げてみてください。webappが見えれば成功です。

試しにhaproxyのlogを観察しながら、webappサービスのコンテナを増やしたり減らしたりして、リクエストを投げてみましょう。新しいコンテナが増えればhaproxyのbackendに自動的に追加され、コンテナが減ればbackendから自動的に外されますよね。このことから、冗長性の確保ができていることが確認できますね。

まとめ

手っ取り早く冗長化構成を立ち上げられるtutum/haproxyを紹介しました。

これで、新しいコンテナを追加してから古いコンテナをterminateすることで、webappの入れ替えをノンストップで実施できますね!

Created at
by
ytnobody
Last modified at
2014-11-09 09:59
by
ytnobody