Instalacja i konfiguracja HAProxy

 

Założenia:

- zwiększenie dostępności serwera WWW

- rozproszenie obciążenia

 

 
 

Rysunek 1: Schemat logiczny połączenia

 

 

Konfiguracja i instalacja oprogramowania HAProxy w systemie Linux CentOS7_1 gdzie „CentOS7_1” jest nazwą hosta.

 

Informacja o systemie operacyjnym

 

# uname -a

Linux CENTOS7_1 3.10.0-693.5.2.el7.x86_64 #1 SMP Fri Oct 20 20:32:50 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

 

 

1. Instalacja pakietu

 

# yum install haproxy

# rpm -qi haproxy | grep Version

Version     : 1.5.18

 

Plik konfiguracyjny HAProxy znajduje się w /etc/haproxy/haproxy.cfg

pełna dokumentacja http://haproxy.1wt.eu/download/1.4/doc/configuration.txt

 

 

Listing pliku konfiguracyjnego HAProxy (zastosowany przykład)

 

# cat /etc/haproxy/haproxy.cfg

global

    log 127.0.0.1 local2

    chroot      /var/lib/haproxy

    pidfile     /var/run/haproxy.pid

    maxconn     4000

    user        haproxy

    group       haproxy

    daemon

stats socket /var/lib/haproxy/stats

defaults

    mode                    http

    log                     global

    option                  httplog

    option                  dontlognull

    option http-server-close

    option forwardfor       except 127.0.0.0/8

    option                  redispatch

    retries                 3

    timeout http-request    10s

    timeout queue           1m

    timeout connect         10s

    timeout client          1m

    timeout server          1m

    timeout http-keep-alive 10s

    timeout check           10s

    maxconn                 3000

# nazwa i adres serwera na którym jest zainstalowany HAProxy

listen CENTOS7_1 192.168.7.1:80

#algorytm rozproszenia obciążenia (domyślny)

balance roundrobin

# serwery www (nazwa, ip, port)

server CENTOS7_2 192.168.7.2:80 check

server CENTOS7_3 192.168.7.3:80 check

# serwer www zapasowy

server CENTOS7_4 192.168.7.4:80 check backup

# dodatkowy port na którym HAProxy przyjmuje żądania

bind :8443

# konfiguracja statystyk

listen statystyka :1936

mode http

stats enable

stats uri /

 

 

4. Uruchomienie usługi

 

# systemctl start haproxy

# systemctl status haproxy

● haproxy.service - HAProxy Load Balancer

   Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled)

   Active: active (running) since sob 2018-02-10 20:25:16 CET; 6s ago

 Main PID: 6040 (haproxy-systemd)

   CGroup: /system.slice/haproxy.service

           ├─6040 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid

           ├─6047 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds

           └─6048 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds

lut 10 20:25:16 CENTOS7_1 systemd[1]: Started HAProxy Load Balancer.

lut 10 20:25:16 CENTOS7_1 systemd[1]: Starting HAProxy Load Balancer...

lut 10 20:25:16 CENTOS7_1 haproxy-systemd-wrapper[6040]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haprox...id -Ds

Hint: Some lines were ellipsized, use -l to show in full.

 

 

5. Dodanie usługi do autostartu systemu

 

# systemctl enable haproxy

Created symlink from /etc/systemd/system/multi-user.target.wants/haproxy.service to /usr/lib/systemd/system/haproxy.service.

 

 

6. Konfiguracja dziennika zdarzeń

 

# echo "local2.* -/var/log/haproxy.log" >> /etc/rsyslog.conf

# systemctl restart rsyslog.service

 

 

Przedstawiony opis zakłada konfigurację maszyny CentOS7_1 w systemie operacyjnym Linux jako pośrednik w obsłudze żądań z serwerem WWW, wykorzystując do tego oprogramowanie HAProxy.

Jako serwer WWW wykorzystano 3 maszyny z systemem operacyjnym Linux , przy czym maszyna CentOS7_2 oraz CentOS7_3 stanowi podstawy serwer WWW, natomiast CentOS7_4 stanowi serwer zapasowy.

Opis nie obejmuje konfiguracji serwerów WWW oraz zapory ogniowej (firewall) pomiędzy hostami.

Przyjmuję, że mamy 3 maszyny (hosty logiczne) świadczące ten sam serwis WWW. Każda z nich jest niezależna, nasłuchuje na porcie 80 i posiada swój własny adres IP.

W praktyce wygląda to tak, że HAProxy „spina” wszystkie 3 serwery WWW, które są widziane dla „Klienta” jako jeden serwer WWW.

Żądania przychodzące do CentOS7_1 (HAProxy) są kierowane (na przemian) tylko do CentOS7_2 oraz CentOS7_3, natomiast w przypadku jednoczesnej awarii dwóch serwerów podstawowych, żądania będą kierowane do serwera CentOS7_4.

Obsługa żądań jest rejestrowana w dzienniku zdarzeń:

 

# cat /var/log/haproxy.log

Feb 10 20:51:14 localhost haproxy[6048]: 192.168.7.5:45736 [10/Feb/2018:20:51:14.614] CENTOS7_1 CENTOS7_1/CENTOS7_2 0/0/45/27/72 200 316 - - ---- 1/1/0/0/0 0/0 "GET / HTTP/1.1"

Feb 10 20:51:14 localhost haproxy[6048]: 192.168.7.5:45736 [10/Feb/2018:20:51:14.687] CENTOS7_1 CENTOS7_1/CENTOS7_3 193/0/0/1/194 404 419 - - ---- 1/1/0/1/0 0/0 "GET /favicon.ico HTTP/1.1"

Feb 10 20:51:15 localhost haproxy[6048]: 192.168.7.5:45736 [10/Feb/2018:20:51:14.881] CENTOS7_1 CENTOS7_1/CENTOS7_2 98/0/1/64/163 404 419 - - ---- 1/1/0/1/0 0/0 "GET /favicon.ico HTTP/1.1"

Feb 10 20:51:17 localhost haproxy[6048]: 192.168.7.5:45736 [10/Feb/2018:20:51:15.045] CENTOS7_1 CENTOS7_1/CENTOS7_3 2347/0/1/1/2349 200 315 - - ---- 1/1/0/1/0 0/0 "GET / HTTP/1.1"

Feb 10 20:51:20 localhost haproxy[6048]: 192.168.7.5:45736 [10/Feb/2018:20:51:17.394] CENTOS7_1 CENTOS7_1/CENTOS7_2 3053/0/0/1/3054 200 316 - - ---- 1/1/0/0/0 0/0 "GET / HTTP/1.1"

Feb 10 20:51:21 localhost haproxy[6048]: 192.168.7.5:45736 [10/Feb/2018:20:51:20.448] CENTOS7_1 CENTOS7_1/CENTOS7_3 648/0/0/1/649 200 315 - - ---- 1/1/0/1/0 0/0 "GET / HTTP/1.1"

 

Żądania (klienta 192.168.7.5) za pośrednictwem HAProxy zostały przekazywane naprzemiennie do serwerów CentOS7_2 CentOS7_3 CentOS7_2 CentOS7_3 (...)

 

 

Dostęp do serwisu WWW realizujemy za pośrednictwem:

http://192.168.7.1/

 

lub

http://192.168.7.1:8443

 

 

 

Statystyki HAProxy możemy przeglądać pod adresem:

http://192.168.7.1:1936

 

 
 

Szymon Urbańczyk

10.02.2018 r.