{"id":1851,"date":"2016-12-13T11:34:44","date_gmt":"2016-12-13T17:34:44","guid":{"rendered":"https:\/\/www.lastdragon.net\/?p=1851"},"modified":"2016-12-16T16:57:28","modified_gmt":"2016-12-16T22:57:28","slug":"configurando-rapidamente-haproxy","status":"publish","type":"post","link":"https:\/\/www.lastdragon.net\/?p=1851","title":{"rendered":"Configurando rapidamente haproxy"},"content":{"rendered":"<p>El haproxy es un proxy inverso que clusteriza o agrupa servicios en servidores diferentes mientras balancea la carga y se asegura de que los servicios est\u00e1n vivos de esta forma nunca le env\u00eda trabajo a servidores que han ca\u00eddo mientras reparte la carga de forma inteligente entre los servidores que est\u00e1n disponibles para despachar.<\/p>\n<p>La siguiente configuraci\u00f3n de ejemplo es un Squid Proxy Clusterizado.<\/p>\n<p>El servidor 1 tiene salida por un enlace dedicado de Reduno\/Uninet\/Telmex<br \/>\nEl servidor 2 por un enlace dedicado de CABLECOM<\/p>\n<p>Este Haproxy agrupa a 2 proxy squid saliendo por diferentes enlaces cuando operan normalmente el tr\u00e1fico es balaceado entre los 2 pero si alguno de los 2 cae el tr\u00e1fico se redistribuye en el \u00fanico proxy sobreviviente <\/p>\n<p>La configuraci\u00f3n de un HAproxy puede dividirse en bloques, el bloque generales y globales, el bloque de servicio de entrada y el bloque de salida para el bloque de entrada. Haproxy entiende del protocolo http pero como ahora casi todo es https es mejor usar usar TCP directamente.<\/p>\n<p>Bloque de configuraciones globales.<\/p>\n<p><code>global<br \/>\n     log localhost local0<br \/>\n     user haproxy<br \/>\n     group haproxy<br \/>\n     daemon<\/p>\n<p>defaults<br \/>\n        log     global<br \/>\n        timeout client 100s<br \/>\n        timeout server 100s<br \/>\n        timeout queue  60s<br \/>\n        timeout connect 5s<br \/>\n        timeout http-keep-alive 1s<br \/>\n        timeout http-request 4s  # slowloris protection<\/p>\n<p>        option  tcp-smart-accept<br \/>\n        option  tcp-smart-connect<br \/>\n        option  abortonclose<br \/>\n        option  redispatch<br \/>\n        option  contstats<\/p>\n<p>        maxconn 6000<br \/>\n        retries 3<\/code><\/p>\n<p>Bloque de servicio de entrada, se prepara al haproxy para escuchar por TCP el puerto 3128 ( simula ser el squid proxy original ) que es el puerto default de squid, se declara. La l\u00ednea default_backend Cluster_Proxy nos dice cual es el grupo de servidores que dar\u00e1 salida al servicio de entrada<\/p>\n<p><code>frontend Entrada_al_Proxy<br \/>\n        bind    10.10.10.1:3128<br \/>\n        mode    tcp<br \/>\n        default_backend Cluster_Proxy<\/code><\/p>\n<p>El bloque de grupo de salida<\/p>\n<p><code>backend Cluster_Proxy<br \/>\n        mode    tcp<br \/>\n        balance roundrobin<br \/>\n        stick-table type ip size 200k expire 30m<br \/>\n        stick on src<br \/>\n        server servidor1 10.10.20.1:3128 maxconn 3000 check<br \/>\n        server servidor2 10.10.30.22:3128 maxconn 3000 check<\/code><\/p>\n<p>El bloque de monitoreo, el haproxy entrega una consola web para ver el estado del  los servicios de entrada y los grupos de salida, ver que servidores operan correctamente o cuales han caido<\/p>\n<p><code>listen stats 10.10.10.1:8081<br \/>\n        mode    http<br \/>\n        stats   enable<br \/>\n        stats   hide-version<br \/>\n        stats   realm Balanceador Haproxy Estadisticas<br \/>\n        stats   uri \/<br \/>\n        stats   refresh 5s<br \/>\n        stats   auth admin:clave<\/code> <\/p>\n<p><strong>Archivo completo<\/strong><\/p>\n<p><code>global<br \/>\n     log localhost local0<br \/>\n     user haproxy<br \/>\n     group haproxy<br \/>\n     daemon<\/p>\n<p>defaults<br \/>\n        log     global<br \/>\n        timeout client 100s<br \/>\n        timeout server 100s<br \/>\n        timeout queue  60s<br \/>\n        timeout connect 5s<br \/>\n        timeout http-keep-alive 1s<br \/>\n        timeout http-request 4s  # slowloris protection<\/p>\n<p>        option  tcp-smart-accept<br \/>\n        option  tcp-smart-connect<br \/>\n        option  abortonclose<br \/>\n        option  redispatch<br \/>\n        option  contstats<\/p>\n<p>        maxconn 6000<br \/>\n        retries 3<\/p>\n<p>frontend Entrada_al_Proxy<br \/>\n        bind    10.10.10.1:3128<br \/>\n        mode    tcp<br \/>\n        default_backend Cluster_Proxy<\/p>\n<p>backend Cluster_Proxy<br \/>\n        mode    tcp<br \/>\n        balance roundrobin<br \/>\n        stick-table type ip size 200k expire 30m<br \/>\n        stick on src<br \/>\n        server servidor1 10.10.20.1:3128 maxconn 3000 check<br \/>\n        server servidor2 10.10.30.22:3128 maxconn 3000 check<\/p>\n<p>listen stats 10.10.10.1:8081<br \/>\n        mode    http<br \/>\n        stats   enable<br \/>\n        stats   hide-version<br \/>\n        stats   realm Balanceador Haproxy Estadisticas<br \/>\n        stats   uri \/<br \/>\n        stats   refresh 5s<br \/>\n        stats   auth admin:clave <\/code><\/p>\n<p><strong>Imagen de la consola<\/strong><\/p>\n<p><a href=\"https:\/\/www.lastdragon.net\/misarchivos\/haproxy.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.lastdragon.net\/misarchivos\/haproxy.jpg\" alt=\"\" width=\"425\" height=\"350\" \/><\/a><\/p>\n<p><strong>V\u00eddeo del tema<\/strong><\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/1h6qyPsJ4JA\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>El haproxy es un proxy inverso que clusteriza o agrupa servicios en servidores diferentes mientras balancea la carga y se asegura de que los servicios est\u00e1n vivos de esta forma nunca le env\u00eda trabajo a servidores que han ca\u00eddo mientras reparte la carga de forma inteligente entre los servidores que est\u00e1n disponibles para despachar. La&#8230;<\/p>\n","protected":false},"author":1,"featured_media":1854,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-1851","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-consultoria-y-manuales"],"_links":{"self":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/1851","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1851"}],"version-history":[{"count":3,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/1851\/revisions"}],"predecessor-version":[{"id":1855,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/1851\/revisions\/1855"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/media\/1854"}],"wp:attachment":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}