Persistence
Resumen
La persistencia (stickiness) hace que un cliente vuelva siempre al mismo miembro mientras dure su sesión; si está activa, manda sobre el método de balanceo. Se configura como un perfil asignado al virtual server. Esta nota crea persistencia por IP de origen (con registros en el BIG-IP) y por cookie (sin registros, ideal para HTTP), y muestra cómo comprobar que funciona.
Requisitos previos
- Virtual server funcionando (Virtual Servers)
- Para cookie: perfil HTTP en el VS (y Client SSL si es HTTPS)
- Saber cuánto dura la sesión de la aplicación (para el timeout)
Conceptos clave
| Concepto | Qué es |
|---|---|
| Source Address Affinity | Persistencia por IP del cliente; guarda registros; timeout por defecto 180 s |
| Prefix Length / Mask | Agrupa clientes por red (/24 = toda la subred al mismo miembro) |
| Cookie Insert | BIG-IP inserta su cookie BIGipServer<pool>; no guarda registros |
| Cookie Rewrite / Passive / Hash | Variantes donde participa la cookie del servidor |
| Fallback Persistence Profile | Método alternativo si el principal no aplica |
| Match Across Services | Mismo servidor para varios puertos de la app (80 y 443) |
| Mirror Persistence | Copia los registros al par HA |
| Hash Algorithm: CARP | Calcula el miembro sin guardar registros (menos mirroring) |
Configuración (Ejemplo, Lab CBT Nuggets)
1. Perfil Source Address Affinity
Local Traffic > Profiles > Persistence > Create > Name: Source-Persist, Persistence Type: Source Address Affinity > marca Custom en lo que cambies (Timeout, Prefix Length, Match Across Services, Mirror Persistence, Hash Algorithm) > Finished.
tmsh create ltm persistence source-addr Source-Persist defaults-from source_addr timeout 600 mask 255.255.255.255
2. Perfil Cookie (Insert)
Profiles > Persistence > Create > Name: Cookie-Persist, Persistence Type: Cookie > Cookie Method: HTTP Cookie Insert > Expiration (vacío = cookie de sesión) > Finished.
tmsh create ltm persistence cookie Cookie-Persist defaults-from cookie method insert
3. Asignarlo al virtual server
Local Traffic > Virtual Servers > el VS > Resources > Default Persistence Profile: Cookie-Persist; Fallback Persistence Profile: Source-Persist > Update.
tmsh modify ltm virtual VS-172.16.101.20-HTTP-APP1 persist replace-all-with { Cookie-Persist { default yes } } fallback-persistence Source-Persist
4. Varios perfiles de persistencia (para iRules)
tmsh list ltm virtual VS-172.16.101.20-HTTP-APP1 persist
tmsh modify ltm virtual VS-172.16.101.20-HTTP-APP1 persist replace-all-with { cookie { default no } source_addr { default no } universal { default yes } }
Una iRule puede elegir entre ellos (ej. persist source_addr solo para un dominio). Ver iRules.
5. CARP para reducir el mirroring en HA
En el perfil Source Address Affinity: Hash Algorithm: CARP > Update. El miembro se calcula con un hash y no se guardan registros.
tmsh modify ltm persistence source-addr Source-Persist hash-algorithm carp
Verificación
| Comando o lugar | Qué debes ver | Si no lo ves |
|---|---|---|
| Statistics > Module Statistics > Local Traffic > Statistics Type: Persistence Records | Registro con la IP del cliente en Persistence Value y su miembro | Perfil no asignado al VS o es cookie (no guarda registros) |
tmsh show ltm persistence persist-records | Igual por CLI | — |
| Navegador > herramientas de desarrollador > Cookies | Cookie BIGipServer… | Falta perfil HTTP o el navegador bloquea cookies |
| Refrescar varias veces | Siempre responde el mismo servidor | Revisa timeout y perfil |
tcpdump -ni internal host <cliente-o-SNAT> | Siempre hacia el mismo miembro | — |
tmsh delete ltm persistence persist-records
Borra los registros para repetir una prueba.
Errores comunes
La persistencia “se pierde” después de un rato
- Causa: venció el timeout (180 s por defecto en source address).
- Solución: ajusta el timeout a la duración de la sesión de la app.
Todos los usuarios van al mismo servidor
- Causa: source address con muchos usuarios detrás de una misma IP (NAT/proxy).
- Solución: usa cookie insert.
La cookie no aparece
- Causa: el VS no tiene perfil HTTP, o es HTTPS sin Client SSL (pass-through).
- Solución: agrega HTTP (y Client SSL para descifrar).
Tras un failover los clientes cambian de servidor
- Causa: los registros no se replican.
- Solución: Mirror Persistence, cookie (no necesita registros) o CARP.