システム群ってユーザーがアクセスしないサーバをどう設計するかが鍵だよね

スケールアウトや対障害性ってユーザがアクセスしない、裏側のシステムをどう作りこむか、どういう配置にするか鍵だよね。
ユーザがアクセスしないサーバなんて一見無駄のように感じられるけど、そこがシステム全体のキーを握っているに等しい。
ここに運用と開発のノウハウが詰まっている。

3つにわけるとしたらこんな感じで、これの人気のない地味だけど重要な裏方のサーバについて書きます。



監視サーバ

各マシンのステータスを監視して問題があればメール等でアラートを上げてくれるサーバ。
初心者はまず配置しないw
配置しないとサーバの実績や現状の数値化ができずに大きなシステムトラブルを発生させることになるw
そんなに負荷がかからないサーバなので、他の裏方サーバと共有してもよいと思われる。
個人的に munin が好きなので munin で監視と状態推移のグラフを作ってます。

ログ回収サーバ、分析サーバ

それぞれのサーバからログを収集してバックアップ、分析を行うサーバ。
超初心者はバックアップ何それ食えるの?って状態でそもそもバックアップしないw。
初心者は、運用マシンの同一ハードディスクにバックアップを作成し、RAIDのトラブルでデータが消えて泣く。
本番サーバにもログを残すけど、定期的にログをこのサーバに収集し保存と分析を行う。

また、取得したデータを analog だったり、独自のログ回収ツールで分析を行うのにも利用できる。
これも初心者は本番サーバで grep してロードアベレージを上昇させて泣くことになるだろう。

監視サーバと分析サーバで得られた値は社内SLAを作るうえでの参考値と実績値なのでこいつらの存在は大変重要。
常時高負荷でなければ、他のサーバと一緒にしてもいいのかも。

データベースバックアップ、レスキューサーバ

ログ回収サーバと似ているんだけど、データベースのバックアップやレスキューに利用するサーバ。
本サービスで利用しないけどデータベースレプリケーションを引いてくる。
データベースバックアップや重い分析バッチなどを本番システム群に負荷をまったくかけずに流すことができるので大変便利。
初心者は本番サーバでデータベースバックアップをして負荷に泣くことになる。
また、mysqlの最強のバックアップ方法はmysqldを落としてtarで固めること、、、みたいなのでそれをするには本番サーバ群ではまず不可能だろう。

あと、pixivのメディクDBの構成が面白いと思った。
http://www.nicovideo.jp/watch/1254230843

それほど負荷が高くないので、他のサーバと一緒にしてもいいと思われる。

管理ページ系

本サービスのデータやユーザを管理したりする、サポート用の管理ページを置くサーバ。
初心者は、本番サーバに /manage/ とか作ってアクセス制限するのを忘れて、誰でも入れちゃったり、最悪googleにクロールされたりするw
そういうことがないように、VPN経由でしかアクセスできない領域でこっそり運営する。

これも負荷が高くないだろうから、他のサーバと一緒でいいと思う。

VPNサーバ

データセンターと自社をつなぐVPN
初心者はVPNって何食べれるの?ってことでそもそも張らない。
その場合sshとかでアクセスすることになる。globalIPを持っていないサーバにアクセスするには別のサーバを踏み台にするしかなく超不便。
VPNを張れば、安全に任意のサーバに直接接続できるので大変便利。

図では専用サーバみたいに書いちゃったけど、たいていのルータはVPNの機能を持っていると思うのでそれを利用した方がいいと思う。
それと個人的に、DCから社内LANへの逆流が怖いので 逆流する syn パケットを落としてほしいんだけど、どうなんだろう。

まとめ

んなわけで、直接サービスを提供しないけど、サービスを陰で支えるサーバについて説明しました。
こいつらは常時負荷が高いわけではないからサーバの台数をケチりたければ、裏方系は全部同一サーバでもいいのかもしれないけどさ。

他にも俺はこんなすごいサーバ配置にしているって人がいたら教えてください!