仕事で、WEBシステムを運用していて、公開サーバーを管理していると、
LAMP系のシステムでの障害箇所No.1はダントツで「DataBase」であろう。
かくゆう、僕も同じくデータベース障害を何度も見てきた。
WEB-API-サービスを提供しているとある会社で、PostgreSQLを使っていた時の事。
とあるWEB会社での出来事
毎日のように、「データバキュームがキャパを超えてます」とか、「キャッシュデータを削除するバッチが、時間内に終了しません」とか、「セカンダリに動機が取れません」・・・などなど・・・
確かにSQLは便利で、モジュールを入れておくだけで固有の箱が設置され、管理も簡単なようなイメージがあるが、僕の中ではこんなブラックボックスなモジュールは無いと、当時から感じていました。
そして、自分でサービスを構築する段階で、SQLを使わずにデータ管理を行う方法を思いついた。
※単純にテキストデータで行うだけだが・・・
独自DBのメリット
しかし、この方法が良かった点は、
1.テキストデータなので、テストサイトなどへのコピーが簡単
2.管理も、対象のファイルを削除するだけ
3.コマンドラインを使わなくても、テキストエディタでデータ内容が確認できる
という風に、運用非常に楽になりました。
同時にサーバーのアクセス負荷だけを気にして構成を組んでいれば、サーバー障害はほぼなくなりました。
なんという天国状態でしょう。
要件定義というチャレンジ
でも、データ管理もそんなに甘いものではなく、最近のバズワードの「ビッグデータ」というぐらいのボリューミーなデータを扱うには、少し技術が必要になります。
もちろん、データ抽出は、awkやsedを使い、そんなに困ってはいないんですが、Mongo−DBのように、複数サーバーの冗長構成を、No-SQLで組むという事にトライしてみました。
その時、データ容量がカバーできるということで、複数サーバー(バランシング構成)において、データミラーリングができればいいという結論になり、どのようにしてリアルタイムにデータコピーを行うかという実験を繰り返していました。
別サーバーにおけるリアルタイムデータコピー
とりあえず、既存のNoSQLをいくつか実験したトコロ、
Mongo-DB:mem-cacheに頼っていて、現バージョンではダウンタイムが著しい事が判明したので、製品使用は厳しいと判断。
Hadoop:サーバー3台構成からスタートして、意外と制約も多く、そもそもテキスト管理するイメージがなかったので却下。
まあ、主要を試して、なんとなく気がついたんだが、まずテキストファイルという気楽な管理ができないと、SQLを使っているのと変わらないという点が引っかかったので、考え方を返ることにした。
Fluentdとの出会い
そこで、複数サーバーのapacheログを別のサーバー1台に集約できるfluentdというモジュールが最近人気があるという情報を入手。
インストールしてみて、そのモジュールの素晴らしさに気がついた。
apacheログだけではなく、データファイルやテキストファイルなどの状態をイベント監視して、書き込みがされたり、ファイルの容量が変動したりした場合に、個別のアクションが起こせるというツールであるという事が分かりました。
とっさにひらめいたのが、ログ・ファイルではなく、サーバーのデータベースのファイルをイベント監視して、別サーバーへ転送がかけられるといいのでは・・・
全く問題なく成功。
さらに素晴らしい機能があり、一定時間、コピーデータをプールしておけるという機能。
WEBサーバの落ちる要因第2位
同一タイミングや、1秒間内における大量のコネクションが発生すると、サーバーは簡単にダウンします。
fluentdの一定時間pool機能を使うと、1秒単位や5秒単位ぐらいのpool状態で、溜まったデータをまとめて一括コネクションで、アクションを起こせる。
もちろん、別サーバーへコネクションを転送することも可能だ。
全くのリアルタイムではないが、1秒〜5秒程度の同期であれば、WEBサーバーの実運用に置いては、ほぼリアルタイム同期に近い。
これはイケると思い、試せるだけの事を試し、実サービスに搭載してしまいました。
あまりにも使い勝手が良かったので、データベースのバランシング構成などの組み方も含めて、メモしたいと思います。
初期設定
本家より、モジュールのダウンロード
http://www.fluentd.org/
または、debianやubuntuであれば、
$ apt-get install td-agent
で簡単にインストールできるが、少し古いバージョンがインストールされるので、我慢できない人は、本家から入れましょう。
ちなみに、「td-agent」と「fluentd」は、同じモジュールと認識しておいてください。
インストールが完了したら、次回は簡単な設定を行って、データのイベント管理から、アクションまでを登録したいと思います。
0 件のコメント:
コメントを投稿