FreeBSD8.0 WEBサーバシステム構築のポイントおよび構築例
FreeBSD8.0 WEBサーバシステムを構築する際に考慮すべきポイントを解説します。またSOHOに適した構成の一例をご紹介します。
WEBサーバシステム構築時に考慮すべきこと
第1番目に考えておくべきことはサーバの信頼性でしょう。
コンピュータで最も故障が多いパーツはハードディスク(HDD)です。
少なくとも各サーバのシステムディスクは、RAID(Redundant Arrays of Inexpensive Disks)を組んでおきましょう。
RAIDの中でも、片方のHDDに故障が発生した場合でも動作し、かつ故障したHDDを交換さえすればRAID1が復旧できるRAID1が良いでしょう。
本サイトではGMIRRORによるRAID1をご紹介します。
サーバの故障原因は他にもありますので、サーバの最低構成数は2台となるでしょう。
WEBサーバが2台あれば、常時は負荷分散のためドメインあるいはサブドメインごとにサーバを振り分け、異常時のみ1台に集中させることも可能です。
本サイトではMySQLのレプリケーション機能を使用した負荷分散例をご紹介します。
また、本来なら回線・接続プロバイダー・ルーターも並列化するのがベストですが、費用との相談でしょう。
第2番目に考えておくべきことは、パフォーマンスでしょう。
最近、WEBサーバとして十分な性能をもつコンピュータが比較的安価に入手できるようになりました。
しかし、数百万件という大規模なデータベースと増大するアクセスを高速にこなすためには、
HDDの構成は勿論、CPUの速度やメモリー帯域幅も考慮する必要があります。
HDDの選定で考慮しておくべきことは、データ転送規格と、HDD回転数です。
最近の一般的なデータ転送規格SATA(Serial Advanced Technology Attachment)の転送速度は約150MB/s(SATA2なら300MB/s)、
SAS(Serial Attached SCSI)の転送速度は約300MB/sです。
一方、回転数が7,200rpmのHDDの内部転送速度は40~70MB/s程度、15,000rpmのHDDの内部転送速度は90~150MB/s程度です。
このため、大容量のHDDを一台設けるより、例えばデータベース単位で2~3台のHDDに分散する方がより高速化が可能です。
最近では、さらに高速なSSD(Solid State Drive)の価格も安くなってきていますので、SSDを選択するのも良いかも知れません。
大規模なデータベースを扱うのが主体であれば、CPUの速度がボトルネックになることはそれ程多くありません。
しかし、メモリー帯域幅については多少注意しておく必要があるでしょう。
また、最近のPCは高速ですので、安価なPCでサーバを構成することも可能でしょうが、
やはり信頼性とパフォーマンスの両面を考えるとXEONに代表されるサーバ用のCPUを搭載したサーバを選択されることをお勧めします。
2010年3月時点では、ベンチマークテスト結果からコストパフォーマンスを考慮するとX3450がお勧めのようです。
第3番目に考えておくべきことは、スケールアウトでしょう。
スケールアウトとは、サーバ数を増やすことで、サーバ群全体のパフォーマンスを向上させることであり、大規模なサイトでは必須事項です。
オープンソースには、リバースプロキシSquidやロードバランサPoundがありますので、このようなソースを活用すれば、スケールアウトも可能になります。
WEBサーバの構成例のご紹介
WEBサーバの構成例 (画像をクリックしてご覧下さい)
左図は、私が導入しているWEBサーバの構成例を示します。
サーバAは15,000rpmのSAS-HDDを4台、サーバBは7,200rpmのSATA-HDDを4台セットしており、
システムディスクはGMIRRORによりRAID1を組んでいます。
また、データベースが大規模でHDDへのより高速アクセスが必要なサイトはサーバBに集めています。
MySQLのレプリケーション機能を使用し、更新系のSQL文はサーバA(master)のみで実行します。
サーバB(slave)は常にmasterデータベース全体の完全なコピーになっており、参照系のSQL文のみしか実行しません。
ちなみに、このサイトは通常時にはサーバBにあります。
主なソフトウェアの名称とバージョンは以下の通りです。
- ハードウェア・・・DELL PowerEdge T110
- CPU・・・XEON X3450(2.66GHz, 8MBキャッシュ)
- メモリー・・・4GB(1333MHz/DDR3)
- OS・・・FreeBSD8.0
- WEBサーバソフトウェア・・・Apache2.2
- スクリプト言語・・・PHP5.2.13
- DNS・・・BIND9.*.*
- データベース・・・MySQL5.1.45
- ファイアウォール・・・IPFW
- UPS(無停電電源)・・・オムロン製BY50FWおよびBY50S(どちらも正弦波UPS)
- ルーター・・・NTT製PR-S300HI
現時点では、リバースプロキシやロードバランサは導入していませんが、
応答速度やCPU使用率などを考えると、当面はスケールアウトを考慮する必要はなさそうです。
接続プロバイダーは1社でも問題ないかと思いますが、500円/月という破格料金で固定IPによる高速接続が可能なプロバイダーを見つけたため、念のため2社に接続しています。
本サイトでは、UNIXに関する多少の知識があれば、どなたでも簡単に上記のようなシステムが構築できるよう、詳しく解説致します。
最終更新日:2010年5月28日