[% title = "CDN 対応ミラーの設定" %]
CDN 対応ミラーの設定
Debian JP Project では、1 つのサーバがダウンしただけで APT によるパッケージのダウンロードができなくなるといった障害に対処するため、複数の Debian ミラーサーバを仮想的に集約して耐障害性を持たせる CDN (Contents Delivery Network) 化を進めています。CDN ミラーには、次の APT リポジトリでアクセスできます (詳細)。
deb http://ftp.jp.debian.org/debian/ [% stable_codename %] main contrib non-free non-free-firmware
deb http://ftp.jp.debian.org/debian/ [% stable_codename %]-updates main contrib non-free non-free-firmware
deb http://ftp.jp.debian.org/debian/ [% stable_codename %]-backports main contrib non-free non-free-firmware
#deb-src http://ftp.jp.debian.org/debian/ [% stable_codename %] main contrib non-free non-free-firmware
#deb-src http://ftp.jp.debian.org/debian/ [% stable_codename %]-updates main contrib non-free non-free-firmware
#deb-src http://ftp.jp.debian.org/debian/ [% stable_codename %]-backports main contrib non-free non-free-firmware
(※[% stable_codename %] 以外にも、Debian 公式ミラーで提供されている stable、testing、unstable、[% oldstable_codename %]、[% testing_codename %]、sid、experimental といった名前も利用できます)
ミラー参加を検討しているサイトのために、本ドキュメントでは、Debian ミラーの構築方法と、CDN への追加方法を説明します。
前提条件
安定したミラーを構築するにあたっては、いくつかの条件があります。これらが満たされていないと、ユーザに十分なサービスを提供することができません。CDN への加盟にあたっては、次の条件があります。
- Debian のフルミラーであること。 つまり、ftp.debian.org で公開されているものと同様に、すべてのアーキテクチャ、膨大なすべてのファイルを格納する必要があります。
- push ミラーであること。詳細は後述しますが、上流ミラーが更新を完了したタイミングでシグナルを送り、それを受けてミラーを行うようにします。こうすることで、上流がまだ更新中なのにミラーを行って APT の整合性を壊した状態にしてしまったり、上流のハードウェアクラッシュを受けて一緒にミラーを失ってしまったりといった事態を回避しやすくなります。
- Debian のミラーは HTTP サービス(Web サーバ) を提供しており、Web ブラウザから見て /debian ディレクトリの下にあること。エイリアスや rewrite モジュールなどを使ってもかまいません。ただし、HTTP リダイレクトヘッダは APT ツールが対応していないので利用できません。
- Debian のミラーは rsync サービスを提供しており、rsync クライアントから見て ::debian として見えること。
また、ミラーにあたっては、次の条件を満たしていることが要求されます。
- 大容量ディスク: ミラーをするために何よりも必要なのは、大きなディスクです。現時点 (2018年5月) でフルミラーには 2,787GB 程度を消費しており、将来見込まれる増加を前提とすると最低でも 4TB 以上のクラスのディスク容量が必要になります。ミラーするアーテキクチャを絞ればディスクの消費は抑えられますが、本ドキュメントでは CDN の一員とするための条件であるフルミラーを行うものとします。RAID は必須ではありませんが、ディスク障害によってミラーが消失すると、復旧に時間がかかることになります。
- 安定した広帯域ネットワークと堅固なハードウェア: ミラーとなったサーバには、(CDN では分散されるとはいえ) 多数のディスクアクセスおよびネットワークアクセスが発生することになります。特に rsync で上流ミラーに追従する最中は、短時間のうちに多量のアクセスが起こり、高負荷になります。たとえば安価な NAS のようなものではこの負荷に対処しきれず、頻繁なクラッシュが起きる可能性もあります。管理チームでは、x86 アーキテクチャのように十分に枯れたものを推奨しています。
- Unix OS: 基本的には、rsync と Web サーバが動作すれば OS は特に問いません (実際、Debian GNU/Linux を使っていない Debian ミラーもいくつかあります)。でも、Debian ならきっと簡単ですよ :)
- 十分な実メモリ: rsync および Web サーバ (通常は Apache) は、実メモリを多量に消費します。管理チームの経験では、最低でも 512MB、できれば 1GB 以上のメモリを塔載しているのが望ましいと思われます。
- 外部からの SSH アクセス: このドキュメントの手順で推奨する push ミラーを実現するためには、外部からの SSH アクセスを許可するよう設定しなければなりません。基本的には上流ミラーからミラーを開始するよう送られる「シグナル」を何らかの形で受け取れさえすればよいので、上流ミラーだけにアクセスを許可して、またシェルログインを与える必要もありません。SSH 以外のシグナル (たとえば指定の Web ページにアクセスしたり自動処理メールを送ったりするなど) を使うことも理論上はできますが、現時点では要求する声もないので本ドキュメントでは扱いません。
- 信頼できる連絡・管理責任者: ミラーのほぼすべての作業は自動で行われますが、まれに障害・事故で手動の作業が要求されることがあります。気付かないうちにディスクがいっぱいになっているということもあるでしょう。そのようなとき、理事会または管理チームから連絡が必要になりますが、誰に聞いたらよいのかわからないというのは困ります。また、Debian ミラーの整合性は APT の機構によってひとまず守られているとは言えますが、ファイルを汚染されたりすることのないよう、ミラーサーバ上のユーザ管理は厳密にお願いいたします。
ミラーの設定
Debian ミラーを構成するには、まず ftpsync スクリプトで rsync によるミラーを行います。
- サーバの適当なディレクトリに git リポジトリ https://ftp-master.debian.org/git/archvsync.git のクローンまたはスナップショットを展開します。たとえば /home/ftpadm/archvsync とします。ミラーを行うユーザは専用の (あまり権限のない) ものを作ったほうがよいでしょう。
- ~/bin と ~/etc のシンボリックリンクを作成します。そして、PATH に ~/bin を追加します。
$ cd
$ ln -s ~/archvsync/bin bin
$ ln -s ~/archvsync/etc etc
- 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: 除外するアーキテクチャ。フルミラーのためには空のままにしておきます
- rsync、debianutils をインストールしておきます。debianutils はミラーの動作には影響しませんが、ログファイルのローテーションのために savelog コマンドを使っています。
- Debian の CD や DVD があるなら、ミラーディレクトリにコピーしておくと、ダウンロード時間を一部軽減できます。
- ftpsync を実行します (~/bin/ftpsync)。LOGDIR で指定したディレクトリにログが書き込まれるので、tail -f /home/andy/logs/rsync-ftpsync.log のようにしてうまくダウンロードできているか監視するのがよいでしょう。
- ftpsync での rsync ミラーは 2 回行われます。最初にパッケージプールの pool/ ディレクトリへの追加ミラーが行われ、そのあとにパッケージ情報ファイルを格納する dists/ ディレクトリの更新と、上流で削除されたファイルの削除が行われます。こうすることで、パッケージ情報にはあるのにプールにファイルがないという事態を避けられます。
- 上流からミラーがうまくできたことを確認したら一段落です。Web サーバ経由で http://サーバ名/debian/ でミラーを参照できる (つまり、http://サーバ名/debian/dists/stable のように参照できる) ようにしておきましょう。
push ミラー化する
前述の方法で上流からミラーを引っ張ってくる (pull) ことはできるようになりましたが、いつ上流の更新のミラーを行うかという問題があります。だいたいのアタリを付けて cron で定期的に実行するという方法もありますが、上流で何か不具合があったときにはその影響を被ってしまいます。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 としてコピーし、これを編集します。
- KEYFILE: 相手に SSH ログインするときに使う秘密鍵ファイル。複数のミラーを行う場合は異なる鍵ファイルを指定する必要がある
- LOGDIR: ftpsync.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 サーバを使ったラウンドロビンの一種ですが、重み付けを設定し、加盟サイトの生存確認も行うことで、耐障害性が高く負荷も分散されたダウンロードサービスを提供します (下図を参照)。
push ミラー構築後、理事会に連絡してください。重み付けの設定のため、あなたの提供できる帯域についての情報も付加していただけると助かります。連絡を受けた管理チームは、あなたのミラーを CDN のネットワークに追加します。「host cdn.debian.net」で DNS 問い合わせを実行し、あなたのサーバが加わっていることを確認してください。
その他
ロボットによる絨毯爆撃的なアクセスなどへの対処は、ミラー担当者のローカルアクセスポリシーに基いて随時設定を行ってかまいません。広範囲な拒否設定を行う場合には、理事会および管理チームに一報していただければ幸いです。
参考文献