Instalación do equilibrador de carga HAProxy en CentOS

A tradución do artigo preparouse na véspera do comezo do curso "Administrador de Linux. Virtualización e clustering"

Instalación do equilibrador de carga HAProxy en CentOS

O balance de carga é unha solución común para escalar horizontalmente as aplicacións web en varios hosts ao tempo que ofrece aos usuarios un único punto de acceso ao servizo. HAProxy é un dos programas de balance de carga de código aberto máis populares que tamén ofrece alta dispoñibilidade e funcionalidade de proxy.

HAProxy esfórzase por optimizar o uso dos recursos, maximizar o rendemento, minimizar o tempo de resposta e evitar a sobrecarga de calquera recurso individual. Pódese instalar nunha variedade de distribucións de Linux, como CentOS 8, no que nos centraremos nesta guía, así como en sistemas. Debian 8 и Ubuntu 16.

Instalación do equilibrador de carga HAProxy en CentOS

HAProxy é especialmente axeitado para sitios web con tráfico moi elevado e, polo tanto, úsase a miúdo para mellorar a fiabilidade e o rendemento das configuracións de servizos web multiservidor. Esta guía describe os pasos para configurar HAProxy como equilibrador de carga nun servidor de nube CentOS 8, que despois encamiña o tráfico aos teus servidores web.

Como requisito previo para obter os mellores resultados, debes ter polo menos dous servidores web e un servidor de equilibrio de carga. Os servidores web deben executar polo menos un servizo web básico como nginx ou httpd para probar o equilibrio de carga entre eles.

Instalación de HAProxy en CentOS 8

Debido a que HAProxy é unha aplicación de código aberto en rápida evolución, a distribución dispoñible para vostede nos repositorios estándar de CentOS pode non ser a versión máis recente. Para coñecer a versión actual, execute o seguinte comando:

sudo yum info haproxy

HAProxy sempre ofrece tres versións estables para escoller: as dúas versións compatibles máis recentes e unha terceira versión máis antiga que aínda está recibindo actualizacións críticas. Sempre pode comprobar a versión estable máis recente que aparece no sitio web de HAProxy e despois decidir con que versión quere traballar.

Nesta guía, instalaremos a última versión estable 2.0, que aínda non estaba dispoñible nos repositorios estándar no momento de escribir a guía. Deberá instalalo desde a fonte orixinal. Pero primeiro, comprobe se cumpriu as condicións necesarias para descargar e compilar o programa.

sudo yum install gcc pcre-devel tar make -y

Descarga o código fonte usando o seguinte comando. Podes comprobar se hai unha versión máis recente dispoñible en Páxina de descarga de HAProxy.

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

Unha vez completada a descarga, extrae os ficheiros usando o seguinte comando:

tar xzvf ~/haproxy.tar.gz -C ~/

Vaia ao directorio de orixe descomprimido:

cd ~/haproxy-2.0.7

A continuación, compile o programa para o seu sistema:

make TARGET=linux-glibc

E, finalmente, instala o propio HAProxy:

sudo make install

HAProxy agora está instalado, pero require algunhas manipulacións adicionais para que funcione. Continuemos configurando o software e os servizos a continuación.

Configurando HAProxy para o seu servidor

Agora engade os seguintes directorios e ficheiros de estatísticas para as entradas de HAProxy:

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy 
sudo touch /var/lib/haproxy/stats

Cree unha ligazón simbólica para os binarios para que poida executar comandos HAProxy como usuario normal:

sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

Se desexa engadir un proxy ao seu sistema como servizo, copie o ficheiro haproxy.init dos exemplos no seu directorio /etc/init.d. Edite os permisos do ficheiro para que se execute o script e, a continuación, reinicie o daemon systemd:

sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload

Tamén debes permitir que o servizo se reinicie automaticamente cando se inicie o sistema:

sudo chkconfig haproxy on

Por comodidade, tamén se recomenda engadir un novo usuario para executar HAProxy:

sudo useradd -r haproxy

Despois diso, pode comprobar o número de versión instalada de novo usando o seguinte comando:

haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/

No noso caso, a versión debería ser 2.0.7, como se mostra no exemplo de saída anterior.

Finalmente, o firewall predeterminado en CentOS 8 é bastante restritivo para este proxecto. Use os seguintes comandos para permitir os servizos necesarios e restablecer o firewall:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

Configuración do equilibrador de carga

Configurar HAProxy é un proceso bastante sinxelo. Esencialmente, todo o que cómpre facer é dicirlle a HAProxy que conexións debería escoitar e onde debería transmitilas.

Isto faise creando un ficheiro de configuración /etc/haproxy/haproxy.cfg con axustes de definición. Podes ler sobre as opcións de configuración de HAProxy na páxina de documentaciónse queres saber máis sobre el.

Equilibrio de carga na capa de transporte (capa 4)

Imos comezar coa configuración básica. Crea un novo ficheiro de configuración, por exemplo usando vi co seguinte comando:

sudo vi /etc/haproxy/haproxy.cfg

Engade as seguintes seccións ao ficheiro. Substituír nome_servidor como debería chamar aos seus servidores na páxina de estatísticas, e ip_privada — enderezos IP privados dos servidores aos que quere dirixir o tráfico web. Podes comprobar os enderezos IP privados no panel de control de UpCloud e na pestana Rede privada no menú Rede.

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon

defaults
   log global
   mode http
   option httplog
   option dontlognull
   timeout connect 5000
   timeout client 50000
   timeout server 50000

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

Isto define un equilibrador de carga da capa de transporte (capa 4) chamado externamente http_front escoitando no porto 80, que despois reenvía o tráfico a un backend predeterminado chamado http_back. Estatísticas adicionais /haproxy?stats conecta a páxina de estatísticas co enderezo especificado.

Varios algoritmos de equilibrio de carga.

Especificar servidores na sección de backend permite que HAProxy use estes servidores para equilibrar a carga segundo un algoritmo round-robin cando sexa posible.

Os algoritmos de equilibrio úsanse para determinar a que servidor do backend se pasa cada conexión. Aquí están algunhas das opcións útiles:

  • Roundrobin: Cada servidor utilízase á súa vez segundo o seu peso. Este é o algoritmo máis suave e xusto cando o tempo de procesamento dos servidores segue distribuído uniformemente. Este algoritmo é dinámico, o que permite que o peso do servidor se axuste sobre a marcha.
  • Leastconn: selecciónase o servidor con menos conexións. O Round robin realízase entre servidores coa mesma carga. Recoméndase utilizar este algoritmo para sesións longas como LDAP, SQL, TSE, etc., pero non é moi axeitado para sesións curtas como HTTP.
  • Primeira: O primeiro servidor con ranuras de conexión dispoñibles recibe a conexión. Os servidores selecciónanse dende o ID numérico máis baixo ata o máis alto, que por defecto é a posición do servidor na granxa. Unha vez que un servidor chega a maxconn, utilízase o seguinte.
  • fonte: O enderezo IP de orixe divídese polo hash e divídese polo peso total dos servidores en execución para determinar que servidor recibirá a solicitude. Deste xeito, o mesmo enderezo IP do cliente irá sempre ao mesmo servidor, mentres que os servidores seguen sendo os mesmos.

Configurar o equilibrio de carga a nivel de aplicación (capa 7)

Outra opción dispoñible é configurar un equilibrador de carga para que se execute na capa da aplicación (capa 7), o que é útil cando partes da súa aplicación web se atopan en hosts diferentes. Isto pódese conseguir limitando a transmisión da conexión, por exemplo por URL.

Abra o ficheiro de configuración de HAProxy usando un editor de texto:

sudo vi /etc/haproxy/haproxy.cfg

A continuación, configure os segmentos frontend e backend segundo o seguinte exemplo:

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   acl url_blog path_beg /blog
   use_backend blog_back if url_blog
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

backend blog_back
   server server_name3 private_ip3:80 check

O frontend declara unha regra ACL chamada url_blog que se aplica a todas as conexións con rutas que comezan por /blog. Use_backend especifica que as conexións que coincidan coa condición url_blog deben ser atendidas por un backend chamado blog_back e que todas as demais solicitudes son xestionadas polo backend predeterminado.

No lado do backend, a configuración configura dous grupos de servidores: http_back, como antes, e un novo chamado blog_back, que xestiona as conexións a example.com/blog.

Despois de cambiar a configuración, garde o ficheiro e reinicie HAProxy usando o seguinte comando:

sudo systemctl restart haproxy

Se recibes avisos ou mensaxes de erro durante o inicio, comprobe a túa configuración e asegúrate de ter creados todos os ficheiros e cartafoles necesarios e, a continuación, tenta reiniciar de novo.

Probando a configuración

Unha vez que HAProxy estea configurado e en execución, abra o enderezo IP público do servidor do equilibrador de carga nun navegador e comprobe se está conectado correctamente ao backend. O parámetro stats uri na configuración crea unha páxina de estatísticas no enderezo especificado.

http://load_balancer_public_ip/haproxy?stats

Cando cargas a páxina de estatísticas, se todos os teus servidores aparecen en verde, a configuración foi correcta.

Instalación do equilibrador de carga HAProxy en CentOS

A páxina de estatísticas contén información útil para rastrexar os seus servidores web, incluíndo o tempo de subida/desactivación e o número de sesións. Se o servidor está marcado en vermello, asegúrate de que o servidor está acendido e de que podes facer ping desde a máquina do equilibrador de carga.

Se o teu equilibrador de carga non responde, asegúrate de que as conexións HTTP non estean bloqueadas por un firewall. Tamén asegúrese de que HAProxy estea funcionando usando o seguinte comando:

sudo systemctl status haproxy

Protexer a páxina de estatísticas cun contrasinal

Non obstante, se a páxina de estatísticas aparece simplemente no front end, entón está aberta para que todos a vexan, o que pode non ser unha boa idea. Pola contra, pode asignarlle un número de porto personalizado engadindo o seguinte exemplo ao final do ficheiro haproxy.cfg. Substituír nome de usuario и contrasinal por algo seguro:

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

Despois de engadir un novo grupo de oíntes, elimina a ligazón uri das estatísticas antigas do grupo frontend. Cando remate, garde o ficheiro e reinicie HAProxy.

sudo systemctl restart haproxy

A continuación, abra de novo o equilibrador de carga co novo número de porto e inicie sesión co nome de usuario e contrasinal que especificou no ficheiro de configuración.

http://load_balancer_public_ip:8181

Asegúrate de que todos os teus servidores seguen mostrando verde e despois abre só a IP do equilibrador de carga sen ningún número de porto no teu navegador.

http://load_balancer_public_ip/

Se tes polo menos unha variedade de páxinas de destino nos teus servidores back-end, notarás que cada vez que recargas a páxina recibes unha resposta dun host diferente. Podes probar diferentes algoritmos de equilibrio na sección de configuración ou consultar documentación completa.

Conclusión: HAProxy Load Balancer

Parabéns por configurar correctamente o equilibrador de carga HAProxy. Incluso cunha configuración básica de equilibrio de carga, pode mellorar significativamente o rendemento e a dispoñibilidade da súa aplicación web. Esta guía é só unha introdución ao equilibrio de carga con HAProxy, que é capaz de moito máis do que se pode cubrir na guía de configuración rápida. Recomendamos probar con diferentes configuracións usando extensa documentación, dispoñible para HAProxy e, a continuación, comece a planificar o equilibrio de carga para o seu contorno de produción.

Ao usar varios hosts para protexer o teu servizo web con espazo libre, o propio equilibrador de carga aínda pode presentar un punto de falla. Podes mellorar aínda máis a alta dispoñibilidade instalando unha IP flotante entre varios equilibradores de carga. Podes saber máis sobre isto no noso artigo sobre enderezos IP flotantes en UpCloud.

Máis sobre o curso "Administrador de Linux. Virtualización e clustering"***

Fonte: www.habr.com

Engadir un comentario