====== High Availability and Load-Balancing ======
===== Подготовка =====
**/etc/hosts** - обязательно на каждой ноде прописываем все хосты на случай если что то может случиться с DNS
===== HAProxy =====
На обоих серверах делаем:
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.orig
cat /dev/null > /etc/haproxy/haproxy.cfg
vi /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#debug
#quiet
user haproxy
group haproxy
defaults
log global
mode http
option httplog
option dontlognull
retries 3
redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 192.168.0.99:80
mode http
stats enable
stats auth someuser:somepassword
balance roundrobin
cookie JSESSIONID prefix
option httpclose
option forwardfor # для nginx комментируем
option httpchk HEAD /check.txt HTTP/1.0
server webA 192.168.0.102:80 cookie A check
server webB 192.168.0.103:80 cookie B check
===== keepalived =====
Этот сервис предназначен для мониторинга и управления выделенным виртуальным адресом в кластере серверов.
Устанавливаем его:
yum install -y keepalived
Для того, что бы HAProxy смог использовать виртуальный IP адрес, мы добавляем параметр в файл **/etc/sysctl.conf**
net.ipv4.ip_nonlocal_bind=1
И запускам
sysctl -p
А там же нам надо в **/etc/sysconfig/iptables** разрешить MULTICAST, если нет. Добавляем строчку:
-A INPUT -s 192.168.0.0/24 -d 224.0.0.0/8 -j ACCEPT
Теперь настраиваем на keepalived на нодах.
==== На первой: ====
Файл: /etc/keepalived/keepalived.conf
vrrp_script chk_haproxy { # Requires keepalived-1.1.13
script "killall -0 haproxy" # cheaper than pidof
interval 2 # check every 2 seconds
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_1 {
interface eth0
state MASTER
virtual_router_id 51
priority 101 # 101 on master, 100 on backup
virtual_ipaddress {
192.168.0.99
}
track_script {
chk_haproxy
}
}
И запускаем keepalived
service keepalived start
Проверям конфигурацию. Должно получиться что то подобное:
# ip addr sh eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:63:f7:5c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.100/24 brd 192.168.0.255 scope global eth0
inet 192.168.0.99/32 scope global eth0
inet6 fe80::20c:29ff:fe63:f75c/64 scope link
valid_lft forever preferred_lft forever
Добавляем в автозагрузку
chkconfig keepalived on
==== На второй ====
Файл: /etc/keepalived/keepalived.conf
Небольшое, но очень важное отличие - мы используем здесь **priority 100** вместо **priority 101**, что бы сделать вторую ноду запасной (slave или hot-standby)
vrrp_script chk_haproxy { # Requires keepalived-1.1.13
script "killall -0 haproxy" # cheaper than pidof
interval 2 # check every 2 seconds
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_1 {
interface eth0
state MASTER
virtual_router_id 51
priority 100 # 101 on master, 100 on backup
virtual_ipaddress {
192.168.0.99
}
track_script {
chk_haproxy
}
}
Запускаем:
/etc/init.d/keepalived start
И смотрим, что получилось:
# ip addr sh eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:be:7b:3b brd ff:ff:ff:ff:ff:ff
inet 192.168.0.101/24 brd 192.168.0.255 scope global eth0
inet6 fe80::20c:29ff:febe:7b3b/64 scope link
valid_lft forever preferred_lft forever
Добавляем в автозагрузку
chkconfig keepalived on
===== Запуск =====
Запускаем HAProxy и добавляем его в автозагрузку.
service haproxy start
===== Статьи =====
Оригинал [[http://www.howtoforge.com/setting-up-a-high-availability-load-balancer-with-haproxy-keepalived-on-debian-lenny-p2]]
[[http://rails.nuvvo.com/lesson/3387-nginx-+-haproxy-usage-and-a-gotcha]]