Страница 1 из 1

Настройка lighttpd2 в качестве LB reverse-proxy

Добавлено: 19 авг 2011, 14:54
Raven
Предположим у нас есть установленые серверы lighttpd на 2-х машинах, черпающие контент с общего накопителя (iSCSI|FibreChannel-storage или с устройства DRBD) и нам нужно организовать распределение нагрузки на эти сервера. Скажем наша испытуемая машина имеет IP 192.168.0.1, бэкенды висят на адресах 192.168.0.2 и 192.168.0.3 В данном примере я расскажу как это можно очень быстро организовать с помощью веб-сервера lighttpd-2.0.0 (о том как это делается в nginx пестрит весь интернет, но об этом, как и о том как настроить это на lighttpd-1.4.x я расскажу в другой раз) на примере операционки Oracle Enterprise Linux (то же что и RHEL, то же что и КопейкОС).

Итак, скачиваем снепшот (с официального зеркала или с нашего - не важно, и там и тут последние версии имеются), распаковываем его и собираем:

Код: Выделить всё

# wget http://lighttpd.sysadmins.el.kg/lighttpd/snapshots-2.0.x/lighttpd-2.0.0-snap-20110509-g259cdb.tar.gz
#tar -xvf lighttpd-2.0.0-snap-20110509-g259cdb.tar.gz
#cd lighttpd-2.0.0-snap-20110509-g259cdb/lighttpd-2.0.0
#./configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --target=x86_64-redhat-linux-gnu --program-prefix= --prefix=/usr/local --exec-prefix=/usr/local --bindir=/usr/local/bin --sbindir=/usr/local/sbin --sysconfdir=/usr/local/etc --datadir=/usr/local/share --includedir=/usr/local/include --libdir=/usr/local/lib64 --libexecdir=/usr/local/libexec --localstatedir=/usr/local/lighttpd --sharedstatedir=/usr/local/lighttpd/lib --mandir=/usr/local/share/man --infodir=/usr/local/share/info --libdir=/usr/local/lib64/lighttpd
(У меня x64 архитектура, я задал префикс /usr/local, дабы не создавать каши в структуре. Кстати, lighttpd2 требует пакет ragel, установить его можно так
#rpm -Uvh http://elders.princeton.edu/data/puias/unsupported/6/x86_64/ragel-6.6-2.puias6.x86_64.rpm)
#make && make install
Наконец мы получаем собраный веб-сервер, нам остается его только сконфигурировать.

В /usr/local/etc создаем файл angel.conf следующего содержания:

Код: Выделить всё

instance {
        user "lighttpd"; # Пользователь от которого все это дело запускаем
        max-open-files 16384; # Лимит файлов
        binary "/usr/local/libexec/lighttpd2/lighttpd2-worker"; # Путь к файлу воркера
        config "/usr/local/etc/lighttpd.conf"; # Путь к сонфигу воркера
        modules "/usr/local/lib64/lighttpd/lighttpd-2.0.0"; # Путь в папку с модулями

        copy-env ( "PATH" );

#       env ( "G_SLICE=always-malloc", "G_DEBUG=gc-friendly" );
#       wrapper ("/usr/bin/valgrind", "--leak-check=full", "--show-reachable=yes", "--leak-resolution=high" );
}
и файл lighttpd.conf

Код: Выделить всё

setup {

# Рассказываем ему какие модули подтягивать
        module_load (
                "mod_accesslog",
                "mod_balance",
                "mod_proxy"
        );
# Обьясняем что слушать
        listen "0.0.0.0:80";
        listen "[::]:80";
# Ну, с логами думаю все понятно
        log = ["debug": "", "*": "/usr/local/var/error.log"];
        accesslog = "/usr/local/var/access.log";
        accesslog.format = "%h %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"";

# Файл mimetypes.conf по дефолту лежит в папке с исходниками, копировать придется вручную
        include "/usr/local/etc/mimetypes.conf";
        static.exclude_extensions = ( ".php", ".pl", ".fcgi", "~", ".inc" );


}

# Собственно сам балансир. Пока существует 2 вида балансировки - balance.rr (RoundRobin, то есть тупо разброс запросов на бекенды) и balanse.sqf (формирование очереди запросов на каждый сервер), какой из них будет удобен вам - решать только вам.
balance.sqf (
        ${ proxy "192.168.50.3:80"; }, # Бэкенд №1
        ${ proxy "192.168.50.2:80"; }  # Бэкенд №2
);
Вот собственно и все. Остается стартануть сервер командой:

Код: Выделить всё

#/usr/local/sbin/lighttpd2 -c /usr/local/etc/angel.conf
Ну и при желании написать init-скрипт))).

Теперь при обращении на IP 192.168.0.1 вы будете попеременно попадать то на 192.168.0.2, то на 192.168.0.3

P.S. Чуть не забыл - директории под логи и прочую муть имеющуюся в конфиге придется создать тоже ручками))).