Как настроить Mirror Director с помощью MirrorBrain в Ubuntu 14.04

Вступление

Зеркальное отображение - это способ масштабирования сайта загрузки, поэтому нагрузка загрузки может быть распределена по многим серверам во многих частях мира. Зеркально отображает копии файлов и управляется зеркальным директором. Зеркальный директор - это центр любой зеркальной системы. Он отвечает за направление трафика к ближайшему подходящему зеркалу, чтобы пользователи могли загружать быстрее.

Зеркалирование - это уникальная система со своими достоинствами и недостатками. В отличие от системы на основе DNS, зеркалирование гораздо более гибкое. Нет необходимости ждать DNS или даже доверять серверу зеркалирования (директор зеркала может сканировать зеркало, чтобы проверить его действительность и полноту). Это одна из причин, по которой многие проекты с открытым исходным кодом используют зеркала для того, чтобы использовать щедрость интернет-провайдеров и владельцев серверов для загрузки нагрузки с собственных серверов проекта с открытым исходным кодом для загрузки.

К сожалению, система зеркалирования увеличивает накладные расходы любого HTTP-запроса, так как запрос должен перемещаться к директору зеркала, прежде чем он будет перенаправлен в реальный файл. Поэтому зеркалирование обычно используется для размещения загрузок (отдельные большие файлы), но не рекомендуется для веб-сайтов (много небольших файлов).

В этом руководстве показано, как настроить экземпляр MirrorBrain (популярный, многофункциональный зеркальный директор) и сервер rsync (rsync позволяет зеркалировать синхронизацию файлов с директором) на одном сервере. Затем мы установим одно зеркало на другом сервере.

Необходимые:

  • Две капли Ubuntu 14.04 в разных регионах; один директор и хотя бы одно зеркало.

[[step-one-- setting-up-apache]] === Шаг первый - Настройка Apache

Сначала нам нужно скомпилировать и установить MirrorBrain. Вся первая часть этого урока должна быть сделана на сервере * mirror Director *. Мы дадим вам знать, когда переключиться на зеркало.

Выполните эти шаги * как root *. При необходимости используйте sudo для доступа к корневой оболочке:

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

Измените его так, чтобы он выглядел следующим образом. Добавьте строку, раскомментируйте ее и добавьте параметр:

<IfModule mod_geoip.c>
       GeoIPEnable On

       GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
</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 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 (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

Сохраните ваши изменения и перезапустите 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/

Введите этот каталог:

cd /var/www/

Теперь нам нужно добавить несколько файлов. Если у вас уже есть файлы на вашем сервере, вы захотите добавить их в эту папку:

cp * /var/www/

Если они находятся на другом сервере, который вы могли бы использовать (серверу-директору зеркала требуется SSH-доступ к другому серверу):

scp @:

Вы также можете просто загрузить новые файлы, как и любые другие файлы; например, используя SSHFS или https: // www. digitalocean.com/community/tutorials/how-to-use-sftp-to-securely-transfer-files-with-a-remote-server[SFTP].

Для тестирования вы можете добавить три примера файлов:

cd /var/www/
touch apples.txt bananas.txt carrots.txt

Далее нам нужно настроить rsync. rsync - это инструмент UNIX, который позволяет нам синхронизировать файлы между серверами. Мы будем использовать его для синхронизации наших зеркал с директором зеркала. Rsync может работать через SSH или общедоступный URL + rsync: // +. Мы настроим опцию rsync (URL). Сначала нам нужно сделать файл конфигурации:

nano /etc/rsyncd.conf

Давайте добавим эту конфигурацию. Должно быть в вашем каталоге загрузки, а может быть любым, что вы хотите:

[main]
   path = /var/www/
   comment =
   read only = true
   list = yes

Сохраните файл. Запустите демон rsync:

rsync --daemon --config=/etc/rsyncd.conf

Теперь мы можем проверить это, запустив следующее в системе * NIX. Вы можете использовать домен, который соответствует вашему серверу, или IP-адрес вашего сервера:

rsync rsync:///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

Затем добавьте эту конфигурацию. Большинство из этих настроек предназначены для настройки соединения с базой данных. Не забудьте добавить пароль пользователя базы данных * mirrorbrain * для настройки:

[general]
instances = main

[main]
dbuser = mirrorbrain
dbpass =
dbdriver = postgresql
dbhost = 127.0.0.1
dbname = mirrorbrain

[mirrorprobe]

Сохраните файл. Теперь давайте настроим наш файл Apache VirtualHost для MirrorBrain:

nano /etc/apache2/sites-available/.conf

Затем добавьте эту конфигурацию VirtualHost. Вам нужно изменить все местоположения, в которых используется ваш собственный домен или IP-адрес, который разрешается на вашем сервере. Вы также должны установить свой собственный адрес электронной почты для настройки. Убедитесь, что вы используете пароль пользователя * mirrorbrain * в строке:

<VirtualHost *:80>
   ServerName
   ServerAdmin
   DocumentRoot /var/www/

   ErrorLog     /var/log/apache2//error.log
   CustomLog    /var/log/apache2//access.log combined

   DBDriver pgsql
   DBDParams "host=localhost user=mirrorbrain password= dbname=mirrorbrain connect_timeout=15"

   <Directory /var/www/>
       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, доступные под тегом Directory:

Name Usage

MirrorBrainMinSize

Sets the minimum size file (in bytes) to be redirected to a mirror to download. This prevents MirrorBrain for redirecting people to download really small files, where the time taken to run the database lookup, GeoIP, etc. is longer than to just serve the file.

MirrorBrainExcludeMimeType

Sets which mime types should not be served from a mirror. Consider enabling this for key files or similar; small files that must be delivered 100% accurately. Use this option multiple times in your configuration file to enable it for multiple mime types.

MirrorBrainExcludeUserAgent

This option stops redirects for a given user agent. Some clients (e.g. curl) require special configuration to work with redirects, and it may be easier to just serve the files directly to those users. You can use wildcards (e.g. *Chrome/* will disable redirection for any Chrome user).

Полный список параметров конфигурации можно найти по адресу on на сайте MirrorBrain.

Если вам нужна дополнительная информация об основных настройках Apache VirtualHost, проверьте https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-14-04- Это [этот урок].

  • Сохраните и выйдите из файла. *

Убедитесь, что ваш каталог журналов существует:

mkdir  /var/log/apache2//

Сделайте ссылку на файл конфигурации в каталоге включенных сайтов:

ln -s /etc/apache2/sites-available/.conf /etc/apache2/sites-enabled/.conf

Теперь перезапустите Apache:

service apache2 restart

Поздравляем, теперь MirrorBrain запущен и работает!

Чтобы проверить, работает ли MirrorBrain, сначала посетите веб-сайт загрузки в веб-браузере, чтобы просмотреть индекс файла. Затем нажмите на один из файлов, чтобы просмотреть его. Добавьте «.mirrorlist» в конец URL. (Пример URL: * http: //download.example.org/apples.txt.mirrorlist*.) Если все работает, вы должны увидеть страницу, подобную этой:

изображение: https: //assets.digitalocean.com/tutorial_images/CPrIui0.png [Пример зеркального списка MirrorBrain]

Конфигурация задания Cron

Прежде чем мы сможем начать добавление зеркал, нам все еще нужно настроить некоторые задания для сканирования и обслуживания зеркал. Во-первых, давайте установим MirrorBrain для проверки, какие зеркала подключены (используя команду mirrorprobe) каждую минуту:

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

И задание cron для сканирования содержимого зеркал (на наличие и правильность файлов) каждый час:

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

Если у вас очень быстро изменяющийся контент, было бы разумно чаще добавлять дополнительные проверки, например, +0,30 * * * * + каждые полчаса. Если у вас очень мощный сервер, вы можете увеличить количество «+ - заданий», чтобы одновременно сканировать больше зеркал.

Очистить базу данных в 1:30 утра понедельника:

echo "30 1 * * mon mirrorbrain mb db vacuum" | crontab

И обновите данные GeoIP около 2:30 по утрам в понедельник (оператор сна должен уменьшить ненужные скачки нагрузки на серверах GeoIP):

echo "31 2 * * mon root sleep $(($RANDOM/1024)); /usr/bin/geoip-lite-update" | crontab

Шаг шестой - Зеркальное отображение контента на другом сервере

Теперь, когда у нас настроен директор зеркала, давайте создадим наше первое зеркало. Вы можете следовать этому разделу для каждого зеркала, которое вы хотите добавить.

Для этого раздела используйте другой сервер Ubuntu 14.04, предпочтительно в другом регионе.

После того, как вы вошли в систему (как пользователь root), создайте каталог содержимого зеркала:

mkdir -p /var/www/

Затем скопируйте содержимое в этот каталог, используя URL rsync, который мы установили ранее:

rsync -avzh rsync:///main /var/www/

Если при использовании rsync возникают проблемы с пробелом (ошибка ввода-вывода), есть способ обойти это. Вы можете добавить опцию, чтобы исключить каталоги, которые не так важны для ваших посетителей. MirrorBrain будет сканировать ваш сервер и не будет отправлять пользователей на исключенные файлы, вместо этого отправляя их на ближайший сервер, на котором находится файл. Например, вы можете исключить старые фильмы и старые песни:

rsync -avzh rsync:///main /var/www/ --exclude "movies/old" --exclude "songs/old"

Затем мы можем настроить ваш зеркальный сервер на автоматическую синхронизацию с основным сервером каждый час, используя cron (не забудьте включить опции + - exclude +, если вы их использовали):

echo '0 * * * * root rsync -avzh rsync:///main /var/www/' | crontab

Теперь нам нужно опубликовать наше зеркало по HTTP (для пользователей) и по rsync (для сканирования MirrorBrain).

апаш

Если у вас уже есть HTTP-сервер на вашем сервере, вы должны добавить VirtualHost (или эквивалентный) для обслуживания каталога + / var / www / +. В противном случае давайте установим Apache:

apt-get install apache2

Затем давайте добавим файл VirtualHost:

nano /etc/apache2/sites-available/.conf

Добавьте следующее содержимое. Убедитесь, что вы установили свои собственные значения для директив, и:

<VirtualHost *:80>
   ServerName
   ServerAdmin
   DocumentRoot /var/www/
</VirtualHost>

Сохраните файл. Включите новый VirtualHost:

ln -s /etc/apache2/sites-available/.conf /etc/apache2/sites-enabled/.conf

Теперь перезапустите Apache:

service apache2 restart

Rsync

Далее нам нужно настроить демон rsync (для сканирования MirrorBrain). Сначала откройте файл конфигурации:

nano /etc/rsyncd.conf

Затем добавьте конфигурацию, убедившись, что path соответствует вашему каталогу загрузки. Comment может быть любым, что вы хотите:

[main]
   path = /var/www/
   comment =
   read only = true
   list = yes

Сохраните этот файл.

Запустите демон rsync:

rsync --daemon --config=/etc/rsyncd.conf

Включение зеркала на директора

Теперь * вернувшись на сервер MirrorBrain *, нам нужно добавить зеркало. Мы можем использовать команду (как root). В этой команде довольно много переменных, которые мы объясним ниже:

mb new
      -H http://
      -R rsync:///main
      --operator-name= --operator-url=
      -a  -e
  • Замените псевдонимом для этого зеркала. Не нужно разрешать

  • * -H * должен разрешить на ваш сервер; Вы можете использовать домен или IP-адрес

  • * -R * должен разрешить на ваш сервер; Вы можете использовать домен или IP-адрес

  • Настройки + - operator-name +, + - operator-url +, + -a + и + -e + должны быть вашей предпочитаемой контактной информацией администратора, которую вы хотите опубликовать.

Затем давайте просканируем и включим зеркало. Вам нужно будет использовать тот же псевдоним, который вы использовали в команде + new +:

mb scan --enable
Примечание. Если вы столкнулись с ошибкой, подобной той, что вы должны вернуться в раздел * Step Two * и снова запустить `+ perl -MCPAN -e ', установите Bundle

LWP' +`.

Если сканирование выполнено успешно (MirrorBrain может подключиться к серверу), зеркало будет добавлено в базу данных.

тестирование

Теперь попробуйте перейти к экземпляру MirrorBrain на сервере директора (например, download.example.org - не london1.download.example.org). Снова щелкните файл и добавьте «.mirrorlist» в конец URL-адреса. Теперь вы должны увидеть новое зеркало, перечисленное в разделе доступных зеркал.

Вы можете добавить больше зеркал с вашими собственными серверами в других местах мира, или вы можете использовать * mb new *, чтобы добавить зеркало, которое для вас работает.

Отключение и повторное включение зеркал

Если вы хотите отключить зеркало, это так же просто, как запустить:

mb disable

Снова включите зеркало, используя команду + mb scan --enable +, как описано выше.

Related