wtatsuruの技術方面のブログ

はてなスタッフ id:wtatsuru です。日常ブログはこちら https://tatsuru.hatenablog.com/

dockerをDebianで動かす(2013-12-14版)

これ、まだたまにアクセスあるので現状に合わせたやつを書いておきます。
docker を Debian で動かす - wtatsuru's blog

最近はもっと簡単になってます。Installation のページでも紹介されてますがパッケージからやると簡単です。
Requirements and Installation on Ubuntu Linux - Docker Documentation

curl http://get.docker.io | sudo sh -x
sudo adduser `whoami` docker
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
  • パッケージで入って適切なiptables, cgroupの設定まで行われます。
  • カーネルは新しい方がいいと思います (wheezy でビルドした 3.10.23 で確認)
  • ログアウト・ログインすると docker グループに入ってて sudo 無しで docker が使えると思います
  • curl でダウンロードしたやつを sudo で食わせるなんて恐ろしいので、可能な人はちゃんと食わせる前にスクリプトを読みましょう

Xfceにした

GNOME3.8 へのアップデート対応で疲れたので勢い余ってXfceにした。

  • xfce4 パッケージをインストール
  • 起動設定してX再起動。やらなくてもgdmで簡単に選べたぽい。
sudo update-alternatives --config x-session-manager
  • capslocl を ctrl にする方法探してたらこういうのにいきあたったので設定 XFCE4 Cheat Sheet
  • ショートカット設定。ターミナル起動とウィンドウサイズ操作変更まわり。
  • emacsとターミナルを半透明にする。ウィンドウマネージャの設定(詳細)ってやつの合成処理をONにするといけた
  • パネルが上下方向場所食ってるの気に食わないので左に動かす
  • 電源管理まわり。サスペンド設定など
  • 設定確認のため一度ログアウトしてみる

それなりに快適に使えてる。

#isucon 負けました

isucon に Third Party Cookies として id:onishi さん、 id:motemen さんと参加してきました*1。よく言えば7位、完走した中では最下位、惨敗でした。変更はけっこうrevertしてしまったので初期スコアとあまり変わりません。。
ISUCON公式Blog
やったのはこんなかんじでした。他の2人がアプリ中心なので自分はインフラ側の視点から、という立場でした(今思うと区切ってしまったのがよくなかった)

  • アカウント・互いのログイン・hosts そういうの整える
  • nginx に入れ替えて ltsv ログ、mysql の slow.log、logrotate まわり整える
  • ログと時間の割合の分析を見てアーキテクチャの目標をなんとなく思い浮かべる。とりあえず1台で帯域飽和するかどうかまで見てみる
  • mysql 自体はチューニング要らないのでスキーマだけちょろっと触って終わる
  • タイムライン高速化まわりで memcached, redis あたりほしいと言われたので適当な設定で
  • 複数台のときの同期の仕組みを考える。lsyncd/rsyncd でさらっと(入れると失敗しそう)
  • 画像を事前に変換しといて nginx で rewrite して対応する。ここでけっこうハマってしまった
  • 最後の仕上げで落ちないように

優勝したLINE選抜の話を聞くと、最初の方に全体アーキテクチャを考えてそこに向かう、というやり方をとっていてなるほどと思いました。スタート地点の意識の違いと、それを可能にするだけの裏付けがあるな(使う道具の選定と導入、そしてとくにそういう風に見積もれたのがのがすごい)と思いました。負けないように精進したいです。

今回は運営・問題とも素晴らしかったです。実際の運用・サービスにつながる感じの問題、事前・当日の運営の仕切りと、そういう背景があった上での素晴らしいISUCONだったと思います。弁当、ビールもおいしかった。おつかれさまでした && ありがとうございました。

悔しかったので、次に開催されるとき(来年?)までに実力を高めておこうと思います。*2

*1:はてなブログは Third Party Cookie の受け入れを推奨しています

*2:やっと落ち着いてきたので酒を飲んだ勢いで書きました。

#isucon 予選で息も絶え絶えです

酒代がほしくて ISUCON3 に初参加してきました。暫定スコアは2日目5位総合11位くらいなのでたぶん決勝いけてると思います。。。
優勝賞金ドドンと100万円! 第三回 ISUCON 開催のお知らせ #isucon : ISUCON公式Blog

立ち位置的な

すごいアプリケーションエンジニア2名 (id:onishi さん id:motemen さん) と参加したので、メインの方向性は2人におまかせしてひたすら下の方のチューニングをやってました。
普通に仕事でやる分程度にはやりましたが、それ以上のドラスティックな変化が足りなかったかなと反省です。

やったこと

まずは一目見て変なところの調整から入る。

  • innodb memcache plugin とか使ったことないし知らんので memcached 使わせる。
  • 一目見てダメなクエリ対策で index 追加
  • prefork httpd, keepalive off とか意味わからんので keepalive 張らせてまともなスコアが出るように
  • Apache 最近あんまり触ってないから その間に nginx に変更。static file を返す、gzip試す、ltsv ログの準備、$connection_requests あたりの確認。
  • 真面目に my.cnf を作る。そこまで大きな工夫はしてない。普通の InnoDB チューニング。

ここまでは普段の仕事の延長な感じ。このへんから結構だましだまし。。

  • アクセス傾向分析(遅い)
  • 入れたくないけどクエリキャッシュ。
  • フォーマットした結果を DB に入れるとやっぱり重そう。
  • ゲストに varnish 入れてみる。パスごとのヒット率とか見たり。
  • 遅い部分を計測しつつ提案、user から sys に移ってきたからいろいろ悩む。

最後の方はひたすらアプリの改善を見ながらパフォーマンスとボトルネックを見ることだけやってた感じでした。

提出したAMI大丈夫かな…ちゃんと通るかな…。今から不安でしょうがないです。もう酒飲んでるから管理画面は触れないし祈るのみ。

反省

こっからは読まなくていいです

  • 予習足りなかった:前日やればいいやと思ってたけど 酔いつぶれて一日中寝てた とかそういうの。ひどかった。
  • 知らないミドルウェア大杉:varnish はだましだまし、MySQL5.6 そんなに触ってないからけっこうその場で調べたり。
  • 発想の転換:当たり前の発想しかなかった。優勝クラスの人たちに結局ダブルスコア以上つけられてしまったのは、二人にまかせて思考停止してた部分があったなーと。
  • 武器をそろえる:普段からワンライナー書いてばかりだからその場で sed awk 書きまくってたけど、ちゃんとツールにするべきだなーと思った。自分の中でのパフォーマンス解析の定番的な。
  • デプロイとか考えてなかった。そこが直列になってしまった。

結局

なんだかんだで楽しかったです。普段の仕事でここまでカリカリにチューニングすることが減ってるので、なんだか懐かしい。点数をシビアに出されるのは怖いけど、自分なんてまだまだだと痛感します。
運営もすごいなーと感動しました。こんだけちゃんとツール・環境整えるのは大変だったと思います。
決勝出られたらもっと精進したいっすね。やる気でる!!!

明日仕事……

…。

docker を Debian で動かす

更新

以下の記事は古いのでこちらを参照ください
dockerをDebianで動かす(2013-12-14版) - wtatsuru's blog

元記事

いろいろ試すのにちょっと前から docker を使っているので、手元のメモを適当に書いときます。
Homepage - Docker: the Linux container engine
Debianパッケージング用のスクリプトが完備されてるので make するだけ。すごい。

git clone https://github.com/dotcloud/docker.git
cd docker/packaging/debian
make debian

グループ追加

sudo addgroup --system docker
sudo adduser tatsuru docker

NATの設定やってくれないので iptables 設定。docker0から入ってくるのでファイアウォールはそんな感じで書いてやってください。

iptables -t nat -A POSTROUTING -s 172.17.0.0/24 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

あとは普通に動きます。lxc-docker ってなんか長いので docker にでも alias するとよいです。

lxc-docker help

/etc/init.d/lxc-docker を見ると cgroup を勝手にマウントしてくれるまわりなどなんだかなぁと思うので気になる人は外すか自分でマウントしておきましょう。

EC2で出会ったCPU達

EC2で同じECUだけどCPUは違う - まめ畑
こういう記事を見て気になったので、社内のDBからCPU情報引っ張ってみた。ちなみにEC2は3年ほど前から使っています。
Nehalem から Sandy Bridge までずらっと*1。最近は Sandy Bridge に出会う割合が高くなってきている印象です。

Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
Intel(R) Xeon(R) CPU E5430 @ 2.66GHz
Intel(R) Xeon(R) CPU E5506 @ 2.13GHz
Intel(R) Xeon(R) CPU E5507 @ 2.27GHz
Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
Intel(R) Xeon(R) CPU E5645 @ 2.40GHz
Intel(R) Xeon(R) CPU X5550 @ 2.67GHz
Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz
Intel(R) Xeon(R) CPU E5-2665 0 @ 2.40GHz
Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz

追記

  • 重複があったので削除しました。

*1:AMDがない...

はてなで一緒に働きませんか?