序章

ミラーリングはダウンロードサイトを拡張する方法であるため、ダウンロードの負荷は世界の多くの地域の多くのサーバーに分散できます。 ミラーはファイルのコピーをホストし、ミラーディレクターによって管理されます。 ミラーディレクターは、あらゆるミラーシステムの中心です。 ユーザーがより迅速にダウンロードできるように、トラフィックを最も近い適切なミラーに転送する役割を果たします。

ミラーリングは、独自の長所と短所を持つ独自のシステムです。 DNSベースのシステムとは異なり、ミラーリングははるかに柔軟です。 DNSを待つ必要はなく、ミラーリングサーバーを信頼する必要もありません(ミラーディレクターはミラーをスキャンして、その有効性と完全性を確認できます)。 これが、多くのオープンソースプロジェクトがミラーを使用してISPとサーバー所有者の寛大さを利用し、ダウンロードのためにオープンソースプロジェクト自体のサーバーの負荷を軽減する理由の1つです。

残念ながら、リクエストは実際のファイルにリダイレクトされる前にミラーディレクターに移動する必要があるため、ミラーリングシステムはHTTPリクエストのオーバーヘッドを増加させます。 したがって、ミラーリングはダウンロード(単一の大きなファイル)のホスティングに一般的に使用されますが、Webサイト(多くの小さなファイル)にはお勧めしません。

このチュートリアルでは、1台のサーバーでMirrorBrainインスタンス(人気のある機能豊富なミラーディレクター)とrsyncサーバー(rsyncによりミラーがファイルをディレクターと同期できるようにする)をセットアップする方法を示します。 次に、別のサーバーに1つのミラーを設定します。

必須:

  • 異なる地域にある2つのUbuntu14.04ドロップレット。 1人の監督と少なくとも1人の鏡。

ステップ1—Apacheのセットアップ

まず、MirrorBrainをコンパイルしてインストールする必要があります。 このチュートリアルの最初の部分はすべて、ミラーディレクターサーバーで実行する必要があります。 いつミラーに切り替えるかをお知らせします。

ルートとしてこれらの手順を実行します。 必要に応じて、sudoを使用してルートシェルにアクセスします。

sudo -i

MirrorBrainは大きなApacheモジュールであるため、ファイルを提供するにはApacheを使用する必要があります。 まず、Apacheと必要なモジュールをインストールします。

apt-get install apache2 libapache2-mod-geoip libgeoip-dev apache2-dev

GeoIPは位置情報サービスへのIPアドレスであり、ユーザーを最適なダウンロード場所にリダイレクトするMirrorBrainの機能を強化します。 MirrorBrainで動作するように、GeoIPの構成ファイルを変更する必要があります。 最初に構成ファイルを開きます。

nano /etc/apache2/mods-available/geoip.conf

次のように変更します。 GeoIPOutput Env 行を追加し、 GeoIPDBFile 行のコメントを解除して、MMapCache設定を追加します。

<IfModule mod_geoip.c>
        GeoIPEnable On
        GeoIPOutput Env
        GeoIPDBFile /usr/share/GeoIP/GeoIP.dat MMapCache
</IfModule>

ファイルを閉じて保存します( Ctrl-x y Enter )。

GeoIPデータベースをMirrorBrainが検出する予定の場所にリンクします。

ln -s /usr/share/GeoIP /var/lib/GeoIP

次に、インストールして構成したモジュールを有効にします。

a2enmod dbd
a2enmod geoip

geoipモジュールはすでに有効になっている可能性があります。 それはいいです。

ステップ2—MirrorBrainのインストールとコンパイル

次に、MirrorBrainモジュールをコンパイルする必要があります。 最初にいくつかの依存関係をインストールします。

apt-get install python-pip python-dev libdbd-pg-perl python-SQLObject python-FormEncode python-psycopg2 libaprutil1-dbd-pgsql

pip install cmdln

Perlを使用して、さらにいくつかの依存関係をインストールします。

perl -MCPAN -e 'install Bundle::LWP'

ここで尋ねられる質問に注意してください。 Enter を押すか、yと言ってデフォルトを受け入れることができるはずです。

次の行で終わる、かなりの出力が表示されるはずです。

  /usr/bin/make install  -- OK

警告またはエラーが発生した場合は、 perl -MCPAN -e’install Bundle :: LWP’ コマンドを再度実行して、構成を再実行することをお勧めします。

最後の依存関係をインストールします。

perl -MCPAN -e 'install Config::IniFiles'

これで、MirrorBrainソースをダウンロードして抽出できます。

wget http://mirrorbrain.org/files/releases/mirrorbrain-2.18.1.tar.gz
tar -xzvf mirrorbrain-2.18.1.tar.gz 

次に、フォームモジュールソースをMirrorBrainに追加する必要があります。

cd mirrorbrain-2.18.1/mod_mirrorbrain/
wget http://apache.webthing.com/svn/apache/forms/mod_form.h
wget http://apache.webthing.com/svn/apache/forms/mod_form.c

これで、MirrorBrainモジュールとformsモジュールをコンパイルして有効にできます。

apxs -cia -lm mod_form.c
apxs -cia -lm mod_mirrorbrain.c

そして、MirrorBrain自動インデックスモジュール:

cd ~/mirrorbrain-2.18.1/mod_autoindex_mb
apxs -cia mod_autoindex_mb.c

MirrorBrainGeoIPヘルパーをコンパイルしてみましょう。

cd ~/mirrorbrain-2.18.1/tools

gcc -Wall -o geoiplookup_city geoiplookup_city.c -lGeoIP
gcc -Wall -o geoiplookup_continent geoiplookup_continent.c -lGeoIP

ヘルパーをコマンドディレクトリにコピーします。

cp geoiplookup_city /usr/bin/geoiplookup_city
cp geoiplookup_continent /usr/bin/geoiplookup_continent

他の内部ツールをインストールします。

install -m 755 ~/mirrorbrain-2.18.1/tools/geoip-lite-update /usr/bin/geoip-lite-update
install -m 755 ~/mirrorbrain-2.18.1/tools/null-rsync /usr/bin/null-rsync
install -m 755 ~/mirrorbrain-2.18.1/tools/scanner.pl /usr/bin/scanner
install -m 755 ~/mirrorbrain-2.18.1/mirrorprobe/mirrorprobe.py /usr/bin/mirrorprobe

次に、mirrorprobeのログファイルを追加します(mirrorprobeはミラーがオンラインであることを確認します)。

mkdir /var/log/mirrorbrain
touch /var/log/mirrorbrain/mirrorprobe.log

これで、MirrorBrainコマンドライン管理ツールをインストールできます。

cd ~/mirrorbrain-2.18.1/mb
python setup.py install

ステップ3—PostgreSQLのインストール

MirrorBrainはPostgreSQLを使用しています。PostgreSQLはUbuntuで簡単にセットアップできます。 まず、PostgreSQLをインストールしましょう。

apt-get install postgresql postgresql-contrib

それでは、PostgreSQL管理シェルに入りましょう。

sudo -i -u postgres

MirrorBrainデータベースユーザーを作成しましょう。 このユーザーのパスワードを作成し、後で必要になるため、メモしておきます。

createuser -P mirrorbrain

次に、MirrorBrainのデータベースを設定します。

createdb -O mirrorbrain mirrorbrain
createlang plpgsql mirrorbrain

言語がすでにインストールされているという通知を受け取った場合、それは問題ありません。

createlang: language "plpgsql" is already installed in database "mirrorbrain"

ローカルマシンからのデータベースのパスワード認証を許可する必要があります(これはMirrorBrainで必要です)。 最初に構成ファイルを開きます。

nano /etc/postgresql/9.3/main/pg_hba.conf

次に、行90を見つけます(これは、次のように見える2番目の行である必要があります)。

 # "local" is for Unix domain socket connections only
 local   all             all                                     peer

md5ベースのパスワード認証を使用するように更新します。

local   all             all                                     md5

変更を保存してPostgreSQLを再起動します。

service postgresql restart

それでは、PostgreSQLシェルを終了しましょう( Ctrl-D )。

次に、MirrorBrainのデータベーススキーマをインポートして、データベースのセットアップを完了します。

cd ~/mirrorbrain-2.18.1
psql -U mirrorbrain -f sql/schema-postgresql.sql mirrorbrain

プロンプトが表示されたら、mirrorbrainデータベースユーザー用に以前に設定したパスワードを入力します。

出力は次のようになります。

BEGIN
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE VIEW
CREATE TABLE
CREATE INDEX
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
COMMIT

初期データを追加します。

psql -U mirrorbrain -f sql/initialdata-postgresql.sql mirrorbrain

期待される出力:

INSERT 0 1
INSERT 0 6
INSERT 0 246

これでMirrorBrainがインストールされ、データベースがセットアップされました。

ステップ4—ミラーの公開

次に、いくつかのファイルをミラーに追加します。 ドメインにちなんでダウンロードディレクトリに名前を付けることをお勧めします。 これらのファイルを提供するディレクトリを作成しましょう(ルートとして):

mkdir /var/www/download.example.org

そのディレクトリを入力してください:

cd /var/www/download.example.org

次に、いくつかのファイルを追加する必要があります。 サーバー上にすでにファイルがある場合は、cpまたはmvを次のフォルダーに入れます。

cp /var/www/example.org/downloads/* /var/www/download.example.org

それらが別のサーバー上にある場合は、 scp を使用できます(ミラーディレクターサーバーは他のサーバーへのSSHアクセスが必要です)。

scp root@other.server.example.org:/var/www/example.org/downloads/* download.example.org

他のファイルと同じように、新しいファイルをアップロードすることもできます。 たとえば、SSHFSまたはSFTPを使用します。

テスト用に、次の3つのサンプルファイルを追加できます。

cd /var/www/download.example.org
touch apples.txt bananas.txt carrots.txt

次に、rsyncを設定する必要があります。 rsyncは、サーバー間でファイルを同期できるUNIXツールです。 これを使用して、ミラーをミラーディレクターと同期させます。 Rsyncは、SSHまたはパブリックrsync://URLを介して動作できます。 rsyncデーモン( rsync:// URL)オプションを設定します。 まず、構成ファイルを作成する必要があります。

nano /etc/rsyncd.conf

この構成を追加しましょう。 パスはダウンロードディレクトリへのパスである必要があり、コメントは任意の名前にすることができます。

[main]
    path = /var/www/download.example.org
    comment = My Mirror Director with Very Fast Download Speed!
    read only = true
    list = yes

ファイルを保存します。 rsyncデーモンを起動します。

 rsync --daemon --config=/etc/rsyncd.conf

これで、*NIXシステムで以下を実行してこれをテストできます。 サーバーまたはサーバーのIPアドレスに解決されるドメインを使用できます。

rsync rsync://server.example.org/main

ファイルのリストが表示されます。

ステップ5—MirrorBrainを有効にする

ファイルの準備ができたので、MirrorBrainを有効にできます。 まず、MirrorBrainユーザーとグループが必要です。

groupadd -r mirrorbrain
useradd -r -g mirrorbrain -s /bin/bash -c "MirrorBrain user" -d /home/mirrorbrain mirrorbrain

次に、MirrorBrain管理ツールがデータベースに接続できるようにするMirrorBrain構成ファイルを作成しましょう。

nano /etc/mirrorbrain.conf

次に、この構成を追加します。 これらの設定のほとんどは、データベース接続をセットアップするためのものです。 dbpass 設定には、mirrorbrainデータベースユーザーのパスワードを必ず追加してください。

[general]
instances = main

[main]
dbuser = mirrorbrain
dbpass = password
dbdriver = postgresql
dbhost = 127.0.0.1
dbname = mirrorbrain

[mirrorprobe]

ファイルを保存します。 次に、MirrorBrain用にApacheVirtualHostファイルを設定しましょう。

nano /etc/apache2/sites-available/download.example.org.conf

次に、このVirtualHost構成を追加します。 download.example.org が使用されているすべての場所を変更して、サーバーに解決される独自のドメインまたはIPアドレスを設定する必要があります。 また、ServerAdmin設定用に独自のメールアドレスを設定する必要があります。 DBDParams行でmirrorbrainデータベースユーザーのパスワードを使用していることを確認してください。

<VirtualHost *:80>
    ServerName download.example.org
    ServerAdmin [email protected]
    DocumentRoot /var/www/download.example.org

    ErrorLog     /var/log/apache2/download.example.org/error.log
    CustomLog    /var/log/apache2/download.example.org/access.log combined

    DBDriver pgsql
    DBDParams "host=localhost user=mirrorbrain password=database password dbname=mirrorbrain connect_timeout=15"       

    <Directory /var/www/download.example.org>
        MirrorBrainEngine On
        MirrorBrainDebug Off
        FormGET On

        MirrorBrainHandleHEADRequestLocally Off
        MirrorBrainMinSize 2048
        MirrorBrainExcludeMimeType application/pgp-keys  

        Options FollowSymLinks Indexes
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Directoryタグで使用できるMirrorBrainオプションのいくつかを確認する価値があります。

名前 使用法
MirrorBrainMinSize ダウンロードするミラーにリダイレクトされる最小サイズのファイル(バイト単位)を設定します。 これにより、MirrorBrainは、データベースルックアップやGeoIPなどの実行に時間がかかる非常に小さなファイルをダウンロードするようにユーザーをリダイレクトすることを防ぎます。 単にファイルを提供するよりも長いです。
MirrorBrainExcludeMimeType どのmimeタイプをミラーから提供しないかを設定します。 キーファイルなどでこれを有効にすることを検討してください。 100%正確に配信する必要がある小さなファイル。 構成ファイルでこのオプションを複数回使用して、複数のmimeタイプに対して有効にします。
MirrorBrainExcludeUserAgent このオプションは、特定のユーザーエージェントのリダイレクトを停止します。 一部のクライアント(例 curl)リダイレクトを操作するには特別な構成が必要であり、それらのユーザーにファイルを直接提供する方が簡単な場合があります。 ワイルドカードを使用できます(例: *Chrome/*は、すべてのChromeユーザーのリダイレクトを無効にします)。

構成オプションの完全なリストは、MirrorBrainWebサイトにあります

基本的なApacheVirtualHost設定の詳細については、このチュートリアルを確認してください。

ファイルを保存して終了します。

ログディレクトリが存在することを確認してください。

mkdir  /var/log/apache2/download.example.org/

有効なサイトディレクトリにある構成ファイルへのリンクを作成します。

ln -s /etc/apache2/sites-available/download.example.org.conf /etc/apache2/sites-enabled/download.example.org.conf

次に、Apacheを再起動します。

service apache2 restart

おめでとうございます。MirrorBrainが稼働しています。

MirrorBrainが機能していることをテストするには、まずWebブラウザでダウンロードサイトにアクセスして、ファイルインデックスを表示します。 次に、ファイルの1つをクリックして表示します。 URLの最後に「.mirrorlist」を追加します。 (URLの例: http://download.example.org/apples.txt.mirrorlist )すべてが機能している場合は、次のようなページが表示されます。

MirrorBrain Mirror List Example

cronジョブの構成

ミラーの追加を開始する前に、ミラースキャンとメンテナンスのcronジョブを設定する必要があります。 まず、MirrorBrainを設定して、(mirrorprobeコマンドを使用して)オンラインになっているミラーを毎分確認します。

echo "* * * * * mirrorbrain mirrorprobe" | crontab

そして、ミラーのコンテンツを(ファイルの可用性と正確性について)1時間ごとにスキャンするcronジョブ:

echo "0 * * * * mirrorbrain mb scan --quiet --jobs 4 --all" | crontab

コンテンツをすばやく変更する場合は、スキャンを頻繁に追加することをお勧めします。たとえば、0,30 * * * *を30分ごとに追加します。 非常に強力なサーバーを使用している場合は、--jobsの数を増やして、同時により多くのミラーをスキャンすることができます。

月曜日の朝の1:30にデータベースをクリーンアップします。

echo "30 1 * * mon mirrorbrain mb db vacuum" | crontab

そして、月曜日の朝の2時30分頃にGeoIPデータを更新します(スリープステートメントは、GeoIPサーバーでの不要な負荷の急増を減らすためのものです)。

echo "31 2 * * mon root sleep $(($RANDOM/1024)); /usr/bin/geoip-lite-update" | crontab

ステップ6—別のサーバーでのコンテンツのミラーリング

ミラーディレクターが設定されたので、最初のミラーを作成しましょう。 追加するすべてのミラーについて、このセクションに従うことができます。

このセクションでは、できれば別のリージョンで、別のUbuntu14.04サーバーを使用します。

(rootとして、または sudo -i を使用して)ログインしたら、ミラーコンテンツディレクトリを作成します。

mkdir -p /var/www/download.example.org

次に、前に設定したrsync URLを使用して、コンテンツをそのディレクトリにコピーします。

rsync -avzh rsync://download.example.org/main /var/www/download.example.org

rsyncの使用中にスペースの問題(IOエラー)が発生した場合は、それを回避する方法があります。 –exclude オプションを追加して、訪問者にとってそれほど重要ではないディレクトリを除外できます。 MirrorBrainはサーバーをスキャンし、除外されたファイルにユーザーを送信せず、代わりにファイルを保持している最も近いサーバーにユーザーを送信します。 たとえば、古い映画や古い曲を除外できます。

rsync -avzh rsync://download.example.org/main /var/www/download.example.org --exclude "movies/old" --exclude "songs/old"

次に、cronを使用して1時間ごとにメインサーバーと自動的に同期するようにミラーサーバーを設定できます(--excludeオプションを使用した場合は、それを含めることを忘れないでください)。

echo '0 * * * * root rsync -avzh rsync://download.example.org/main /var/www/download.example.org' | crontab

次に、HTTP(ユーザーの場合)およびrsync(MirrorBrainスキャンの場合)を介してミラーを公開する必要があります。

Apache

サーバーにすでにHTTPサーバーがある場合は、/var/www/download.example.orgディレクトリにサービスを提供するためにVirtualHost(または同等のもの)を追加する必要があります。 それ以外の場合は、Apacheをインストールしましょう。

apt-get install apache2

次に、VirtualHostファイルを追加しましょう。

nano /etc/apache2/sites-available/london1.download.example.org.conf

以下の内容を追加してください。 ServerName ServerAdmin 、およびDocumentRootディレクティブに独自の値を設定してください。

<VirtualHost *:80>
    ServerName london1.download.example.org
    ServerAdmin [email protected]
    DocumentRoot /var/www/download.example.org
</VirtualHost>

ファイルを保存します。 新しいVirtualHostを有効にします。

ln -s /etc/apache2/sites-available/london1.download.example.org.conf /etc/apache2/sites-enabled/london1.download.example.org.conf

次に、Apacheを再起動します。

service apache2 restart

rsync

次に、rsyncデーモンをセットアップする必要があります(MirrorBrainスキャン用)。 最初に構成ファイルを開きます。

nano /etc/rsyncd.conf

次に、構成を追加し、パスがダウンロードディレクトリと一致することを確認します。 コメントは、次のように設定できます。

[main]
    path = /var/www/download.example.org
    comment = My Mirror Of Some Cool Files
    read only = true
    list = yes

このファイルを保存します。

rsyncデーモンを起動します。

rsync --daemon --config=/etc/rsyncd.conf

Directorでミラーを有効にする

ここで、 MirrorBrainサーバーに戻り、ミラーを追加する必要があります。 mb コマンドを(ルートとして)使用できます。 このコマンドにはかなりの数の変数があり、以下で説明します。

mb new london1.download.example.org
       -H http://london1.download.example.org
       -R rsync://london1.download.example.org/main
       --operator-name=Example --operator-url=example.org
       -a "Pat Admin" -e [email protected] 
  • london1.download.example.orgをこのミラーのニックネームに置き換えます。 解決する必要はありません
  • -Hはサーバーに解決されるはずです。 ドメインまたはIPアドレスを使用できます
  • -Rはサーバーに解決されるはずです。 ドメインまたはIPアドレスを使用できます
  • --operator-name--operator-url-a、および-eの設定は、公開する管理者の連絡先情報を優先する必要があります。

次に、ミラーをスキャンして有効にします。 newコマンドで使用したのと同じニックネームを使用する必要があります。

mb scan --enable london1.download.example.org

注:@INCでLWP/UserAgent.pmが見つかりませんなどのエラーが発生した場合は、ステップ2 セクションに戻り、perl -MCPAN -e 'install Bundle::LWP'を実行する必要があります。また。

スキャンが成功した(MirrorBrainがサーバーに接続できる)と仮定すると、ミラーがデータベースに追加されます。

テスト

次に、directorサーバーのMirrorBrainインスタンスに移動してみます(たとえば、 download.example.org london1.download.example.org ではありません)。 もう一度、ファイルをクリックして、URLの最後に「.mirrorlist」を追加します。 これで、使用可能なミラーセクションの下に新しいミラーが一覧表示されます。

世界の他の場所にある独自のサーバーでミラーを追加することも、 mb new を使用して、他の誰かが実行しているミラーを追加することもできます。

ミラーの無効化と再有効化

ミラーを無効にしたい場合は、実行するのと同じくらい簡単です。

mb disable london1.download.example.org

上記のmb scan --enable london1.download.example.orgコマンドを使用して、ミラーを再度有効にします。