Configuración Netscaler y HAProxy como Balanceador Storefront
Hoy vamos a realizar una entrada de las que me gustan, por las horas requeridas y el resultado. Mezclamos varias tecnologías Microsoft, Citrix y Linux en una infraestructura para dar alto rendimiento.
Os enseñamos a instalar HAPROXY y como balancear los Storefront con Citrix Netscaler Gateway. Por un tema de licencia no podremos balancear Netscaler, pero sí dispondremos de la configuración suficiente para balancear HAProxy.
Vamos a explicar cómo configurar HAProxy para que trabaje con Citrix Netscaler y Citrix Storefront.
INSTALACION HAPROXY EN CENTOS 7
Lo primero que haremos será generar las máquinas virtuales en Centos 7. Yo he utilizado la instalación mínima, que ocupa unos 3 gigas. Buscamos la optimización, así que no necesitamos nada más.
Os doy un ejemplo con nombres e ips para cada objeto en HAPROXY.
- Netscaler –> 192.168.1.184
- Netscaler Virtual IP –> 192.168.2.184
- haproxy01 –> 192.168.1.47
- haproxy02 –> 192.168.1.48
- haproxyvip –> 192.168.1.49
- Puerta de enlace –> 192.168.1.254
- DNS1 –> 192.168.1.1
- DNS2 –> 192.168.1.2
- Storefront01 –> 192.168.1.28
- Storefront02 –> 192.168.1.29
Ahora haremos una configuración de red en cada nodo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# CONFIGURAR EN CADA NODO # Realizamos una prueba de comunicaciones ip address show ping 192.168.1.254 ping negu.local ping google.es # Editamos las tarjetas de red vi /etc/sysconfig/network-scripts/ifcfg-eth0 HWADDR="08:00:27:FE:4D:FD" TYPE="Ethernet" BOOTPROTO="none" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no" NAME="enp0s3" UUID="f324bc5d-6c62-437d-bdaa-6f223a96c14f" ONBOOT="yes" #Adicionar los parametros de tu red #dirección de ip IPADDR="192.168.1.47" #mascara de red NETMASK="255.255.255.0" #puerta de enlace GATEWAY="192.168.1.254" #DNS DNS1="192.168.1.1" DNS2="192.168.1.2" DOMAIN="negu.local" |
Deshabilitamos y paramos el servicio NetworkManager:
1 2 3 4 5 |
systemctl stop NetworkManager systemctl disable NetworkManager rm '/etc/systemd/system/multi-user.target.wants/NetworkManager.service' rm '/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service' rm '/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service' |
Reiniciamos el servicio de red y habilitamos el servicio en el arranque:
1 2 |
systemctl restart network chkconfig network on |
CONFIGURAR HA CON IP VIP EN HAPROXY
Utilizaremos keepalived para realizar el HA de HAPROXY:
1 |
yum install -y haproxy keepalived |
Realizamos la configuración siguiente en cada nodo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
### NODO1 mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.old root@haproxy01:~# nano /etc/keepalived/keepalived.conf global_defs { router_id haproxy01 } vrrp_script haproxy { script "killall -0 haproxy" interval 2 weight 2 } vrrp_instance 50 { virtual_router_id 50 advert_int 1 priority 101 state MASTER interface eth0 virtual_ipaddress { 192.168.1.49 dev eth0 } track_script { haproxy } } |
Comprobamos la comunicación, reiniciamos servicio y que la IP VIP responde:
1 2 3 4 5 |
service keepalived restart ping 192.168.1.49 ping 192.168.1.47 chkconfig haproxy on chkconfig keepalived on |
Ahora configuraremos el otro nodo que actuará de SLAVE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
## NODO 2 yum -y install keepalived mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.old # DESDE NODO1 AL NODO2# scp /etc/keepalived/keepalived.conf root@192.168.1.48:/etc/keepalived/ # Modificar en NODO2# root@haproxy01:~# nano /etc/keepalived/keepalived.conf global_defs { router_id haproxy02 } vrrp_script haproxy { script "killall -0 haproxy" interval 2 weight 2 } vrrp_instance 50 { virtual_router_id 50 advert_int 1 priority 101 state SLAVE interface eth0 virtual_ipaddress { 192.168.1.49 dev eth0 } track_script { haproxy } } |
Realizamos las pruebas de conectividad:
1 2 3 4 5 |
service keepalived restart ping 192.168.1.49 ping 192.168.1.48 chkconfig haproxy on chkconfig keepalived on |
PRUEBAS DE HA EN HAPROXY
Como buena práctica realizaremos una prueba de caída de los nodos, apagando cada uno y comprobando la ip vip.
1 2 3 4 |
# PRUEBA CAIDA DESDE MAQUINA EXTERNA# # NODO A NODO, MASTER Y SLAVE# service network stop ping 192.168.1.49 -t |
CONFIGURACION HAPROXY PARA CITRIX STOREFRONT
Lo primero que haremos es una copia de seguridad del fichero de configuración:
1 |
cp /etc/haproxy/haproxy.conf /etc/haproxy/haproxy.conf.old |
Eliminamos las líneas de los ejemplos finales y añadimos las siguientes. Para que funcione bien Netscaler Gateway con un clúster de HAProxy necesitaremos que las conexiones sean persistentes, sino no funcionará correctamente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#----------------------------------------------------------- # CLUSTER STOREFRONTS #----------------------------------------------------------- vi /etc/haproxy/haproxy.conf defaults ..... # Añadimos stats enable stats auth usuario:password # OPTION 1 listen haproxycluster 0.0.0.0:80 mode tcp balance source option httpchk GET /Citrix/StoreWeb/ cookie haproxycluster insert server storefront01 192.168.1.28:80 weight 1 maxconn 512 cookie 1 check server storefront02 192.168.1.29:80 weight 1 maxconn 512 cookie 1 check # OPTION 2 NO PROBADA #backend HACitrixStorefront # balance leastconn # stick-table type ip size 200k expire 30m # stick on src # acl h_xff_exists req.hdr(X-Forwarded-For) -m found # http-request add-header X-Forwarded-For %[src] unless h_xff_exists # server storefront01 192.168.1.28 weight 1 maxconn 512 cookie 1 check port 80 # server storefront02 192.168.1.29 weight 1 maxconn 512 cookie 1 check port 80 |
ACTIVAR ESTADISTICAS EN HAPROXY
Como complemento y por tener una visión diferente, configuraré las estadísticas de forma gráfica para HAPROXY.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# NODO 1, 192.168.1.48 para NODO 2 listen stats 192.168.1.47:9000 mode http stats enable log global maxconn 10 clitimeout 100s srvtimeout 100s contimeout 100s stats realm Balanceado HAProxy\ Estadisticas stats refresh 5s stats hide-version stats auth usuario:password stats url /haproxy-stats |
Para conectaros tendréis que utilizar la URL: http://192.168.1.47:9000/haproxy-stats
CONFIGURACION NETSCALER PARA HAPROXY
Vamos a usar para validarnos Directorio Activo, así que añadimos los controladores que dispongamos.
Configuration -> Netscaler Gateway -> Policies -> Authentication -> LDAP -> Servers -> Add
Deberemos generar en DA un usuario de servicio para que consulte a DA. Ahora configuraremos los parámetros como en la imagen y lanzamos el Test para validarlo.
Utilizaremos:
- Server Logon Name Attribute: sAMAccountName
- Group Attribute: memberOf
- Sub Attribute Name: cn
- SSO Name Attribute: userPrincipalName
- Dejamos marcado User Required
- Referral DNS Lookup: A-REC
Repetimos el proceso con los DCs que tengamos (esto si tenemos HA, sino con uno nos valdrá). Ahora vamos a Policies -> Add:
Creamos una expresión ns_true enlazada al Server que hemos configurado anteriormente:
Una vez completado, vamos a agregar nuestro Netscaler Gateway Virtual Server:
Configuration -> Netscaler Gateway -> Virtual Servers -> Add
Asignaremos una IP para el Virtual Server, agregaremos el Certificado Wildcard y la política de LDAP que acabamos de generar:
Deshabilitamos SSL:
Y con esto tendréis configurado HAProxy con Netscaler Gateway. Ahora tendréis que configurar Storefront para que trabaje con Netscaler para hacer las pruebas.
¿Te ha gustado la entrada SÍGUENOS EN TWITTER?
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?