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

ConceptoQué es
Source Address AffinityPersistencia por IP del cliente; guarda registros; timeout por defecto 180 s
Prefix Length / MaskAgrupa clientes por red (/24 = toda la subred al mismo miembro)
Cookie InsertBIG-IP inserta su cookie BIGipServer<pool>; no guarda registros
Cookie Rewrite / Passive / HashVariantes donde participa la cookie del servidor
Fallback Persistence ProfileMétodo alternativo si el principal no aplica
Match Across ServicesMismo servidor para varios puertos de la app (80 y 443)
Mirror PersistenceCopia los registros al par HA
Hash Algorithm: CARPCalcula 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

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 lugarQué debes verSi no lo ves
Statistics > Module Statistics > Local Traffic > Statistics Type: Persistence RecordsRegistro con la IP del cliente en Persistence Value y su miembroPerfil no asignado al VS o es cookie (no guarda registros)
tmsh show ltm persistence persist-recordsIgual por CLI—
Navegador > herramientas de desarrollador > CookiesCookie BIGipServer…Falta perfil HTTP o el navegador bloquea cookies
Refrescar varias vecesSiempre responde el mismo servidorRevisa 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.
  • 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.