====== 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]]