Ipvsadm permite administrar y tener control total de LVS (Linux Virtual Server), es decir, añadir, editar y eliminar virtual servers o real servers, cambiar algoritmos/scheduling de balanceo, peso de real servers para un servicio, exportar e importar la configuración activa, etc. Todo se realiza a tiempo real y sin necesidad de reiniciar o recargar ningún servicio.
Hay que tener en cuenta que no es lo mismo utilizar ipvsadm para gestionar LVS de forma directa que cuando utilizamos Keepalived para interactuar con LVS:
- Ipvsadm + LVS: ipvsadm establece y mantiene toda la configuración de LVS.
- Keepalived + LVS + (ipvsadm): Keepalived establece y mantiene toda la configuración de LVS. ipvsadm se puede utilizar para monitorizar el estado de Linux Virtual Server. Si se realiza algún cambio en LVS a través de ipvsadm, será efectivo pero no persistente al reinicio de Keepalived, que además puede sobreescribir la configuración en cualquier momento, por ejemplo, tras el reinicio de un real server.
Por ejemplo, con ipvsadm podemos temporalmente eliminar un real server de un balanceo:
# ipvsadm -l IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP balanceo-web:http wlc persistent 32400 -> realserver01:http Route 1 0 0 -> realserver02:http Route 1 0 0
# ipvsadm -d -t balanceo-web:http -r realserver01
# ipvsadm -l IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP balanceo-web:http wlc persistent 32400 -> realserver02:http Route 1 0 0
La tabla de LVS se ha modificado y el realserver ya no forma parte del balanceo, pero si se reinicia keepalived, «realserver01» volverá a formar parte del servicio ya que la configuración está especificada en el fichero «keepalived.conf» y no es gestionada directamente por ipvsadm.
Una vez aclarado esto, vamos a ver qué podemos hacer con ipvsadm para monitorizar y controlar Keepalived con LVS.
Ver el estado de los servicios y balanceos (tabla LVS)
Para visualizar todos los balanceos configurados, real servers asociados, algoritmos de balanceo, pesos, etc utilizamos el comando ipvsadm seguido del parámetro «-L», «-l» o «–list»:
# ipvsadm -L IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP virtualldap:ldap rr persistent 50 -> ldap01:ldap Masq 1 0 38 -> ldap02:ldap Masq 1 0 74 TCP virtualweb:http rr persistent 50 -> web01:http Masq 1 7 51 -> web02:http Masq 1 1 10
Si queremos deshabilitar la resolución DNS y ver los puertos en lugar del nombre del servicio utilizamos el parámetro «-n»:
# ipvsadm -L IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.1.99:386 rr persistent 50 -> 192.168.3.100:386 Masq 1 0 38 -> 192.168.3.101:386 Masq 1 0 74 TCP 192.168.1.100:80 rr persistent 50 -> 192.168.3.200:80 Masq 1 7 51 -> 192.168.3.201:80 Masq 1 1 10
Si necesitamos información concreta de un servicio podemos especificarlo con el parámetro de listar «-L», seguido del tipo de servicio (tcp, udp) y finalmente el virtual server (IP + Puerto):
Ejemplo TCP:
# ipvsadm -L --tcp-service 192.168.1.99:386 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.1.99:386 rr persistent 50 -> 192.168.3.100:386 Masq 1 0 38 -> 192.168.3.101:386 Masq 1 0 74
Ejemplo UDP:
# ipvsadm -L --udp-service 192.168.129:53 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn UDP 192.168.1.129:53 rr persistent 50 -> 192.168.3.112:53 Masq 1 0 138 -> 192.168.3.111:53 Masq 1 0 734
Visualizar estadísticas de tráfico
Por defecto, al listar la tabla de LVS podemos ver el número de conexiones activas e inactivas de cada real server. Como complemento a esta información podemos visualiza información de paquetes y bytes de entrada/salida con el parámetro «–stats»:
# ipvsadm -L -n --stats IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes -> RemoteAddress:Port TCP 192.168.1.99:80 31438 215463 227039 47615155 109224K -> 192.168.3.100:80 15266 98847 103952 21159207 44727177 -> 192.168.3.100:80 16172 116616 123087 26455948 64497234 [...]
También podemos filtrar por virtual server en lugar de mostrar todo:
# ipvsadm -L -n --stats --udp-service 200.87.100.10:53 Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes -> RemoteAddress:Port UDP 192.168.1.215:53 3010M 1941M 1318M 812G 2988G -> 192.168.3.200:53 4202M 1627M 1280M 456G 1690G -> 192.168.3.201:53 3102M 313573K 37579267 355G 1297G
Mostrar conexiones, bytes y paquetes por segundo
El parámetro «–rate» permite visualizar información de conexiones por segundo, bytes por segundo y paquetes por segundo de cada servicio y sus real servers:
# ipvsadm -L -n --rate --udp-service 200.87.100.10:53 Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS -> RemoteAddress:Port UDP 192.168.1.215:53 4668 6614 6323 484559 1842310 -> 192.168.3.200:53 2259 3211 3054 238426 902641 -> 192.168.3.201:53 2409 3403 3269 246133 939669
Ver conexiones establecidas contra LVS
Para ver un listado de todas las conexiones establecidas en LVS se utiliza el comando «-c» seguido de «-L». Muestra una tabla con todas las conexiones y su protocolo, tiempo de expiración, IP de origen, Real Server de destino y servidor virtual/balanceo al que están conectados:
# ipvsadm -L -c -n IPVS connection entries pro expire state source virtual destination UDP 04:58 UDP xxxxx:41652 192.168.1.215:53 192.168.1.200:53 UDP 04:58 UDP xxxxx:12181 192.168.1.215:53 192.168.1.200:53 UDP 04:57 UDP xxxxx:15861 192.168.1.215:53 192.168.1.201:53 UDP 04:56 UDP xxxxx:6617 192.168.1.215:53 192.168.1.201:53 UDP 04:56 UDP xxxxx:54503 192.168.1.215:53 192.168.1.201:53 UDP 04:53 UDP xxxxx:59607 192.168.1.215:53 192.168.1.200:53 UDP 04:53 UDP xxxxx:17682 192.168.1.215:53 192.168.1.200:53
Ver límites de número de conexiones por Real Server
LVS (y por consiguiente Keepalived) permite establecer límites máximos y mínimos de conexiones por Real Server. Para visualizar estos límites utilizamos el parámetro «–thresholds». Si no hay límites establecidos aparecerá el valor 0:
# ipvsadm -L -n --thresholds IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Uthreshold Lthreshold ActiveConn InActConn -> RemoteAddress:Port UDP 192.168.1.215:53 rr persistent 50 -> 192.168.3.200:53 0 0 0 16 -> 192.168.3.201:53 0 0 0 9
Modificación de configuracion de LVS, Virtual Servers y Real Servers
Hasta ahora todo lo que hemos visto era monitorización y consultas para ver el estado de los servicios, balanceos, real servers, etc. Como comentaba al principio de la entrada, también podemos realizar modificaciones a tiempo real pero si queremos hacerlas persistentes debemos aplicarlas en el fichero de configuración de keepalived (keepalived.conf). Esto en el caso de que usemos Keepalived.
Si usaramos ipvsadm directamente contra LVS aplicaríamos las configuraciones a tiempo real y luego las añadiríamos a nuestro script de arranque de ipvsadm:
$ ipvsadm-sav > ipvsadm.conf
$ ipvsadm-restore < ipvsadm.conf
Una vez que sabemos esto podemos realizar cualquier tiempo de configuración a tiempo real en LVS.
Crear un nuevo balanceo: virtual server (HTTP con round robin) + real servers:
# ipvsadm -A -t 192.168.1.100:80 -s rr # ipvsadm -a -t 192.168.1.100:80 -r 192.168.3.100:80 -m # ipvsadm -a -t 192.168.1.100:80 -r 192.168.3.101:80 -m # ipvsadm -a -t 192.168.1.100:80 -r 192.168.3.102:80 -m
Eliminar un Real Server de un balanceo/Virtual Server
# ipvsadm -d -t 192.168.1.100:80 -r 192.168.3.100:80
Editar la prioridad de un Virtual Server
# ipvsadm -e -t 192.168.1.100:80 -s rr -p 50
Editar el algoritmo (scheduler) de balanceo de un virtual server:
# ipvsadm -e -t 192.168.1.100:80 -s lc
En definitiva, se puede modificar cualquier parámetro a través de ipvsadm, siempre conociendo como aplicarlo de forma persistente según nuestra instalación. Para ver todos los parámetros y configuraciones disponibles revisad la página man:
# man ipvsadm