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/ jessie main contrib non-free
deb http://ftp.jp.debian.org/debian/ jessie-updates main contrib
deb http://ftp.jp.debian.org/debian/ jessie-backports main contrib non-free
#deb-src http://ftp.jp.debian.org/debian/ jessie main contrib non-free
#deb-src http://ftp.jp.debian.org/debian/ jessie-updates main contrib
#deb-src http://ftp.jp.debian.org/debian/ jessie-backports main contrib non-free

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

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

前提条件

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

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

ミラーの設定

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

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

push ミラー化する

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

pushミラーの仕組み

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

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

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

push ミラー元の設定

ちなみにシグナルを送る側は、etc/runmirrors.conf.sample を etc/runmirrors.conf としてコピーし、これを編集します。

同様に、etc/runmirrors.mirror.sample を etc/runmirrors.mirror としてコピーし、ミラーシグナルを送るホストの情報を末尾に指定します。一般的な書式は次のとおりです。

all ホスト名またはニックネーム ホスト名 相手ユーザ名

たとえば ftp.example.jp の ftpadm ユーザにシグナルを送る (ログイン試行する) には、次のようになります。

all ftp.example.jp ftp.example.jp ftpadm

etc/ftpsync.conf の HUB 行のコメントを取り、「HUB=true」とします。これで、ミラー完了後にシグナルを送るようになりました。手動でシグナル送出を試すには、~/bin/runmirrors を実行します。

CDN に加盟する

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

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

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

その他

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

参考文献