Безотказный HTTP(S)

В статье предлагается способ обеспечения надежной работы сервисов HTTP/HTTPS с использованием Linux Virtual Server

[Шешко Алексей (sheshka AT yahoo DOT com)]

Задача: Обеспечить надежность http и https сервисов, устранить единую точку отказа.
Решение: Предполагаем следующее решение:

Трафик, поступающий на реальный ip 209.x.x.19 редиректится на "виртуальный" ip 10.0.2.50/8, который перемещаеться между балансировщиками нагрузки LB1 и LB2, имеющими на интерфейсе eth0 ip 10.0.1.230/8 и 10.0.1.231/8 соответсвенно. Далее трафик с интерфейса eth1, имеющего "виртуальный" ip 192.168.120.50/24 уходит на пул "реальных" серверов, в нашем примере 192.168.120.86 и 192.168.120.87. Для реализации используем http://www.ultramonkey.org/3/ Балансировщики нагрузки взаимодействуют с друг другом посредством мультикаст пакетов, и если мастер LB1 перестал отвечать, "виртуальные" ip мигрируют на резервный балансировщик LB2. Доступность "реальных" серверов проверяется посредством tcp connect. Установка небходимого софта никаких сложностей не имеет, просто ставим нужные нам rpm пакеты, однако "любителям наблюдать за выводом gcc" стоит быть осторожными, так как файл /sbin/ipvsadm должен быть собран с использованием заголовочных файлов текущей версии ядра, в противном случае его работа может быть непредсказуемой. Следует заметить что никаких модификаций софта на "реальных" серверах не производилось. Таким образом мы устранем точку отказа балансировщика нагрузки посредством его резервирования, а так же резервируем http(s) сервера, т.е. устраняем точку отказа еденичного http(s) сервера - получаем High-Availability и High-Performance решение.

       ________               _____
      |        |             |     |
      |        |             | .86 |
      | LB1    |-------->----|     |
      |(active)|____         |_____|
      |________|    |
         |          |
--->----VIP         |         _____
       __|_____     \--->----|     |
      |        |             | .87 |
      | LB2    |             |     |
      |        |             |_____|
      |        |
      |________|

------------------------- Begin of /etc/sysctl.conf ----------------------------------------------
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
------------------------- End of /etc/sysctl.conf ----------------------------------------------


Files from /etc/ha.d/
-------------------------- Begin of ha.cf --------------------------------------------------------
debugfile /var/log/ha-debug
logfile /var/log/ha-log
keepalive 2
deadtime 10
#bcast   eth0
mcast eth0 225.0.0.1 696 1 0
#udpport 695
node LB1 LB2
auto_failback on
ping 10.0.1.11
#respawn hacluster /usr/lib64/heartbeat/ipfail
-------------------------- End of ha.cf -----------------------------------------------------------

-------------------------- Begin of haresources ---------------------------------------------------
LB1 IPaddr::10.0.2.50/8/eth0 IPaddr::192.168.120.50/24/eth1 ldirectord::ldirectord.cf
-------------------------- End of haresources -----------------------------------------------------

-------------------------- begin of authkeys ------------------------------------------------------
auth 1
1 sha1 f176669675682f063d2b088c1b462a2f
-------------------------- begin of authkeys ------------------------------------------------------

------------------------------- Begin of /etc/ha.d/conf/ldirectord.cf -----------------------------
# Global Directives
checktimeout=5
checkinterval=5
#fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
#logfile="local0"
quiescent=no

# A sample virtual with a fallback that will override the goble setting
# the real must start at least 4 spaces from left margin
#your "index.html" file must contain the string "happy"
virtual=10.0.2.50:443
        real=192.168.120.86:443 masq
        real=192.168.120.87:443 masq
        fallback=127.0.0.1:443
        service=https
        request="aaaa.html"
        receive="aaaa"
        checktype = connect
        scheduler=wlc
        persistent=120
        netmask=255.255.255.0
        protocol=tcp
virtual=10.0.2.50:80
        real=192.168.120.86:80 masq
        real=192.168.120.87:80 masq
        fallback=127.0.0.1:80
        service=http
        request="aaaa.html"
        receive="aaaa"
        checktype = connect
        scheduler=wlc
        persistent=120
        netmask=255.255.255.0
        protocol=tcp

------------------------------- EDN of /etc/ha.d/conf/ldirectord.cf -----------------------------
Ссылки по теме:
  1. http://www.linux-ha.org/
  2. http://www.ultramonkey.org/3/linux-ha.html
© 2006 Шешко Алексей, sheshka@yahoo.com

Статья взята с сайта OpenNet.

[ опубликовано 01/06/2006 ]

Шешко Алексей (sheshka AT yahoo DOT com) - Безотказный HTTP(S)   Версия для печати