Debian JP Project

(for vocal browsers: toc, main)

Google
WWW 全体 www.debian.or.jp 検索

CDN 対応ミラーの設定

Debian JP Project では、1 つのサーバがダウンしただけで APT によるパッケージのダウンロードができなくなるといった障害に対処するため、複数の Debian ミラーサーバを仮想的に集約して耐障害性を持たせる CDN (Contents Delivery Network) 化を進めています。CDN ミラーには、次の APT リポジトリでアクセスできます (詳細)。

deb http://ftp.jp.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ lenny main contrib non-free

(※lenny 以外にも、Debian 公式ミラーで提供されている stable、testing、unstable、etch、squeeze、sid、experimental といった名前も利用できます)

ミラー参加を検討しているサイトのために、本ドキュメントでは、Debian ミラーの構築方法と、CDN への追加方法を説明します。

前提条件

安定したミラーを構築するにあたっては、いくつかの条件があります。これらが満たされていないと、ユーザに十分なサービスを提供することができません。CDN への加盟にあたっては、次の条件があります。

また、ミラーにあたっては、次の条件を満たしていることが要求されます。

ミラーの設定

Debian ミラーを構成するには、まず anonftpsync スクリプトで rsync によるミラーを行います。

  1. サーバの適当なディレクトリに anonftpsync をダウンロードして配置します。たとえば /home/ftpadm/bin/anonftpsync とします。ミラーを行うユーザは専用の (あまり権限のない) ものを作ったほうがよいでしょう。
  2. このファイルを編集します。
    • TO: Debian ミラーを配置するディレクトリ。たとえば /var/www/debian。ミラーを実行するユーザが書き込める必要があります
    • RSYNC_HOST: Debian 上流ミラー。たとえば ftp1.debian.or.jp。push ミラーサービスを開始するにあたってどの上流を選ぶべきかは理事会または管理チームに問い合わせてください。最初の時点では手近なミラーでかまいません。
    • RSYNC_DIR: 上流ミラーで公開されている Debian ミラーの名前。通常は debian/
    • LOGDIR: ミラーログを置くディレクトリ。たとえば /home/andy/logs。ミラーを実行するユーザが書き込める必要があります
    • ARCH_EXCLUDE: 除外するアーキテクチャ。フルミラーのためには空のままにしておきます
    • EXCLUDE: 除外するファイル。フルミラーのためには空のままにしておきます
    • MAILTO: ログを送付するアドレス。長大ですし、通常は空でよいでしょう
  3. rsync、 procmail、debianutils をインストールしておきます。procmail はミラーの動作自体には必須ではないのですが、ミラー中であることを示すロックファイルを作成するのに lockfile コマンドをスクリプト内で使っています。procmail を入れられない場合には、スクリプト内で lockfile を呼び出している箇所を別のコマンドで置き換える必要があります。debianutils もミラーの動作には影響しませんが、ログファイルのローテーションのために savelog コマンドをやはりスクリプトの最後で実行しています。
  4. Debian の CD や DVD があるなら、ミラーディレクトリにコピーしておくと、ダウンロード時間を一部軽減できます。
  5. anonftpsync を実行します。LOGDIR で指定したディレクトリにログが書き込まれるので、tail -f /home/andy/logs/debian-mirror.log のようにしてうまくダウンロードできているか監視するのがよいでしょう。
  6. anonftpsync での rsync ミラーは 2 回行われます。最初にパッケージプールの pool/ ディレクトリへの追加ミラーが行われ、そのあとにパッケージ情報ファイルを格納する dists/ ディレクトリの更新と、上流で削除されたファイルの削除が行われます。こうすることで、パッケージ情報にはあるのにプールにファイルがないという事態を避けられます。
  7. 上流からミラーがうまくできたことを確認したら一段落です。Web サーバ経由で http://サーバ名/debian/ でミラーを参照できる (つまり、http://サーバ名/debian/dists/stable のように参照できる) ようにしておきましょう。

push ミラー化する

前述の方法で上流からミラーを引っ張ってくる (pull) ことはできるようになりましたが、いつ上流の更新のミラーを行うかという問題があります。だいたいのアタリを付けて cron で定期的に実行するという方法もありますが、上流で何か不具合があったときにはその影響を被ってしまいます。push ミラーは、上流が自身のミラーの完了後に下流に向けてシグナルを送り (push)、これを受けて初めて下流がミラーを開始するというものです (下図を参照)。

pushミラーの仕組み

シグナルには、SSH アクセスが一般的に用いられています。上流のミラーユーザの SSH 公開鍵 (理事会または管理チームに尋ねてください) をサイト上のミラーユーザの認証済み鍵リング (~/.ssh/authorized_keys) に加え、この鍵でのアクセスを受けたときに anonftpsync を起動する、というように設定します。

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/home/ftpadm/bin/anonftpsync &" ssh-rsa AB12....2vIg== ftpadm@hp.debian.or.jp

上流からシグナルの送信テストを行い、ミラースクリプトが起動することを確認します。あとは、マスターサーバでの更新が発生するごとに順にシグナルとミラーの波及が行われるようになります。

ちなみにシグナルを送る側は、次のように記述した signal.sh を用意し、

#!/bin/sh
echo Signalling $1
ssh -4 -2 -o"BatchMode yes" -o"user $2" "$1" -i $HOME/.ssh/id_dsa_push-mirror sleep 1 < /dev/null > /dev/null 2>&1
(ここでは秘密鍵には~/.ssh/id_dsa_push-mirrorを使っている)

これを anonftpsync の最後で呼び出すだけです。

savelog $LOGFILE

/home/ftpadm/bin/signal.sh ftp.example.jp ftpadmin
(下流ミラーのftp.example.jpのユーザftpadminにシグナルを送る)

CDN に加盟する

ここまでできたら、あとは CDN に加盟するだけです。CDN は、DNS サーバを使ったラウンドロビンの一種ですが、重み付けを設定し、加盟サイトの生存確認も行うことで、耐障害性が高く負荷も分散されたダウンロードサービスを提供します (下図を参照)。

通常のDNSラウンドロビンとCDNによるラウンドロビンの違い

push ミラー構築後、理事会に連絡してください。重み付けの設定のため、あなたの提供できる帯域についての情報も付加していただけると助かります。連絡を受けた管理チームは、あなたのミラーを CDN のネットワークに追加します。「host cdn.debian.or.jp」で DNS 問い合わせを実行し、あなたのサーバが加わっていることを確認してください。

その他

ロボットによる絨毯爆撃的なアクセスなどへの対処は、ミラー担当者のローカルアクセスポリシーに基いて随時設定を行ってかまいません。広範囲な拒否設定を行う場合には、理事会および管理チームに一報していただければ幸いです。

参考文献