daily reflection

毎日の振り返り

2013-07-10

Riak Meetup Tokyo #2

枠が拡大されて参加できることになったので楽しみにしていたが、仕事の方で問題が出てしまったので泣く泣くキャンセル。ついてない。実際に運用しているところの話を聞いてみたかった。

Riakは可用性が高そうなので、一時導入を検討していた。システムが大きいと自分達でクラスタを組んで維持していくのが結構キツイ。これまでの経験で、可用性を担保する仕組みはプロダクトの外にあった方が柔軟で良いと思っていた(というがプロダクトの中に組み込まれていると手が出せない)が、最近はノード数の制約がキツくないので、そういった特性が生きるプロダクトを入れて行きたかった。結局前回は時間が無くて断念してしまったので、時間を取ってトライしたい。

Riakといえば、ちょっと前にBasho Japanの方々に来ていただき、色々とお話を伺う機会があった。その時のBasho Japanのメンバの豪華さといったら…。仕事であんなにテンションあがることはそうない。

Fabricと@Parallel

サーバ台数が多いので、Fabricを使って一気に適用しようとしているところ。1台ずつ適用していくと時間がかかってしまうので、一度に複数台に対して適用したいが、全部一度に適用するとサービスが止まってしまうので、グループに分けて適用したい。

Fabricでは関数に@Parallelをつけると並列で実行されるようになり、@Parallelの引数にpool_sizeを指定するとその数分だけを並列で実行するようになる。同じことがfabコマンドのオプション指定(-Pで並列実行、-zでpool_sizeを指定)でできる。今回はこの仕組みを使って一定数のサーバに一気に適用していく。

と思って-P -zを指定して試してみたら、いきなり全サーバに適用されてヒヤっとした。関数に@Parallelをつけると、fabコマンドのオプションに何を指定しても@Parallelが強いらしく、@Parallelにpool_sizeを指定してなかったので全サーバが対象になったようだ。これが本番で起こったらと思うと怖すぎる…。

取り合えず2点追加。

  • dry_run用の関数を追加して、どういったグルーピングで適用されていくか事前に確認可能とした
  • 各サーバで処理を開始する前に、一定期間停止する。起動して想定外のグルーピングだと分かったら、この止まっている間に止める

ここまで書いて、どちらもfabのオプションで指定できそうな気がしてきた。あとで調べてみる。