如何在Ubuntu14.04上使用MirrorBrain设置镜像控制器

来自菜鸟教程
跳转至:导航、​搜索

介绍

镜像是一种扩展下载站点的方式,因此下载负载可以分布在世界许多地方的许多服务器上。 镜像文件的主机副本并由镜像控制器管理。 镜像导向器是任何镜像系统的中心。 它负责将流量引导到最近的适当镜像,以便用户可以更快地下载。

镜像是一个独特的系统,它有自己的优点和缺点。 与基于 DNS 的系统不同,镜像更加灵活。 无需等待DNS,甚至无需信任镜像服务器(镜像导向器可以扫描镜像以检查其有效性和完整性)。 这是许多开源项目使用镜像来利用 ISP 和服务器所有者的慷慨来减轻开源项目自己的服务器下载负载的原因之一。

不幸的是,镜像系统会增加任何 HTTP 请求的开销,因为请求必须先到达镜像导向器,然后才能重定向到真实文件。 因此,镜像通常用于托管下载(单个大文件),但不建议用于网站(许多小文件)。

本教程将展示如何在一个服务器上设置一个 MirrorBrain 实例(一个流行的、功能丰富的镜像导向器)和一个 rsync 服务器(rsync 让镜像与导向器同步文件)。 然后我们将在另一台服务器上设置一个镜像。

必需的:

  • 两个不同区域的 Ubuntu 14.04 Droplet; 一名导演和至少一面镜子。

第一步——设置 Apache

首先我们需要编译和安装MirrorBrain。 本教程的整个第一部分应该在 mirror Director 服务器上完成。 我们会通知您何时切换到镜像。

以 root 身份执行这些步骤 。 如有必要,使用 sudo 访问 root shell:

sudo -i

MirrorBrain 是一个大型 Apache 模块,因此我们需要使用 Apache 来提供我们的文件。 首先安装 Apache 和我们需要的模块:

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

GeoIP 是定位服务的 IP 地址,它将增强 MirrorBrain 将用户重定向到最佳下载位置的能力。 我们需要更改 GeoIP 的配置文件以使其与 MirrorBrain 一起使用。 首先打开配置文件:

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 模块可能已经启用; 没关系。

第二步——安装和编译 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

让我们编译 MirrorBrain GeoIP 助手:

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 添加日志文件(mirroprobe 检查镜像是否在线):

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

现在,我们可以安装 MirrorBrain 命令行管理工具:

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

第三步——安装 PostgreSQL

MirrorBrain 使用 PostgreSQL,它很容易在 Ubuntu 上设置。 首先,让我们安装 PostgreSQL:

apt-get install postgresql postgresql-contrib

现在让我们进入 PostgreSQL 管理 shell:

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 行(它应该是第二行,看起来像这样):

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

更新它以使用基于 md5 的密码身份验证:

local   all             all                                     md5

保存更改并重新启动 PostgreSQL:

service postgresql restart

现在让我们退出 PostgreSQL shell (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 并设置了一个数据库!

第四步——发布镜像

现在将一些文件添加到镜像中。 我们建议以您的域命名下载目录。 让我们创建一个目录来提供这些文件(仍以 root 身份):

mkdir /var/www/download.example.org

输入该目录:

cd /var/www/download.example.org

现在我们需要添加一些文件。 如果您的服务器上已有文件,您需要将 cpmv 放入此文件夹:

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

您也可以像上传任何其他文件一样上传新文件; 例如,通过使用 SSHFSSFTP

为了测试,您可以添加三个示例文件:

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

让我们添加这个配置。 path 应该是你的下载目录,而 comment 可以是任何你想要的:

[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

您应该会看到文件列表。

第五步——启用 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 设置我们的 Apache VirtualHost 文件:

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

然后添加此 VirtualHost 配置。 您需要修改所有使用 download.example.org 的位置,以便拥有自己的域或 IP 地址来解析到您的服务器。 您还应该为 ServerAdmin 设置设置您自己的电子邮件地址。 确保在 DBDParams 行上使用 mirrobrain 数据库用户的密码:

<VirtualHost *:80>
    ServerName download.example.org
    ServerAdmin webmaster@example.org
    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 用户的重定向)。

可以在 MirrorBrain 网站 上找到完整的配置选项列表

如果您想了解有关基本 Apache VirtualHost 设置的更多信息,请查看 本教程

保存并退出文件。

确保您的日志目录存在:

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 浏览器中访问您的下载站点以查看文件索引。 然后单击其中一个文件进行查看。 将“.mirrorlist”附加到 URL 的末尾。 (示例 URL:http://download.example.org/apples.txt.mirrorlist。)如果一切正常,您应该会看到如下页面:

Cron 作业配置

在开始添加镜像之前,我们还需要设置一些镜像扫描和维护 cron 作业。 首先,让我们设置 MirrorBrain 以每分钟检查哪些镜像在线(使用 mirrorprobe 命令):

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

还有一个 cron 作业,每小时扫描一次镜像的内容(检查文件的可用性和正确性):

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

如果您的内容变化很快,明智的做法是经常添加更多扫描,例如每半小时一次 0,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

第六步——在另一台服务器上镜像内容

现在我们已经设置了一个镜像导向器,让我们创建我们的第一个镜像。 对于要添加的每个镜像,您都可以按照此部分进行操作。

对于本节,请使用不同的 Ubuntu 14.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 每小时自动与主服务器同步(如果您使用了任何选项,请记住包括 --exclude 选项):

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

现在我们需要通过 HTTP(用于用户)和 rsync(用于 MirrorBrain 扫描)发布我们的镜像。

阿帕奇

如果您的服务器上已经有一个 HTTP 服务器,您应该添加一个 VirtualHost(或等效的)来为 /var/www/download.example.org 目录提供服务。 否则,让我们安装 Apache:

apt-get install apache2

然后让我们添加一个 VirtualHost 文件:

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

添加以下内容。 确保为 ServerNameServerAdminDocumentRoot 指令设置自己的值:

<VirtualHost *:80>
    ServerName london1.download.example.org
    ServerAdmin webmaster@example.org
    DocumentRoot /var/www/download.example.org
</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

然后添加配置,确保 path 与您的下载目录匹配。 注释 可以是任何你想要的:

[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 命令(以 root 身份)。 这个命令中有很多变量,我们将在下面解释:

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 pat@example.org 
  • london1.download.example.org 替换为此镜像的昵称。 它不必解决
  • -H 应该解析到您的服务器; 您可以使用域或 IP 地址
  • -R 应该解析到您的服务器; 您可以使用域或 IP 地址
  • --operator-name--operator-url-a-e 设置应该是您想要发布的首选管理员联系信息

然后,让我们扫描并启用镜像。 您需要使用在 new 命令中使用的相同昵称:

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

注意:如果您遇到类似 Can't locate LWP/UserAgent.pm in @INC 的错误,您应该返回 Step Two 部分并运行 perl -MCPAN -e 'install Bundle::LWP'再次。

假设扫描成功(MirrorBrain 可以连接到服务器),镜像将被添加到数据库中。

测试

现在尝试转到 director 服务器上的 MirrorBrain 实例(例如,download.example.org - 而不是 london1.download.example.org)。 同样,单击一个文件,并将“.mirrorlist”附加到 URL 的末尾。 您现在应该会看到可用镜像部分下列出的新镜像。

您可以在世界其他地方使用自己的服务器添加更多镜像,也可以使用 mb new 添加其他人为您运行的镜像。

禁用和重新启用镜像

如果您想禁用镜像,只需运行:

mb disable london1.download.example.org

使用上面使用的 mb scan --enable london1.download.example.org 命令重新启用镜像。