如何在Ubuntu 14.04上使用MirrorBrain设置Mirror Director

建立自己的镜子导演和镜子MirrorBrain使下载服务器的智能全球集合。

介绍

镜像是缩放下载网站的一种方式,因此下载负载可以分布在世界许多地方的许多服务器上。镜像文件的主机副本,并由镜像控制器管理。镜像控制器是任何镜像系统的中心。它负责将流量定向到最接近的适当镜像,以便用户可以更快地下载。 镜像是一个独特的系统,具有自己的优点和缺点。与基于DNS的系统不同,镜像更灵活。没有必要等待DNS或甚至信任镜像服务器(镜像导向器可以扫描镜像来检查其有效性和完整性)。这是许多开源项目使用镜像来利用ISP和服务器所有者的慷慨,从开源项目自己的服务器下载下载的一个原因。 不幸的是,镜像系统会增加任何HTTP请求的开销,因为请求必须在重定向到真实文件之前传递到镜像控制器。因此,镜像通常用于托管下载(单个大文件),但不推荐用于网站(许多小文件)。 本教程将介绍如何在一台服务器上设置MirrorBrain实例(流行的,功能丰富的镜像控制器)和rsync服务器(rsync允许镜像与导向器同步文件)。然后我们将在不同的服务器上设置一个镜像。 需要:
  • 两个Ubuntu 14.04水晶在不同地区;一个导演和至少一个镜子。

第一步 - 设置Apache

首先我们需要编译和安装MirrorBrain。本教程的整个第一部分应该镜像Director服务器上完成。我们会让你知道什么时候切换到镜像。 执行这些步骤以root身份 。如果需要,使用sudo访问根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信封行,并取消对GeoIPDBFile线,并添加MMapCache设置:
<IfModule mod_geoip.c>
        GeoIPEnable On
        GeoIPOutput Env
        GeoIPDBFile /usr/share/GeoIP/GeoIP.dat MMapCache
</IfModule>
关闭并保存文件(Ctrl-X,y,然后回车 )。 将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再次运行“安装包:: 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和表单模块:
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的日志文件(mirrorprobe检查镜像是否联机):
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管理界面:
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的外壳( 按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
现在我们需要添加一些文件。如果您已经在服务器上的文件,你会想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
您也可以像上传其他文件一样上传新文件;例如,通过使用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
让我们添加这个配置。该路径应该是你的下载目录, 注释可以是任何你想要的:
[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行中使用mirrorbrain数据库用户的密码:
<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>
值得看看目录标签下可用的一些MirrorBrain选项:
名称 用法
MirrorBrainMinSize 设置要重定向到要下载的镜像的最小大小文件(以字节为单位)。这防止了MirrorBrain重定向人们下载真正小的文件,其中运行数据库查找,GeoIP等所花费的时间比仅仅服务该文件更长。
MirrorBrainExcludeMimeType 设置不应从镜像提供mime类型。考虑为密钥文件或类似文件启用此功能;小文件必须100%准确地交付。在配置文件中多次使用此选项可为多个MIME类型启用此选项。
MirrorBrainExcludeUserAgent 此选项会停止给定用户代理的重定向。某些客户端(例如curl)需要特殊配置才能使用重定向,并且可能更容易将文件直接提供给这些用户。您可以使用通配符(如*Chrome/*将禁用重定向任何Chrome用户)。
配置选项的完整列表,可以发现在MirrorBrain网站上 。 如果您想了解基本的Apache虚拟主机设置的详细信息,请查看本教程保存并退出文件。 确保您的日志目录存在:
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的结尾。 (例如网址: http://download.example.org/apples.txt.mirrorlist 。)如果一切工作正常,你应该看到这样的页面: MirrorBrain镜像列表示例

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扫描)发布镜像。

Apache

如果你已经有一个HTTP服务器的服务器上,你应该添加一个虚拟主机(或同等学历),服务/var/www/ download.example.org目录。否则,让我们安装Apache:
apt-get install apache2
然后让我们添加一个VirtualHost文件:
nano /etc/apache2/sites-available/london1.download.example.org.conf
添加以下内容。确保你的服务器名 (SERVERADMIN)DocumentRoot的指令设置自己的价值观:
<VirtualHost *:80>
    ServerName london1.download.example.org
    ServerAdmin webmaster@example.org
    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 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
注意:如果你遇到一个错误,如无法找到在LWP / UserAgent.pm @INC你应该回到第二步段和运行perl -MCPAN -e 'install Bundle::LWP'一次。 假设扫描成功(MirrorBrain可以连接到服务器),镜像将被添加到数据库。

测试

现在尝试去导演服务器上的MirrorBrain实例(例如,download.example.org - 不是london1.download.example.org)。再次单击一个文件,并将“.mirrorlist”附加到URL的末尾。现在,您应该可以在可用的镜像部分下面看到新镜像。 你可以用你自己的服务器在其他地方的世界增添更多的镜子,或者您可以使用MB新添加一面镜子,别人运行你。

禁用和重新启用镜像

如果你想禁用一个镜像,就像运行一样简单:
mb disable london1.download.example.org
重新启用使用镜mb scan --enable london1.download.example.org上面使用的命令。