キャッシュサーバーで大規模サイト構築

以前、お客様のご要望で、複数台の負荷分散で毎秒数千リクエスト、数ギガbpsのトラフィックを延々とさばくようなシステムを作るための試行錯誤を重ねておりました。
そのときの試行錯誤や最終的に落ち着いた方法についてまとめておくことにします。

やりたいことはこうです。

・画像や動画ダウンロードが主体のファイル置き場のサーバーを運営して膨大な数のリクエストに対応したい。

考慮するポイントは以下の通り
・動画は1本10MB程度~20MB。コンテンツの更新時にはこれが10本程度は増える。初期は全体で1.5TB程度。
・トラフィックは数ギガbpsになるので、1Gbps回線が複数必要。必要な本数を用意する。コストはかかってもよい。
・リクエストは毎秒1000以上はあるので、負荷分散は必須。マシンを複数台用意する。コストはかかってもよい。

考えられる方法は以下の通り
・DNSラウンドロビン
・ロードバランサー(専用機器)
・ロードバランサー(ソフトウェア)
・リバースプロキシ&キャッシュ兼ロードバランサー
またはこれらの併用。

続きを読む

DNSラウンドロビンで負荷分散

複数のサーバーに同じコンテンツを置いて、DNSラウンドロビンで負荷分散する方法について書きます。

複数のサーバーに同じコンテンツを置くには、それぞれのサーバーにFTPでアップロードするか、なんらかの方法で同期させます。
lsyncd + rsyncd を使って自動同期させる方法もあります。別の投稿で書いていますので参考にしてください。

■ DNSラウンドロビン

DNSラウンドロビンとは、非常に単純な方法です。

設定としては、DNSサーバーあるいはレンタルDNSのゾーン設定において、1つのホスト名のゾーンタイプ A (IPアドレスの指定)を複数行設定し、1つのホスト名に複数のIPアドレスを割り付けます。

これだけです。

例)

domain.com.zone


...
...

www 	IN	A	111.111.111.111
www 	IN	A	111.111.111.222
www 	IN	A	111.111.111.333

A を複数設定しておくと、DNS正引きに対して設定されたIPアドレスのいずれかが返されます。

この例で、http://www.domain.com へのアクセスは、ときに 111.111.111.111、またときには 111.111.111.222 または 111.111.111.333 のサーバーへのアクセスになります。
完全にではありませんが、まあまあ、おおよそ均等にアクセスされると期待できますので負荷分散になります。

続きを読む

lsyncd+rsyncd でサーバー間の自動同期

lsyncd + rsyncd を使った異なるサーバー間のデータの自動同期の設定について書きます。

rsync コマンドを使った異なるサーバー間のデータ同期については別の投稿で書きましたが、今回は、片方のサーバーにアップロードしたら自動的に別のサーバーへ同期転送される環境を予め作っておく方法です。
送信側(マスター側)で lsyncd というデーモンを起動しておき、受信側(スレーブ側)で rsyncd というデーモンを起動しておきます。

複数のサーバーでコンテンツが自動同期される仕組みを構築できれば、今度はそれをDNSラウンドロビンなどに利用できます。
(DNSラウンドロビンは、また別の機会に)

■ rsyncd (受信側サーバーの設定)

(1) インストール (yum配布版rpm)

rsyncd は xinetd というデーモン経由で rsync を起動することです。
もし rsync コマンドがなければそれも入れます。

# yum  -y install rsync
# yum  -y install xinetd

(2) 設定

/etc/xinetd.d/rsync

service rsync
{
        disable = no ................... ここを no に変更
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}

続きを読む

rsync でサーバー間のデータ同期

rsync を使った異なるサーバー間のデータ同期、ファイル転送の方法について書きます。

コピーするだけなら、rcp や scp というコマンドがありますし、FTPという方法もあります。
しかし手数が少なく、ファイルのオーナー、パーミッションもそっくりそのままコピーし、さらに転送元になく転送先にあるファイルを削除して完全に同期させることができるのがこのコマンドの特徴です。

サーバー移転(お引越し)をするときには定番、必須。
これなくしてサーバーのお引越し作業はありえません。

■ rsyncインストール (yum配布版rpm)

# yum -y install rsync

■ rsyncの使い方

(1) コマンドシーケンス

# rsync [オプション] コピー元 [コピー元 ...] コピー先

簡単な例
# rsync -av /home/user1/* user1@host.com:~/.

続きを読む