unoh.github.com

Tokyo Tyrantを使ってみて

Wed Oct 28 03:08:44 -0700 2009

yamaokaです。

通常のデータベースとしてではなく、Key-Valueストアの選択肢として Tokyo Tyrantを少しずつ使ってみています。 実際に運用するにあたって、いくつか行ったことを書いておきます。 ちなみに、現在の構成は1台のみでの運用です。 マルチマスター構成やレプリケーションなどは行っていません。

PHPのクライアント

Tokyo Tyrantを利用するのはPHPのアプリケーションからです。 最初はmemcachedプロトコルを利用して PECL::memcacheを使っていましたが、 データの大量更新を連続で行うとデータの取得が正常に行えなくなる現象が発生したため、 Net_TokyoTyrantを一部改変したものをライブラリとして利用しています。 パフォーマンスではPECL::memcacheに負けますが、クリティカルな処理をしていないこともあり、 今のところ問題になってはいません。 PECL::tokyo_tyrantもそのうち試してみようと思っています。

監視

Nagiosのcheck_tcpプラグインを利用しています。 Tokyo Tyrantが動いているサーバーにmemcachedプロトコルで接続、 statsコマンドを実行してチェックしています。memcachedが動いているサーバーを監視するのと同じ要領ですね。

define command{
        command_name    check_tokyotyrant
        command_line    $USER1$/check_tcp -H $HOSTADDRESS$ -p 1978 -t 5 -E -s 'stats\r\nquit\r\n' -e 'uptime' -M crit
        }

実際には、上のようなコマンドを定義して監視しています。

ログローテート

Tokyo Tyrantにはログを出力する起動オプションがあり、 クライアントからの接続ログをテキストファイルで残すことができます。 しかし、そのログを保管し続けていると容量を食うので、適宜ローテートさせています。 Tokyo Tyrantを管理するttserverctlはHUPを受け取ることができるので、 次のような設定をlogrotateに対して行うことでローテーションしています。

/var/ttserver/log {
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
        /usr/sbin/ttservctl hup > /dev/null 2>/dev/null || true
    endscript
    rotate 7
    daily
}

バックアップ

Tokyo Tyrantはホットバックアップを取ることができるので、 1日1回、データ本体をコピーして保存しています。 ホットバックアップはTokyo Tyrant付属のコマンドを実行するだけでOKです。 バックアップとリカバリーの手順についてはTokyo Tyrantのドキュメントに詳しく記載されているので、 そちらを参照しつつ自分の環境に合ったバックアップスクリプトを用意するといいのではないでしょうか。

最後に

Tokyo Tyrantは非常に扱いやすい環境だと感じています。 実際に運用していて、タイミングによってはかなりたくさんの更新・参照が行われるのですが、 負荷も上がらず非常に安定して稼動しています。また、処理も高速です。 将来的にはセッションストレージとして利用するのもありかな、と思います。

Tokyo Tyrantを用いた運用事例の1つとして参考にしていただければ幸いです。 また、皆さんの運用事例やtipsなどありましたら、是非教えてください。