<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Alta_dispo%C3%B1ibilidade_en_servidores_Web</id>
	<title>Alta dispoñibilidade en servidores Web - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Alta_dispo%C3%B1ibilidade_en_servidores_Web"/>
	<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Alta_dispo%C3%B1ibilidade_en_servidores_Web&amp;action=history"/>
	<updated>2026-10-26T02:54:36Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://manuais.iessanclemente.net/index.php?title=Alta_dispo%C3%B1ibilidade_en_servidores_Web&amp;diff=69573&amp;oldid=prev</id>
		<title>Bruno: /* Instalación HA Proxy */</title>
		<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Alta_dispo%C3%B1ibilidade_en_servidores_Web&amp;diff=69573&amp;oldid=prev"/>
		<updated>2021-02-18T11:59:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Instalación HA Proxy&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Sempre que teñamos un servidor web replicado en varios equipos, podemos engadir varios rexistros tipo A apuntando aos diferentes enderezos IP, para que poidan respostar as peticións a unha URL referida a un host virtual.&lt;br /&gt;
&lt;br /&gt;
Exemplo:&lt;br /&gt;
&lt;br /&gt;
:Podemos ter o host virtual &amp;quot;exemplo.com&amp;quot; replicado nos equipos con enderezo 192.168.0.100 e 192.168.0.101. Se configuramos no servidor DNS dous rexistros tipo A&lt;br /&gt;
:{|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 sitio.lan A 192.168.0.100&lt;br /&gt;
 sitio.lan A 192.168.0.101&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
:conseguiremos que as peticións HTTP sexan atendidas por cadanseu equipo de forma alternada.  Se queremos, que as peticións estén balanceadas nun 50%, podemos engadir a maiores rexistros SRV&lt;br /&gt;
:{|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 sitio.lan A 192.168.0.100&lt;br /&gt;
 sitio.lan A 192.168.0.101&lt;br /&gt;
_http._tcp SRV 10 60 80 sitio.lan&lt;br /&gt;
_http._tcp SRV 10 40 80 sitio.lan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pero, nunca conseguiremos que se un equipo está caido, os demáis asuman as peticións HTTP, senón que os clientes seguirán esperando a que este responda.&lt;br /&gt;
&lt;br /&gt;
Para solucionar este tipo de problemas, idearonse os &amp;#039;&amp;#039;&amp;#039;Proxy&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==Proxy==&lt;br /&gt;
Un &amp;#039;&amp;#039;Proxy&amp;#039;&amp;#039; é unha porta de acceso para os usuarios, que actúa de intermediario entre estes e os servidores web que atenden as peticións HTTP. Os usuarios configuran o seu proxy nos seus axustes do navegador, e todas as peticións de HTTP son remitidas a ese proxy que se encargará de solicitar a petición HTTP ao servidor web correspondente, e retransmitirlla ao usuario. Podemos usar proxies para:&lt;br /&gt;
*acelerar o acceso a Web, facendo caché de páxinas, así as páxinas moi concorridas non teñen que ser descargadas de todas as veces.&lt;br /&gt;
*habilitar acceso controlado a web detrás dun firewall&lt;br /&gt;
*filtrar ou transformar condito web&lt;br /&gt;
&lt;br /&gt;
Un &amp;#039;&amp;#039;&amp;#039;Proxy inverso&amp;#039;&amp;#039;&amp;#039; é unha porta de acceso para os servidores, e permite  que un servidor web provea contido para outro de forma transparente. Mediante proxies inversos, podemos aumentar o rendemento web, facendo caché de peticións HTTP, e tamén para permitir replicara servidores web facendo balanceo de carga, ou protexendo a outros que poden ser vulnerables. Pero o uso máis habitual é habilitar acceso controloado desde a Web a servidores que están detrás dun firewall.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Reverse proxy.png|500px|centro|Proxy inverso]]&lt;br /&gt;
&lt;br /&gt;
==Proxies (inversos) con Apache==&lt;br /&gt;
Os módulos de Apache que permiten o uso de proxies inversos, son:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[http://httpd.apache.org/docs/current/mod/mod_proxy.html mod_proxy]&amp;#039;&amp;#039;&amp;#039; para todo tipo de proxies (módulo base).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[http://httpd.apache.org/docs/current/mod/mod_proxy_http.html mod_proxy_http]&amp;#039;&amp;#039;&amp;#039; para proxies inversos co protocolo HTTP (require que &amp;#039;&amp;#039;mod_proxy&amp;#039;&amp;#039; esté activo.&lt;br /&gt;
&lt;br /&gt;
Unha vez activados os dous módulos, xa podemos empregar as directivas &amp;#039;&amp;#039;&amp;#039;[http://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypass ProxyPass]&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;[http://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypassreverse ProxyPassReverse]&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Vémolo cun exemplo:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
ServerName www.example.com&lt;br /&gt;
ProxyRequests Off&lt;br /&gt;
ProxyPreserveHost On&lt;br /&gt;
ProxyPass / http://foo.example.com/  #Ou enderezo IP&lt;br /&gt;
ProxyPassReverse / http://foo.example.com/ #Ou enderezo IP&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Neste caso, sempre que accedamos a &amp;#039;&amp;#039;&amp;lt;nowiki&amp;gt;http://www.example.com/&amp;lt;/nowiki&amp;gt;&amp;#039;&amp;#039; accederemos realmente a &amp;#039;&amp;#039;&amp;lt;nowiki&amp;gt;http://foo.example.com/&amp;lt;/nowiki&amp;gt;&amp;#039;&amp;#039;&lt;br /&gt;
e no exemplo&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
ServerName www.example.com&lt;br /&gt;
ProxyRequests Off&lt;br /&gt;
ProxyPreserveHost On&lt;br /&gt;
ProxyPass /foo http://foo.example.com/bar&lt;br /&gt;
ProxyPassReverse /foo http://foo.example.com/bar&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
sempre que accedamos a &amp;#039;&amp;#039;&amp;lt;nowiki&amp;gt;http://www.example.com/foo&amp;lt;/nowiki&amp;gt;&amp;#039;&amp;#039; accederemos realmente a &amp;#039;&amp;#039;&amp;lt;nowiki&amp;gt;http://foo.example.com/bar&amp;lt;/nowiki&amp;gt;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A directiva &amp;#039;&amp;#039;ProxyRequests Off&amp;#039;&amp;#039; evita que o front-end sea empregado como proxy, é dicir, que os usuarios poidan saltar ao front-end y de ahí a cualquera outro enderezo. É moi importante deixalo deshabilitado para evitar problemas de seguridade ou incluso legais.&lt;br /&gt;
&lt;br /&gt;
A directiva &amp;#039;&amp;#039;ProxyPreserveHost On&amp;#039;&amp;#039; permite que o salto do servidor de front-end ao de back-end sea transparente para o usuario. Se non estivera habilitada, o usuario dirixiríase a &amp;lt;nowiki&amp;gt;http://www.example.com&amp;lt;/nowiki&amp;gt; pero inmediatamente vería como o enderezo cambia a &amp;lt;nowiki&amp;gt;http://foo.example.com&amp;lt;/nowiki&amp;gt;. Ademáis, como neste suposto o servidor de back-end non é visible desde Internet o usuario vería un erro.&lt;br /&gt;
&lt;br /&gt;
Por último, as directivas &amp;#039;&amp;#039;ProxyPass&amp;#039;&amp;#039; e &amp;#039;&amp;#039;ProxyPassReverse&amp;#039;&amp;#039; xestionan o salto e a volta do servidor de front-end ao de back-end.&lt;br /&gt;
&lt;br /&gt;
===Proxy apache balanceado===&lt;br /&gt;
Se ademáis queremos que o proxy faga balanceo de carga entre varios servidores, entón teremos que habilitar o módulo &amp;#039;&amp;#039;&amp;#039;[http://httpd.apache.org/docs/current/mod/mod_proxy_balancer.html mod_proxy_balancer]&amp;#039;&amp;#039;&amp;#039; e tamén algún balanceador como pode ser &amp;#039;&amp;#039;&amp;#039;[http://httpd.apache.org/docs/current/mod/mod_lbmethod_byrequests.html mod_lbmethod_byrequests]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
O seguinte exemplo, amosa un proxy balanceado&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
ServerName www.example.com&lt;br /&gt;
ProxyRequests Off&lt;br /&gt;
ProxyPreserveHost On&lt;br /&gt;
&amp;lt;Proxy balancer://mycluster&amp;gt;&lt;br /&gt;
    BalancerMember http://eq1.example.com  &lt;br /&gt;
    #Ou enderezo IP&lt;br /&gt;
    BalancerMember http://eq2.example.com  &lt;br /&gt;
    #Ou enderezo IP&lt;br /&gt;
&amp;lt;/Proxy&amp;gt;&lt;br /&gt;
ProxyPass / balancer://mycluster/&lt;br /&gt;
ProxyPassReverse / balancer://mycluster/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Neste caso, sempre que se acceda a example.com, as peticións serán repartidas entre eq1.example.com e eq2.example.com&lt;br /&gt;
&lt;br /&gt;
Existen multitude máis de configuracións, para traballar con sesións e máis características. Recoméndase consultar a documentación oficial.&lt;br /&gt;
&lt;br /&gt;
==Varnish==&lt;br /&gt;
Varnish é un proxy HTTP inverso, tamén coñecido como acelerador web ou acelerador HTTP. Almacena ficheiros e fragmentos de arquivos na memoria, permitindo que poidan ser servidos moi rápido. &lt;br /&gt;
&lt;br /&gt;
Pero a súa vez tamén é flexible, e sinxelo de configurar. É código aberto e software libre, con desenrolo público e licencia BSD.&lt;br /&gt;
&lt;br /&gt;
O único punto negativo é que non soporta HTTP&lt;br /&gt;
&lt;br /&gt;
===Instalación===&lt;br /&gt;
Varnish ven de serie nos repositorios de Ubuntu/Debian, pero a versión que se instala está un pouco desactualizada. Imos instalalo a partires dos repositorios.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Debian&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install debian-archive-keyring curl gnupg apt-transport-https &lt;br /&gt;
curl -L https://packagecloud.io/varnishcache/varnish60lts/gpgkey | apt-key add -&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Debian&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;#039;deb https://packagecloud.io/varnishcache/varnish60lts/debian/ buster main&amp;#039; | tee /etc/apt/sources.list.d/varnish.list &amp;gt;/dev/null&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install varnish&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ubuntu 20.04&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
echo &amp;#039;deb https://packagecloud.io/varnishcache/varnish60lts/ubuntu/ focal main&amp;#039; | tee /etc/apt/sources.list.d/varnish.list &amp;gt;/dev/null&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install varnish&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Configuración===&lt;br /&gt;
Varnish pode ser configurado para traballar en modo comando, ou mediante ficheiros de configuración (Ficheiros VCL). Sempre que se faga un cambio, é necesario reiniciar o servidor.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Equipos que funcionan con &amp;#039;&amp;#039;init.d&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service varnish restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Equipos que funcionan con &amp;#039;&amp;#039;systemd&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl restart varnish.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Os ficheiros de configuración principais son:&lt;br /&gt;
*&amp;#039;&amp;#039;/etc/varnish/default.vcl&amp;#039;&amp;#039;: Ficheiro VCL principal. Contén toda a configuración do servidor.&lt;br /&gt;
&lt;br /&gt;
Na configuración do ficheiro VCL, temos xa pre-configurado un servidor proxy, cara o propio equipo local, no porto 8080. Na terminoloxía varnish, un &amp;#039;&amp;#039;&amp;#039;backend&amp;#039;&amp;#039;&amp;#039; é un equipo cun servidor web do que este servidor varnish é proxy inverso.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
backend default {&lt;br /&gt;
    .host = &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    .port = &amp;quot;8080&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Con esto, teremos definido o enderezo IP e o porto do equipo remoto. Falta o porto de escoita de varnish, que definimos de diferentes maneiras según o equipo funcione con &amp;#039;&amp;#039;init.d&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;systemd&amp;#039;&amp;#039; en &amp;#039;&amp;#039;/etc/default/varnish&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;/lib/systemd/system/varnish.service&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Para &amp;#039;&amp;#039;init.d&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Debian/Ubuntu (legacy)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/etc/default/varnish&lt;br /&gt;
DAEMON_OPTS=&amp;quot;-a :80 \&lt;br /&gt;
             -T localhost:6082 \&lt;br /&gt;
             -f /etc/varnish/default.vcl \&lt;br /&gt;
             -S /etc/varnish/secret \&lt;br /&gt;
             -s malloc,256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para &amp;#039;&amp;#039;systemd&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;Debian (v8+) / Ubuntu (v15.04+)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;25,26&amp;quot;&amp;gt;&lt;br /&gt;
#/lib/systemd/system/varnish.service&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Varnish Cache, a high-performance HTTP accelerator&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
&lt;br /&gt;
# Maximum number of open files (for ulimit -n)&lt;br /&gt;
LimitNOFILE=131072&lt;br /&gt;
&lt;br /&gt;
# Locked shared memory (for ulimit -l)&lt;br /&gt;
# Default log size is 82MB + header&lt;br /&gt;
LimitMEMLOCK=82000&lt;br /&gt;
&lt;br /&gt;
# On systemd &amp;gt;= 228 enable this to avoid &amp;quot;fork failed&amp;quot; on reload.&lt;br /&gt;
#TasksMax=infinity&lt;br /&gt;
&lt;br /&gt;
# Maximum size of the corefile.&lt;br /&gt;
LimitCORE=infinity&lt;br /&gt;
&lt;br /&gt;
# Set WARMUP_TIME to force a delay in reload-vcl between vcl.load and vcl.use&lt;br /&gt;
# This is useful when backend probe definitions need some time before declaring&lt;br /&gt;
# configured backends healthy, to avoid routing traffic to a non-healthy backend.&lt;br /&gt;
#WARMUP_TIME=0&lt;br /&gt;
&lt;br /&gt;
ExecStart=/usr/sbin/varnishd -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m&lt;br /&gt;
ExecReload=/usr/share/varnish/reload-vcl&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
No caso de que o equipo traballe con systemd, hai que activar o servizo para que arranque ao iniciar o equipo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl restart varnish.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Multiple Host virtuais===&lt;br /&gt;
Tamén podemos definir varios backend&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
#/etc/varnish/default.vcl&lt;br /&gt;
backend foo {&lt;br /&gt;
    .host = &amp;quot;192.168.0.100&amp;quot;;&lt;br /&gt;
    .port = &amp;quot;8080&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
backend bar {&lt;br /&gt;
    .host = &amp;quot;192.168.0.101&amp;quot;;&lt;br /&gt;
    .port = &amp;quot;8080&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.host ~ &amp;quot;foo.com&amp;quot;) {&lt;br /&gt;
        set req.backend_hint = foo;&lt;br /&gt;
    } elsif (req.http.host ~ &amp;quot;bar.com&amp;quot;) {&lt;br /&gt;
        set req.backend_hint = bar;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Balanceo de carga===&lt;br /&gt;
Tamén podemos facer balanceo de carga&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
#/etc/varnish/default.vcl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
backend server1 {&lt;br /&gt;
    .host = &amp;quot;server1.example.com&amp;quot;;&lt;br /&gt;
    .probe = {&lt;br /&gt;
        .url = &amp;quot;/test.html&amp;quot;;&lt;br /&gt;
        .timeout = 1s;&lt;br /&gt;
        .interval = 5s;&lt;br /&gt;
        .window = 5;&lt;br /&gt;
        .threshold = 3;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
backend server2 {&lt;br /&gt;
    .host = &amp;quot;server2.example.com&amp;quot;;&lt;br /&gt;
    .probe = {&lt;br /&gt;
        .url = &amp;quot;/test.html&amp;quot;;&lt;br /&gt;
        .timeout = 1s;&lt;br /&gt;
        .interval = 5s;&lt;br /&gt;
        .window = 5;&lt;br /&gt;
        .threshold = 3;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
import directors;&lt;br /&gt;
sub vcl_init {&lt;br /&gt;
    new vdir = directors.round_robin();&lt;br /&gt;
    vdir.add_backend(server1);&lt;br /&gt;
    vdir.add_backend(server2);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Se so temos un backend default, asignamoslle todas as peticións&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    # send all traffic to the bar director:&lt;br /&gt;
    set req.backend_hint = vdir.backend();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E se temos máis dun &amp;quot;Virtual Host&amp;quot;, asignamoslle o backend correcto dependendo do nome do servidor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; &amp;gt;&lt;br /&gt;
sub vcl_recv {&lt;br /&gt;
    if (req.http.host ~ &amp;quot;foo.com&amp;quot;) {&lt;br /&gt;
        set req.backend_hint = foo;&lt;br /&gt;
    } elsif (req.http.host ~ &amp;quot;bar.com&amp;quot;) {&lt;br /&gt;
        set req.backend_hint = vdir.backend();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neste exemplo, conseguimos que a carga se reparta entre os dous servidores seguindo o algoritmo round-robin, anque debido a que garda os datos na caché, é probable que non poidamos testear como reparte as conexións. Simplemente veremos que atende as peticións pero que por un longo periodo de tempo, non lle fai peticións aos servidores &amp;quot;backend&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Se queremos eliminar a opción de manexo de sesións &amp;quot;&amp;#039;&amp;#039;pegañentas&amp;#039;&amp;#039;&amp;quot; podemos facelo seguindo esta [https://info.varnish-software.com/blog/sticky-session-with-cookies guía]:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podemos ver o estado de &amp;quot;saúde&amp;quot; dos servidores backend co comando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; &amp;gt;&lt;br /&gt;
varnishlog -g raw&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Nginx==&lt;br /&gt;
Nginx é un servidor HTTP caché lixeiro que tamén se pode empregar como proxy inverso. O máis usual é configuralo como proxy inverso de HTTPS.&lt;br /&gt;
&lt;br /&gt;
Nginx é o mellor servidor web para servir arquivos estáticos, e ademais faio tendo un consumo de memoria considerablemente menor que Apache, dado que non precisa crear un proceso ou fío novo para cada pedido que lle chega, e tampouco necesitar analizar todos os directorios dun sitio buscando arquivos &amp;#039;&amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039;&amp;#039;, xa que carga as regras de Rewrite directamente desde a súa configuración.&lt;br /&gt;
&lt;br /&gt;
O primeiro paso é instalar o nginx&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O seguinte paso será cambiar os portos de escoita de Apache&lt;br /&gt;
&lt;br /&gt;
E por último, cremos un novo virtual host para nginx. Por exemplo &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-available/exemplo.com&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/etc/nginx/sites-available/exemplo.com&lt;br /&gt;
server {&lt;br /&gt;
    listen 80;&lt;br /&gt;
    server_name  www.exemplo.com;&lt;br /&gt;
    location / {       &lt;br /&gt;
        proxy_set_header Host $host;&lt;br /&gt;
        proxy_set_header X-Forwarded-Host $host;&lt;br /&gt;
        proxy_set_header X-Forwarded-Server $host;&lt;br /&gt;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
        proxy_pass http://eq1.exemplo.com:8080;  #Tamen podemos poñer o enderezo IP&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tamén o podemos facer con HTTPS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/etc/nginx/sites-available/exemplo.com&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
&lt;br /&gt;
    listen 443 default_server;&lt;br /&gt;
    server_name www.example.com;&lt;br /&gt;
&lt;br /&gt;
    ssl on;&lt;br /&gt;
    ssl_certificate /usr/local/nginx/conf/server.pem;&lt;br /&gt;
    ssl_certificate_key /usr/local/nginx/conf/server.key;&lt;br /&gt;
    ssl_session_cache shared:SSL:10m;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_set_header Host $host;&lt;br /&gt;
        proxy_set_header X-Forwarded-Host $host;&lt;br /&gt;
        proxy_set_header X-Forwarded-Server $host;&lt;br /&gt;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
        proxy_pass http://eq1.exemplo.com:8080;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Balanceador de carga===&lt;br /&gt;
Se queremos facer un balanceador de carga con &amp;#039;&amp;#039;nginx&amp;#039;&amp;#039; podemos empregar unha configuración similar á seguinte:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    upstream myapp1 {&lt;br /&gt;
        server srv1.example.com; #Tamen podemos poñer o enderezo IP directamente.&lt;br /&gt;
        server srv2.example.com;&lt;br /&gt;
        server srv3.example.com;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
&lt;br /&gt;
        location / {&lt;br /&gt;
            proxy_pass http://myapp1;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se non se expresa ningún método de balanceo, enténdese que por defecto se emprega &amp;#039;&amp;#039;round-robin&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Tamen podemos repartir a carga con pesos específicos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    upstream myapp1 {&lt;br /&gt;
        server srv1.example.com weight=3; &lt;br /&gt;
        server srv2.example.com;&lt;br /&gt;
        server srv3.example.com;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
asignala ao servidor con menos conexións&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    upstream myapp1 {&lt;br /&gt;
        least_conn;&lt;br /&gt;
        server srv1.example.com; &lt;br /&gt;
        server srv2.example.com;&lt;br /&gt;
        server srv3.example.com;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
E tamén podemos facer que as sesións sexan persistentes. Un mesmo cliente, namentres a sesión permaneza activa, sempre será atendido por un mesmo servidor backend. Enténdese que a sesión é deste xeito pegañenta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    upstream myapp1 {&lt;br /&gt;
        ip_hash;&lt;br /&gt;
        server srv1.example.com; &lt;br /&gt;
        server srv2.example.com;&lt;br /&gt;
        server srv3.example.com;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Balanceador de carga de nivel de aplicación HAProxy==&lt;br /&gt;
HAProxy é un balanceador de carga específico de HTTP e HTTPS de nivel de aplicación (L7), anque tamén pode traballar a nivel de rede (L4). Traballar a nivel de aplicación abre novas posibilidades ó poder acceder á capa máis próxima ó usuario. Centrándonos na web, poderemos tomar decisións en funcións das cabeceiras http dos paquetes, insertar cookies, marcar paquetes, ...; e polo tanto, poderemos reenviar as solicitudes dos clientes a diferentes servidores en base ó contido da petición do cliente. Un dos usos máis interesantes é a posibilidade de correr diferentes aplicacións en diferentes servidores reais pero accesibles baixo o mesmo nome de dominio e porto. Entre outras cousas,tamén permite establecer os certificados para HTTP no frontend, permitindo que as comunicacións entre cliente e proxy, vaian encrintadas con HTTPS e entre o frontend e backend mediante HTTP.&lt;br /&gt;
[[Archivo:HAproxy.png|200px|sinmarco|centro]]&lt;br /&gt;
===Instalación HA Proxy===&lt;br /&gt;
O primeiro paso para instalr o HAProxy é engadir os repositorios:&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Debian 10&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt update&lt;br /&gt;
apt install curl gnupg debian-archive-keyring apt-transport-https&lt;br /&gt;
&lt;br /&gt;
curl https://haproxy.debian.net/bernat.debian.org.gpg | apt-key add -&lt;br /&gt;
echo deb http://haproxy.debian.net buster-backports-2.3 main | \&lt;br /&gt;
      tee /etc/apt/sources.list.d/haproxy.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install haproxy=2.3.\*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ubuntu 18.04&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install software-properties-common&lt;br /&gt;
add-apt-repository ppa:vbernat/haproxy-2.1&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install haproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Configuración===&lt;br /&gt;
Teremos os ficheiros de configuración en &amp;#039;&amp;#039;/etc/haproxy/&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Para configurar HAproxy hai tres elementos fundamentais:&lt;br /&gt;
&lt;br /&gt;
*ACLs (Acces Control List): permiten comprobar algunha condición e en base ó resultado realizarase unha acción.&lt;br /&gt;
*Seccións Backend: definen un conxunto de servidores que recibirán as solicitudes reenviadas por HAProxy.&lt;br /&gt;
*Seccións Frontend: definen como se reenvían as solicitudes ós backends.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
frontend sitio_http&lt;br /&gt;
   bind 192.168.0.20:80&lt;br /&gt;
   acl host_www.proba.lan hdr(host) -i proba.lan&lt;br /&gt;
   acl host_www.proba.lan hdr(host) -i www.proba.lan&lt;br /&gt;
   use_backend proba_lan_back if host_www.proba.lan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
backend proba_lan_back&lt;br /&gt;
   balance roundrobin&lt;br /&gt;
   server server01 192.168.1.41:80 check&lt;br /&gt;
   server server02 192.168.1.42:80 check&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No caso de querer establecer pesos entre os distintos backend, introducímolos da seguinte maneira, tendo en conta que o peso é un número entre 0 e 256&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
frontend sitio_http&lt;br /&gt;
   bind 192.168.0.20:80&lt;br /&gt;
   acl host_www.proba.lan hdr(host) -i proba.lan&lt;br /&gt;
   acl host_www.proba.lan hdr(host) -i www.proba.lan&lt;br /&gt;
   use_backend proba_lan_back if host_www.proba.lan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
backend proba_lan_back&lt;br /&gt;
   balance roundrobin&lt;br /&gt;
   server server01 192.168.1.41:80 check weight 22  &lt;br /&gt;
   server server02 192.168.1.42:80 check weight 40 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unha vez feito isto e reinciado o servizo haproxy, aparecerán no ficheiro de log (&amp;#039;&amp;#039;/var/log/haproxy.log&amp;#039;&amp;#039;) todas as peticións que se fagan ao balanceador HAProxy.&lt;br /&gt;
&lt;br /&gt;
===HAProxy e HTTPS===&lt;br /&gt;
Para configurar HAProxy con HTTPS necesitaremos que o certificado do sitio e a chave privada estén no mesmo ficheiro con extensión &amp;#039;&amp;#039;&amp;#039;.pem&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
So queda engadir unha sección frontend para empregar HTTPS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
frontend sitio_https&lt;br /&gt;
   bind 192.168.57.40:443 ssl crt /etc/ssl/private/proba.lan.pem&lt;br /&gt;
   acl host_www.proba.lan hdr(host) -i proba.lan&lt;br /&gt;
   acl host_www.proba.lan hdr(host) -i www.proba.lan&lt;br /&gt;
   use_backend proba_lan_back if host_www.proba.lan&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Proxy e Balanceador a nivel de rede con Linux Virtual Server (LVS)==&lt;br /&gt;
O Linux Virtual Server é un servidor altamente scalable e altamente dispoñíbel construído formando un grupo de servidores reais ou cluster. A arquitectura do cluster de servidores é plenamente transparente para os usuarios finais. Estes, interactúan co sistema de cluster como se era só fose un so. Sirva coma exemplo a seguinte figura.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Linux Virtual Server.png|500px|centro|Linux virtual Server]]&lt;br /&gt;
&lt;br /&gt;
Os servidores reais e o balanceador de carga poden estar intercontectados mediante unha LAN de alta velocidade ou dispersos nunha WAN. Os balanceadores poden atender peticións para diferentes servidores e aparentar que funciona coma un servizo único nun único enderezo IP. Para atender as peticións pode empregarse un balanceo a nivel de rede ou a nivel de aplicación. A escalabilidade do sistema consíguese de xeito transparente engadindo ou quitando nodos no cluster. A alta dispoñibilidade conseguese detectando a caída de nodos e reconfigurando o sistea de xeito apropiado.&lt;br /&gt;
&lt;br /&gt;
O [http://www.linuxvirtualserver.org Linux Virtual Server Project] (LVS) implementa balanceo a nivel 4 (tcp/udp) no kernel de Linux. LVS corre sobre Linux pero é capaz de balancear conexións procedentes de usuarios finais sobre calquera sistema operativo a servidores reais correndo en calquera sistema operativo. Mentres as conexións sexan tcp ou udp, LVS pode usarse. Esto significa nin máis nin menos, que se temos un sistema Linux temos a nosa disposición un balanceador.&lt;br /&gt;
&lt;br /&gt;
Neste sistema destacamos dous compoñentes pola súa función:&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;IPVS&amp;#039;&amp;#039;&amp;#039; (IP Virtual Server): é  o compoñente integrado no kernel de Linux que se encarga do balanceo de carga.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ldirectord&amp;#039;&amp;#039;&amp;#039;: é un servizo encargado de monitorar os servidores reais dun balanceador e no caso de fallo dalgún deles, encárgase de reconfigurar dinámicamente IPVS.&lt;br /&gt;
Nun sistema baseado en LVS adoitase a usar a seguinte terminoloxía:&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Linux Director&amp;#039;&amp;#039;&amp;#039;: equipo correndo Linux con LVS instalado que recibe paquetes dende usuarios finais e os reenvía cara ós servidores reais.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;End User&amp;#039;&amp;#039;&amp;#039;: equipo que orixina a conexión.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Real Server&amp;#039;&amp;#039;&amp;#039;: equipo final que corre algún servizo tipo servidor web.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cliente IP Address (CIP)&amp;#039;&amp;#039;&amp;#039;: o enderezo IP do cliente que orixina a conexión.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Virtual IP Address (VIP)&amp;#039;&amp;#039;&amp;#039;: o enderezo IP asignado a un servizo que xestiona o director.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Real IP Address (RIP)&amp;#039;&amp;#039;&amp;#039;: o enderezo IP dun Real Server.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Director IP Address (DIP)&amp;#039;&amp;#039;&amp;#039;: o enderezo IP do director na rede DRIP.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Linux Virtual Server arquitectura.png|500px|centro|Esquema LVS]]&lt;br /&gt;
&lt;br /&gt;
LVS ten varias formas diferentes de reenviar paquetes cara ós servidores reais sendo as principais:&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;LVS Network Address Translations (LVS-NAT)&amp;#039;&amp;#039;&amp;#039;: Os paquetes recíbense dos usuarios finais e os enderezo IP/porto destino cámbianse polos do servidor real seleccionado. Os paquetes de resposta pasan a través do director e volven modificarse para que o usuario final reciba unha resposta desde a orixe esperada. Debido ó traballo a desempeñar polo balanceadore e á súa ubicación; este pode converterse nun problema, debido a carga de CPU que supón realizar o NAT e o ancho de banda real das nosas interfaces de rede; xa que, polo balanceador van pasar tanto as peticións cara ós servidores como as respostas cara ós clientes.&lt;br /&gt;
[[Archivo:Linux Virtual Server NAT.png|500px|centro|LVS NAT]]&lt;br /&gt;
:Nun caso práctico teriamos o seguinte:&lt;br /&gt;
[[Archivo:Linux Virtual Server NAT Exemplo.png|300px|centro|LVS NAT]]&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;LVS Direct Routing (LVS-DR)&amp;#039;&amp;#039;&amp;#039;: Os paquetes dos usuarios finais reenvíanse directamente cara ó servidor real seleccionado sen modificar a IP (polo tanto os servidores reais deben configurarse para aceptar paquetes con destino á VIP). Os servidores reais responden directamente ós usuarios finais, polo que o director queda liberado desa función aforrándose CPU e ancho de banda.&lt;br /&gt;
[[Archivo:Linux Virtual Server DR.png|500px|centro|LVS Direct Routing]]&lt;br /&gt;
:Nun caso práctico teriamos o seguinte:&lt;br /&gt;
[[Archivo:Linux Virtual Server DR Exemplo.png|300px|centro|LVS Direct Routing]]&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;LVS IP-IP Encapsulation (LVS-Tunneling)&amp;#039;&amp;#039;&amp;#039;: é semellante ó LVS-DR, pero os servidores reais poden estar en redes diferentes (mesmo en localizacións xeográficas diferentes), polo que os paquetes encapsúlanse dentro de paquetes IP no canto de tramas Ethernet.&lt;br /&gt;
[[Archivo:Linux Virtual Server DR.png|500px|centro|LVS Tunneling]]&lt;br /&gt;
:Nun caso práctico teriamos o seguinte:&lt;br /&gt;
[[Archivo:Linux Virtual Server Tunneling Exemplo.png|500px|centro|LVS Tunneling]]&lt;br /&gt;
===Implementación de LVS e NAT===&lt;br /&gt;
Partiremos do modo de funcionamento de LVS - NAT, na que o equipo frontend, tamén fará de router dos servidores reais ou equipos backend.&lt;br /&gt;
[[Archivo:Linux Virtual Server NAT Exemplo.png|300px|centro|LVS NAT]]&lt;br /&gt;
&lt;br /&gt;
Para instalar ldirectord&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install ldirectord&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cando un usuario accede ó servizo proporcionado polo cluster, o paquete da solicitude vai destinado enderezo IP Virtual (VIP) e chega ao interface WAN do balanceador. O balanceador examina o enderezo IP/porto destino; e no caso de coincidir cun servizo configurado, procede a escoller un dos servidores reais e reescribir o enderezo IP/porto destino polos correspondentes valores asociados ó servidor real escollido. Esta conexión métese nunha táboa de conexións para facer o seu seguimento. Cando paquete de resposta procedente do servidor real chega ó balanceador, reescribirase o enderezo IP/porto orixe reemprazando os datos do servidor real polos do VIP.&lt;br /&gt;
&lt;br /&gt;
O equipo LVS-NAT ademais de xestionar a reescritura dos paquetes ten que enrutalos; polo tanto, hai que activar o enrutamento IP asignando á variable do sistema &amp;#039;&amp;#039;net.ipv4.ip_forward&amp;#039;&amp;#039;  o valor 1. Para asignarlle o valor 1 e facer o cambio persistente, resistinto polo tanto reinicios da máquina, editaremos o arquivo de configuración /etc/sysctl.conf e descomentados a liña correspodente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Uncomment the next line to enable packet forwarding for IPv4&lt;br /&gt;
net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E para aplicar os cambios sen reiniciar&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl -p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación configuraremos &amp;#039;&amp;#039;ldirectord&amp;#039;&amp;#039;, editando o arquivo &amp;#039;&amp;#039;&amp;#039;/etc/ldirectord.cf&amp;#039;&amp;#039;&amp;#039;. As opcións de configuración poden consultarse nas páxinas de manual de &amp;#039;&amp;#039;ldirectord&amp;#039;&amp;#039; e &amp;#039;&amp;#039;ipvsadm&amp;#039;&amp;#039;:&lt;br /&gt;
====ldirectord como Proxy====&lt;br /&gt;
Configuración común:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
checktimeout=3&lt;br /&gt;
checkinterval=5&lt;br /&gt;
failurecount=3&lt;br /&gt;
autoreload=no&lt;br /&gt;
logfile=&amp;quot;/var/log/ldirectord.log&amp;quot;&lt;br /&gt;
quiescent=no&lt;br /&gt;
cleanstop=yes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuración do proxy&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virtual=172.17.60.207:80&lt;br /&gt;
    real=192.168.6.4:80 masq  &lt;br /&gt;
    protocol=tcp&lt;br /&gt;
    scheduler=rr&lt;br /&gt;
    # monitorización do servidor real&lt;br /&gt;
    service=http&lt;br /&gt;
    request=&amp;quot;test.html&amp;quot;&lt;br /&gt;
    receive=&amp;quot;OK&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como podemos comprobar, para saber se o servidor real está funcionando, realiza a descarga periódica do arquivo &amp;quot;test.html&amp;quot; esperando que como resposta apareza &amp;quot;OK&amp;quot; cada 5 segundos. Ao terceiro fallo, márcao como &amp;quot;non activo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Reiniciamos o servizo &amp;#039;&amp;#039;ldirectord&amp;#039;&amp;#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service ldirectord restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Podemos comprobar no ficheiro de log indicado, que se consegui conectar co equipo remoto.&lt;br /&gt;
&lt;br /&gt;
====ldirectord como Balanceador====&lt;br /&gt;
Podemos configurar o balanceador co número de servidores que queiramos empregando o algoritmo &amp;quot;round robin&amp;quot; para repartir a carga, e adicionalmente cun servidor &amp;quot;fallback&amp;quot; ao que reenviar os paquetes no caso de que non esté activo ningún dos servidores reais.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;2,3,4,6&amp;quot;&amp;gt;&lt;br /&gt;
virtual=172.17.60.207:80&lt;br /&gt;
    real=192.168.6.4:80 masq  &lt;br /&gt;
    real=192.168.6.5:80 masq  &lt;br /&gt;
    fallback=192.168.6.100:80 masq&lt;br /&gt;
    protocol=tcp&lt;br /&gt;
    scheduler=rr&lt;br /&gt;
    # monitorización do servidor real&lt;br /&gt;
    service=http&lt;br /&gt;
    request=&amp;quot;test.html&amp;quot;&lt;br /&gt;
    receive=&amp;quot;OK&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tamén podemos asignar pesos á hora de repartir a carga:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;2,3,4,5,7&amp;quot;&amp;gt;&lt;br /&gt;
virtual=172.17.60.207:80&lt;br /&gt;
    real=192.168.6.4:80 masq 4 &lt;br /&gt;
    real=192.168.6.5:80 masq 2 &lt;br /&gt;
    real=192.168.6.5:80 masq 1 &lt;br /&gt;
    fallback=192.168.6.100:80 masq&lt;br /&gt;
    protocol=tcp&lt;br /&gt;
    scheduler=wrr&lt;br /&gt;
    # monitorización do servidor real&lt;br /&gt;
    service=http&lt;br /&gt;
    request=&amp;quot;test.html&amp;quot;&lt;br /&gt;
    receive=&amp;quot;OK&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Despois de facer unhas cantas conexións desde calquera cliente, podemos ver as estatísticas de conexións executando o comando &amp;#039;&amp;#039;&amp;#039;ipvsadm -L -n&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Prot LocalAddress:Port Scheduler Flags&lt;br /&gt;
  -&amp;gt; RemoteAddress:Port          Forward Weight ActiveConn InActConn&lt;br /&gt;
TCP  172.17.60.207:80 rr&lt;br /&gt;
  -&amp;gt; 192.168.6.4:80              Masq    1      0          2         &lt;br /&gt;
  -&amp;gt; 192.168.6.5:80              Masq    1      0          2         &lt;br /&gt;
  -&amp;gt; 192.168.6.6:80              Masq    1      0          2      &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Implementaión de LVS e DR===&lt;br /&gt;
Partiremos do modo de funcionamento de LVS - DR, na que o equipo frontend, xa non fará de router dos servidores reais ou equipos backend. Neste caso, todos os equipos terán un enderezo virtual común para todos eles.&lt;br /&gt;
[[Archivo:Linux Virtual Server DR Exemplo.png|700px|centro|LVS NAT]]&lt;br /&gt;
Para poñer ese enderezo común a todos eles (frontend e backends), podemos facelo do seguinte xeito no ficheiro /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
auto eth0:0&lt;br /&gt;
iface eth0:0 inet static&lt;br /&gt;
    address 172.17.60.201/16&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación configuramos o ldirectord&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
checktimeout=3&lt;br /&gt;
checkinterval=5&lt;br /&gt;
failurecount=3&lt;br /&gt;
autoreload=no&lt;br /&gt;
logfile=&amp;quot;/var/log/ldirectord.log&amp;quot;&lt;br /&gt;
quiescent=no&lt;br /&gt;
cleanstop=yes&lt;br /&gt;
&lt;br /&gt;
virtual=172.17.60.201:80&lt;br /&gt;
        # servidores reais balanceados en modo round-robin&lt;br /&gt;
        real=172.17.60.200:80 gate&lt;br /&gt;
        real=172.17.60.199:80 gate&lt;br /&gt;
        #    fallback=172.17.60.210:80 gate&lt;br /&gt;
        protocol=tcp&lt;br /&gt;
        scheduler=rr&lt;br /&gt;
        checktype=negotiate&lt;br /&gt;
        # monitorización dos servidores reais&lt;br /&gt;
        service=http&lt;br /&gt;
        request=&amp;quot;test.html&amp;quot;&lt;br /&gt;
        receive=&amp;quot;OK&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bruno</name></author>
	</entry>
</feed>