2012/03/19

お金を(なるべく)かけずにサーバー運用出来るか試してみた

最初に結論
  • ドメイン周りをスムーズに扱えるPaaSは売れる!
ドメイン popowa.comに付随する過去のサブドメイン遺産をどれだけ安く運営出来るか試してみました。

過去のサブドメイン遺産はほとんどアクセスがない、もしくは自分しか使っていないのでここではスケールが出来るかどうかは重要視しない事にします。

このドメイン(popowa.com)には、
  1. ネームサーバ
  2. メールサーバ
  3. ブログサーバ
  4. レポジトリサーバ
  5. ウェブサーバ
  6. 検証で試したOSSなアプリ(主にWordpressなど)用検証サーバ
がありました。
過去使っていた有償環境としては
  1. 自宅サーバー
  2. さくらVPS
  3. ムームードメイン
  4. Lolipop
  5. AWS
  6. VPSLink
  7. Tektonic
  8. Xrea
  9. RackSpace
とかで運営していました(順不同)。

■ネームサーバー

まずネームサーバーをAWSが提供しているRoute 53に移します。Bindも脆弱性が多いので、これでBindのパッチ当てを気にする必要がなくなります(ノ´▽`)ノ 。
Route 53は有償ですが、気にするに値しないほど安いです。本当に。

★ネームサーバーはRoute 53で決まり!

■メールサーバー

メールは、スパムしか受けないので、Google Appsに移行しました。元々メールサーバーの構成はcatch-allなExim + SpamAssassin + ClamAVでした。
メールをトリガーにする動きが出来なくなったのでそれは別に何か考えたいと思います。

 ★複数アカウントを作るのではなくアカウント+hoge@exampleとかで拡張出来るようにしておくと移行が楽
 

■ブログサーバー

ブログは、WordPressから、 Bloggerに移行しました。
まず前提ですが、WordPressに以下のプラグインを入れてから、WordPressは運用しましょう。
 画像などアップロードされたファイルをS3にあげてくれるPluginです。

もしくはPicasaに画像を最初にアップロードして、そこから参照するものあり
 Flickrは使っていないが同じようなPluginがあると思う。

ブログの引っ越しで困るのは画像ファイルです。画像だけ歯抜けみたいになるので、出来るならばS3とか外部ファイルサーバーに置いておくと吉です。

WPからBloggerの引っ越しは簡単で、WPから吐き出されたXMLをBloggerにインポートすれば完了。
WordPress.comというPaaSサービスもあるのだけれど、独自ドメイン、独自のテーマを使いたい場合は有償なので諦めました。
★画像は外部サーバに置こう

■レポジトリサーバー

 まず過去のレポジトリは、GitHubにあげてしまいます。
 しかし実情として半分ぐらいしかあげられませんでした。
実際に運用しているコードはあげられません。過去のサイト運営で溜まったデータやサーバ別の設定ファイルなどはあげないように出来ますが、面倒なのは変わりありません。
GitHubにもプライベートモードがあるのですが、有償です。
GitHubの一番安いプランでもいんだけどなぁとも、ここで考えを切り替えます(切り替えられない人はレポジトリサーバを立てるか有償GitHubにするかとかでしょうか)

今GitHubにあげられないレポジトリはAWS上に立っているEC2についているEBSにあるので、必要な時だけEC2---EBS経由でみる事にしました。

ここはまだ作業中なので、以下のレポジトリサービスも検討予定

★プライベートレポジトリの扱いは難しい...

■ウェブサーバー

ウェブサーバーと言っても、アクセスの状況や、更新の頻度によって対応が変わってくると思います。
まずwww.popowa.comは静的HTMLにしたので、S3に置きました。
それ以外の動的なウェブサーバーはPaaSであるdotCloudに置いてみる事にしました
無料版は、appは2つまでしかデプロイ出来ません。しかしアプリの下に更にまたアプリ、という事も出来ます。
しかしルートの設定がサブディレクトリにも適応されてしまうようなので、複数の開発言語が違うアプリを一つのアプリとしてデプロイというのは難しそうです。

memokui.popowa.comをdotCloudに置いてみました。
dotcloud create memokui
cd ~/Project/Code/memokui
emacs dotcloud.yml
www:
    type: php
dotcloud push memokui .
#ソースディレクトリのルートディレクトリで行う必要がある
dotcloud restart memokui.www

ハマった点は、typeをstaticにした場合はappを一度削除して再度作り直さないといけない、という点です。
DBも使えるようなのでよさげですが、有償版はそこそこするのでもっと安価なdotCloudがあればいいなぁと思いました。

dotCloudのよい点はサブドメインをCNAMEで指定出来る、という所です。dotCloudでは、
http://memokui-csg3kdce.dotcloud.com

のように独自サブドメインを配布してくれます(これはどこのPaaSでも同じ)
しかしdotCloudでは独自(サブ)ドメインを追加する事が出来るのです。
dotcloud alias add memokui.www memokui.popowa.com
ネームサーバーでの設定
memokui.popowa.com CNAME  memokui-csg3kdce.dotcloud.com
という風にRoute 53に設定しておけば、おk
dotCloudだけかしら、と思ったら、cloudcontrol同じ事を無料で出来るようです!

他のPaaSや安価なレンタルサーバーは、独自サブドメインを使いたい場合は、ドメインのネームサーバーを移行したら可能になるものばかりで、ネームサーバーとウェブサーバーを別のサービスにしたい人には向いていないと思いました。

(´・ω・`)ガッカリ・・・

後はwikiをどこに置くか検討中。。

追記:GitHubでウェブサイト運営が出来るようです!@d6rkaizさんありがとう!
http://pages.github.com/

★無償でエイリアスで独自ドメインが使えるPaaSは嬉しい

■検証用ウェブサーバー

検証用は、色々触るので、さくらVPSと必要な時にAWSな感じで行こうかなぁと思っています。

■突然まとめ

PaaSなサービスとかレンタルサーバーとかの多くは、ネームサーバーも一緒にしたらいいじゃない!というスタンスですが、これはユーザーの自由を奪うものに他ありません。

一番起点になるドメインの扱いをロックされてしまうサービスは今後流行らないのではないでしょうか?
ビジネス的にはAll in oneにしたい所だと思いますが、ベンダーロックがない、というだけでもその商品を選択候補に入れやすくなります。
 
SaaS/PaaS/IaaS環境を提供する上でも、ブロックのように取り外し可能な状態である事が今後大事になってくるのだと思いました!

2012/03/18

福岡インフラ勉強会第一回報告〜トラブル自慢、受験前対策〜

 福岡インフラ勉強会がAIP Cafeで行われました!http://atnd.org/events/26166



■私のトラブル自慢

ほとんどオフレコなので書けません。。
  • サーバー監視はなるべく常時行うようにする(特定の時間のみの確認だと、それ以外の時に問題が一時的に起こっても知りようが無い->問題を見逃してしまう可能性あり)
  • トラブルは人が起こす
  • KVMとLVMで仮想環境を構築(改) 【ゲストマシン拡張編】
  • ReiserFSもう止めたい;;
  • edというエディタを知った(viの親みたいなものらしい)

トラブル自慢はあんなことやこんな事まで出て来て、それに対しての対策方法なども一緒に協議されました。


■チューニンガソン対策

チューニンガソンがリモート参加OKになったので、その対策を話し合いました。

第3弾!いろいろチューニングしてパフォーマンスを競うバトルイベント「チューニンガソン」3月24日(土) 開催! #tuningathon


現在出ている条件
  • 当日渡された環境を使い、OSやサーバ周りのチューニングでパフォーマンスを競う
  • サーバ環境がAWS(EC2)でOSはAmazon Linux AMI
    (現在の最新はAmazon Linux AMI 2011.09 )
  • チューニング対象はwebアプリ
  • webアプリ自体の改変は対象外
ここで山を張ってみます。
  • 第一回目はWordPress(PHP,書き込み速度)
  • 第二回目はMediaWiki(PHP,読み込み速度)
  • 第三回目はEC-Cubeかもしれない!?
なぜEC-Cubeかというと、
  • ある程度知られているOSSである
  • PHPである
  • チューニングし甲斐がありそう
  • ビジネスでもよく使われている
EC-CubeではなくてもPHPで作られたOSSは他にもあります。
  • openPNE
  • Magento
  • Xoops
  • Pukiwiki
とかでしょうか?

PHP以外ではRubyか?Pythonか?と思ったのですが、次もPHPではないかと思います。なぜかというと
Ruby
  • 思いつくOSSがRedmineぐらいしかない  http://www.opensourcerails.com/
  • Ruby用のHTTPDが沢山ありすぎて、Rubyを使っている人に有利になってしまう可能性がある
  • Railsはライブラリ扱いなのか?(逆にPHPはFWを使って作った有名なOSSがあまりない気がする)
    • ライブラリだった場合、設定変更や、カスタムが可能なのか?
    • テンプレートエンジンも変更出来るのか?
Python
  • 思いつくOSSがTracぐらいしかない
  • 使っている人が圧倒的に少ない
Perl使いが、最近PerlもJava側な感じになってきているので今更Perlはねーという事だったので、Perlは対象外としました。Javaもあまり高速しようがないのでは?という意見多数。

それでは高速化について調べてみましょう!

■言語周りの高速化

□PHP

  1. コンパイルし直してみる
    http://www.php.net/manual/ja/install.unix.php 
    1. オプションも吟味する
      http://www.php.net/manual/ja/configure.about.php 
    2. FastCGIモード(Lighttpd と実績あり)
      http://php.net/manual/ja/install.fpm.php 
  2. バージョンを変更する
    Amazon Linux AMI 2011.9で入っているPHPのバージョンはphp-5.3.6です。
    PHPの最新は2012/3/1に出たPHP5.4.0です。
    http://php.net/ChangeLog-5.php
    入れ替えるというのも手です。
  3. ネイティブコンパイラを使ってみる
    1. phc
    2. Roadsend
    3. HipHop for PHP
  4. アクセラレーターを使う
    http://en.wikipedia.org/wiki/List_of_PHP_accelerators 
    1. APC
    2. eAccelerator :開発が終わっているR.I.P.
    3. XCache 
    4. Zend Optimizer 
    5. PHP Accelerator
    6. 参考
  5. 設定周り(php.ini)
    http://phplens.com/lens/php-book/optimizing-debugging-php.php
  6. 参考URL

□Apache

  1. バージョン確認、可能ならば入れ替え等
    最新バージョンはApache 2.4.1
    http://www.apache.org/dist/httpd/Announcement2.4.html
    http://httpd.apache.org/docs/2.4/new_features_2_4.html
    2.4系バージョンが早い
  2. コンパイルし直してみる
    http://httpd.apache.org/docs/2.4/install.html
    1. またオプションも吟味する
      http://httpd.apache.org/docs/2.4/programs/configure.html
      不要ならば削除、高速化しようなら追加等
    2. モードも確認
      worker / prefork - PHPはprefork推奨
  3. 設定ファイル確認
    1. 同時接続数を増やす (MaxKeepAliveRequests)
    2. KeepAliveはonに
    3. DNSの逆引き停止
      HostnameLookups off
    4. ログ系設定
      ログをなるべく吐かない設定にする
      1. LogLevel
      2. ErrorLog(出力先を/dev/nullにするとか)
  4. モジュール
    http://httpd.apache.org/docs/2.4/mod/
    1. キャッシュ化するモジュール
      1. mod_cache(アクセス制限を無視するので要注意)
      2. mod_cache_disk
      3. mod_cache_file(使用要注意)
    2. キャッシュを取り扱うモジュール
      1. ETags
      2. mod_expires
    3. プロキシ系モジュール
      1. mod_proxy
      2. mod_proxy_balance
      3. mod_proxy_connect
      4. mod_proxy_express
      5. mod_proxy_fcgi
      6. mod_proxy_fdpass
      7. mod_proxy_html
      8. mod_proxy_http
      9. mod_proxy_scgi
    4. 圧縮系モジュール
      1. mod_deflate クライアントへ送られる前にコンテンツを圧縮する 
      2. mod_pagespeed (CSSやJSなど不要な改行、スペースを取り除く)
    5. 参考URL
      1. Apache高速化計画
      2. 最終回 Apacheパフォーマンス・チューニングの実践 , 2ページ目

□Ngix

http://nginx.org/ja/
※高速なNgixではあるが、モジュールに関してはApacheの方が充実しているので、そちらでしのぐ方法もある
参考URL
  1. Tips for nginx

□DB

DBはMySQLじゃないかなーと思います。何故かというとPostgreSQLはAWSでは提供されておらず、またOracleのライセンスを負担するほどでもないと思うからです。Oracleがスポンサーだったらまた違ってくると思うけど (・∀・)ニヤニヤ
  1. バージョン確認、可能ならば入れ替え等
    1. MySQL5.1系(5.1.61)
    2. MySQL5.5系(5.5.21)
    3. MySQL5.6系(5.6.4
  2. コンパイルし直してみる
    http://dev.mysql.com/doc/refman/5.1/ja/quick-install.html
  3. 設定ファイル確認
    1. 参考URL >>  MySQLを高速化したいときのチューニング方法
    2. スレッド数、同時接続数 
    3. スロークエリログなどをみながら
    4. メモリ周りや、バッファ
    5. キャッシュ
  4. Index作成、削除
  5. MySQL Proxy
    https://launchpad.net/mysql-proxy
    静的/動的を分離させるなど
  6. コネクションプール:遅そうなので却下
    SQL Relay で PHP + MySQL コネクションプーリング
  7. 参考URL
    1. MySQLを高速化したいときのチューニング方法
    2. MySQLを高速化する10の方法(漢のコンピュータ道はとりあえず一通り見ておく) 

□OS

  1. iptablesを使って使用するポートを限定する
    1. iptableの設定-CENTOSでアリソンサーバ
  2.  参考URL
    1. CentOSをたったの3ステップで高速化する方法
    2. さくら VPS + CentOS のチューニングや高速化もっとこうすれば良かった作業まとめ

□計測ツール

アドオン
コマンド
アプリ

□思いついた事

書き込み速度を重要視する場合は、Master DBのカラムには書き込まない。出力するバイナリーログは正常なのでslave側は正しいデータが入っている
MySQLとMariaDBは互換はある程度ありそう。。だけどあまり得策ではなさそうだ。。http://kb.askmonty.org/en/mariadb-versus-mysql
条件が分からないので、ファイルシステムを変えてもよいのか、とかサーバ側はどこまで手を入れてよいのか分からず一時暴走w

こちらも参考になりました

□まとめ

福岡熱い! チューニンガソンに関わらず非常に勉強になる会でした〜!
福岡インフラ勉強会が気になる方はFacebook Groupに今すぐ参加!
https://www.facebook.com/groups/100825430047874/


追記:チューニングソンと書いていたので、チューニンガソンに変更
edはviの親ではないらしい

2012/03/15

IT飲み会に行ってみた

前から行ってみたかったIT飲み会@福岡、があるという事で行ってみた。
ITの飲み会だから、ギークな人とかが来るのかしら、と思っていたけど、IT企業の営業や採用、人材紹介な人達が多くて一瞬間違えた!!と思ってしまったw

でも@ggaokiGuildCafe)さんの話を聞けてよかった!前から聞きたいと思っていた事も話せたし♪
後めっちゃ面白い人にも遭う事が出来た!
IT飲み会@福岡はこんな感じでした
  • TwitterとかFBをやっている人が参加者の半分ぐらい
  • スーツ多し
  • 女性は少ない
  • ギークな飲み会ではない << 重要
  • 初めての参加者が多かった
こうあってほしいなぁという要望編
  •  Twitterのハッシュタグを認知させる(始まるまでの画面で表示させておくか、ハッシュタグが付いているツイートを流しておくなど)
  •  BGMを押さえ気味にする(=>話に来たのにBGMがちょっとうるさかった)
  •  本編がだらだら気味だったのでタイムキーパーを設けるとよいかも?
  •  可能ならばスタッフの方はひとりぼっちになっている人を会話に入れるような事をしてあげるといいんじゃないかなーと思った。
  • 見知らぬ人が集まる会は、立食がいいじゃないかなーとも思った
IT飲み会が開催されたDRESSの料理はおいしかったよ!
中国の不思議

2012/03/06

言語別Changelog 2012/3/6時点

Ruby 1.9.3-p125  リリース分Changelog
PHP 5.4.0 2012/3/1リリース分Changelog
 Python 3.2.2 2011/9/4リリース分Changelog
Python 3.3.0 alpha 1 2012/3/1リリース分Changelog

Perl 5.14.2 2011/9/26リリース分Changelog
#Perl 6は多分対象外だと思う

ScalaとかLuaとかは出てくるのだろうか。。?