CONTENT
  • CHANGES
Szukaj
counter

#top Instalacja


Instalację serwera HAProxy można wykonać na różne sposoby: od kompilacji ze źdródeł poprzez instalację pojedynczych paczek rpm za pomocą polecenia rpm skończywszy na instalacja z użyciem menedżera pakietów, który zainstaluje wszystkie niezbędne paczki wraz zależnościami.
Celem niniejszego dokumentu nie jest rozważanie różnych metod instalacji tylko nieco usprawnienie użyteczności konfiguracji serwera HAProxy po zainstalowaniu oraz wprowadzenie porządku / hierarchi położenia plików z których korzysta usługa w strukturze katalogowej.
Wszystko to zostało opisane poniżej.

#top Logging


W pierwszej kolejności należy utworzyć katalog na pliki logów:
mkdir -p /var/log/haproxy

HAProxy bezpośrednio sam nie zapisuje informacji do plików. Wykorzystuje do tego celu demona syslog / rsyslog do którego wysyła informacje poprzez sieć na skonfigurowany w sekcji globalnej adres oraz port (w tym celu należy najpierw w demonie syslog włączyć odbieranie logów ze zdalnych maszyn / hostów, zobacz syslog - remote logging)
W zależności od wersji demona syslog / rsyslog (zależnej od wersji systemu operacyjnego) włączenie odbieranie logów ze zdalnych maszyn / hostów konfiguruje się nieco odmiennie:
syslogd
Dla demona syslog dostępnego w systemie CentOS 5.* realizuje się to poprzez dodanie opcji -r do zmiennej SYSLOGD_OPTIONS przechowywanej w pliku /etc/sysconfig/syslog przekazywanej do argumentów wiersza poleceń demona podczas uruchamiania:
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-r -m 0"
rsyslogd
Dla demona rsyslog dostępnego w systemie CentOS 6.* realizuje się to poprzez odkomentowanie opcji $ModLoad i $UDPServerRun znajdujących się w pliku konfiguracyjnym /etc/rsyslog.conf demona:
# Provides UDP syslog reception
$ModLoad imudp.so
$UDPServerRun 514

Po skonfigurowaniu demona syslog / rsyslog należy w sekcji globalnej HAProxy wpisać adres IP serwera, do którego będą wysyłane informacje.
global
	#log     127.0.0.1 local0
	#log     127.0.0.1 local1 notice
	log     127.0.0.1 local0



#top Poinstalacyjna konfiguracja


#top global


W pierwszej kolejności po zainstalowaniu HAProxy należy ustawić odpowiednie opcje demona w sekcji globals. Dostępne domyślne opcje najczęściej nie wymagają zmian. Jedną z istotnych zmian, które należy wprowadzić w tej sekcji to wpisać adres IP serwera syslog do którego będą wysyłane informacje o połączeniach. Sekcja globals po uzupełnieniu adresu IP serwera syslog powinna wyglądać analogicznie jak poniżej:

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------

global
	#log     127.0.0.1 local0
	#log     127.0.0.1 local1 notice
	log     127.0.0.1 local0
	log     127.0.0.1 local1 notice
	#chroot  /var/empty
	chroot  /usr/share/empty
	pidfile /var/run/haproxy.pid
	# Fix the maximum number of concurrent connections on a frontend
	# Proxies will stop accepting connections when this limit is reached
	maxconn 4096
	uid     99
	gid     99
	daemon
	#debug
	#quiet
	# turn on stats unix socket
	stats socket /var/lib/haproxy/stats



#top defaults


W następnej kolejności po zainstalowaniu HAProxy należy ustawić domyślne ustawienia w sekcji defaults. W niniejsze sekcji ustawiane są domyślne parametry działania (częśc z nich może być nadpisywana w sekcjach frontend oraz backend):
  • trybu pracy (mode),
  • opcje związane maksymalną liczbą akceptowanych połączeń (maxconn),
  • opcje związane z logowaniem informacji (log global, option httplog, option dontlognull),
  • opcje związane z nagłówkami HTTP (pl.wiki, en.wiki) w szczególności przydatną opcję option forwardfor pozwalającą przekazać adres IP klienta ukrytego za serwerem HAProxy w nagłówku X-Forwarded-For (en.wiki),
  • opcje związane z maksymalnym czasem oczekiwania zarówno na żądanie wysyłane przez klienta jak również na odpowiedź wysyłaną przez serwery (timeout ...),

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
# timeout check
# timeout client
# timeout clitimeout          (deprecated)
# timeout connect
# timeout contimeout          (deprecated)
# timeout http-keep-alive
# timeout http-request
# timeout queue
# timeout server
# timeout srvtimeout          (deprecated)
# timeout tarpit
# transparent                 (deprecated)
defaults
	log     global
	# Set the running mode or protocol of the instance
	# tcp    - The instance will work in pure TCP mode.
	# http   - The instance will work in HTTP mode.
	# health - The instance will work in "health" mode. It will just reply "OK" to incoming connections and close the connection. Nothing will be logged.
	mode    http
	# Enable logging of HTTP request, session state and timers
	option  httplog
	# Enable or disable logging of null connections
	option  dontlognull
	# If "option http-server-close" is enabled at the same time as "httpclose",
	#it basically achieves the same result as "option forceclose".
	option  httpclose
	option  http-server-close
	# Enable insertion of the X-Forwarded-For header to requests sent to servers
	option  forwardfor except 127.0.0.0/8
	# Enable or disable session redistribution in case of connection failure
	# Specifying "option redispatch" will allow the proxy to break their
	# persistence and redistribute them to a working server
	option  redispatch
	# Set the number of retries to perform on a server after a connection failure
	retries 3
	# Fix the maximum number of concurrent connections on a frontend
	# Proxies will stop accepting connections when this limit is reached
	maxconn 1024
	# Set the maximum time to wait for a connection attempt to a server to succeed
	timeout connect         30s
	# Set the maximum inactivity time on the server side
	timeout server         300s
	# Set additional check timeout, but only after a connection has been already established
	timeout check           10s
	# Set the maximum allowed time to wait for a complete HTTP request
	timeout http-request    30s
	# Set the maximum inactivity time on the client side
	timeout client          30s
	# Set the maximum allowed time to wait for a new HTTP request to appear
	timeout http-keep-alive 10s
	# Set the maximum time to wait in the queue for a connection slot to be free
	timeout queue           10s
	# Return an HTTP redirection to a URL instead of errors generated by HAProxy
	# errorloc < code > <url>
	# Return a file contents instead of errors generated by HAProxy
	# errorfile < code > <file>



#top frontend


W przedostatniej kolejności po zainstalowaniu HAProxy należy dodać odpowiednie reguły w sekcji frontend. Niniejsza sekcja jest pewnego rodzaju odpowiednikiem Virtualnych Hostów (en.wiki) konfigurowanych w serwerach WWW. Korzystając z odpowiednich reguł sprawdzających dane w nagłówku HTTP (reqisetbe lub acl wraz z use_backend) żądanie może zostać przesłane do obsługi przez określone serwery WWW, które zostały do tego celu wyznaczone.

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend public
	bind        0.0.0.0:80
	monitor-uri /monitoruri
	
	acl a_cen06x64_php hdr(host) -i cen06x64.xen.wbcd.pl
	use_backend dynamicphp if a_cen06x64_app
	#reqisetbe   ^Host:\ cen06x64.xen.wbcd.pl        host_cen06x64_app
	acl a_cen06x64_www hdr(host) -i static.cen06x64.xen.wbcd.pl
	use_backend host_cen06x64_www if a_cen06x64_www
	#reqisetbe   ^Host:\ static.cen06x64.xen.wbcd.pl host_cen06x64_www
	
	acl a_praca_app hdr(host) -i praca.app.wbcd.pl
	use_backend host_cen06x64_app if a_praca_app
	#reqisetbe   ^Host:\ praca.app.wbcd.pl           host_cen06x64_app
	acl a_praca_www hdr(host) -i static.praca.app.wbcd.pl
	use_backend host_cen06x64_www if a_praca_www
	#reqisetbe   ^Host:\ static.praca.app.wbcd.pl           host_cen06x64_www
	
	default_backend host_cen06x64_app



#top backend


W ostatniej kolejności po zainstalowaniu HAProxy należy dodać odpowiednie reguły w sekcji backend. Niniejsza sekcja stanowi swego rodzaju listę serwerów odpowiedzialnych za obsługę tego samego typu żądań (server). W niniejszej sekcji określana jest metoda według której rozkładany jest ruch do serwerów WWW (balance). W przypadku stosowania jako metody rozkładania ruchu roundrobin w opcji server (Server and default-server options) można również określić "wagę" serwerów WWW, dzięki czemu ilość ruchu kierowanego do danego serwera WWW w porównaniu do innych może być zależna od wydajności danego serwera WWW. Co również istotne w przypadku serwerów aplikacyjnych w sekcji backend możliwe jest włączenie StickySessions (blog.haproxy.com, pl.wiki, en.wiki), czyli umieszczanie w nagłówkach żądania/odpowiedzi informacji pozwalających ponowne (powracające) żądanie przekierować do tego samego serwera (w przypadku przekierowania żądania do innego serwera może okazać się konieczność ponownego logowania w przypadku braku mechanizmu współdzielenia sesji pomiędzy serwerami).

# The dynamic backend for app
backend host_cen06x64_app
	# Define the load balancing algorithm to be used in a backend
	balance     roundrobin
	# Enable HTTP protocol to check on the servers health
	# By default, server health checks only consist in trying to establish a TCP connection
	# When "option httpchk" is specified, a complete HTTP request is sent
	# once the TCP connection is established, and responses 2xx and 3xx are considered valid,
	# while all other ones indicate a server failure, including the lack of any response
	option      httpchk HEAD /globals.php
	cookie      DYNSRV insert indirect nocache
	server      dynsrv1 10.41.0.58:81 check inter 10000

# The static backend backend for /www
backend host_cen06x64_www
	# Define the load balancing algorithm to be used in a backend
	balance     roundrobin
	# Enable HTTP protocol to check on the servers health
	# By default, server health checks only consist in trying to establish a TCP connection
	# When "option httpchk" is specified, a complete HTTP request is sent
	# once the TCP connection is established, and responses 2xx and 3xx are considered valid,
	# while all other ones indicate a server failure, including the lack of any response
	option      httpchk HEAD /index.html
	server      statsrv1 10.41.0.58:82 check inter 10000

























Zmodyfikowany ostatnio: 2015/10/07 12:37:07 (8 lat temu), textsize: 19,0 kB, htmlsize: 24,8 kB

Zapraszam do komentowania, zgłaszania sugestii, propozycji, własnych przykładów, ...
Dodaj komentarzKomentarze użytkowników