13. Failover Suscriptores SRRP
Esta prueba demuestra continuidad de servicio para suscriptores IPoE y PPPoE cuando se corta el enlace de acceso entre la OLT y el BNG MASTER. El objetivo es verificar que:
SLAVEasume el rolmasteren SRRP para los tres group-interface de suscriptores- las sesiones siguen visibles en ambos BNG con
Fwdactivo en el nodo que queda reenviando ont1,ont2y la LAN detrás deont1continúan respondiendo tráfico durante el switchover
13.1 Prerrequisitos
Validar antes de iniciar:
show srrp
show service active-subscribers
Estado base esperado:
MASTER: SRRPmasterparaipv6-only,dual-stackyvipSLAVE: SRRPbackupShuntONT-001yONT-002visibles enshow service active-subscribers
13.2 Determinar las IP fuente actuales
Atajo opcional:
bash configs/cbot/scripts/subscriber-failover-probes.sh srrp-demo start
Si usas este helper, puedes saltarte 13.2 y 13.3 y continuar directamente en 13.4. El script detecta las IP fuente actuales y lanza todos los probes del ATP.
Para una vista de la secuencia de pings durante la prueba, deja una segunda terminal abierta con:
bash configs/cbot/scripts/subscriber-failover-probes.sh srrp-demo watch
Este modo refresca en vivo la última línea de cada ping y ayuda a ver el hueco de tráfico justo cuando ocurre el failover.
Antes de iniciar los pings, identificar las direcciones vigentes del lab. Estas IP pueden variar entre corridas, por lo que no se recomienda usar valores fijos.
Ejecutar desde el host:
docker exec ont1 sh -lc "ip -6 addr show dev eth1.150 scope global"
docker exec ont1 sh -lc "ip -6 addr show dev eth3.200 scope global"
docker exec ont1 sh -lc "ip -4 addr show dev eth3.200 scope global"
docker exec ont2 sh -lc "ip -6 addr show dev ppp0 scope global"
Tomar estas IP para los siguientes pasos:
ONT1_WAN1_V6: IPv6 global deeth1.150ONT1_WAN2_V6: IPv6 global deeth3.200ONT1_WAN2_V4: IPv4 global deeth3.200ONT2_PPP_V6: IPv6 global deppp0
Ejemplo de una corrida real:
ONT1_WAN1_V6=2001:db8:100::5
ONT1_WAN2_V6=2001:db8:cccc::1
ONT1_WAN2_V4=100.80.0.4
ONT2_PPP_V6=2001:db8:100::4
13.3 Iniciar pings continuos
Lanzar los probes desde host con docker exec:
docker exec ont1 sh -lc 'rm -f /tmp/srrp_demo_*; nohup ping -D -n -i 0.2 -W 1 -I <ONT1_WAN1_V6> 2001:db8:aaaa::2 > /tmp/srrp_demo_ont1_wan1_v6.log 2>&1 & echo $! > /tmp/srrp_demo_ont1_wan1_v6.pid'
docker exec ont1 sh -lc 'nohup ping -D -n -i 0.2 -W 1 -I <ONT1_WAN2_V6> 2001:db8:aaaa::2 > /tmp/srrp_demo_ont1_wan2_v6.log 2>&1 & echo $! > /tmp/srrp_demo_ont1_wan2_v6.pid'
docker exec ont1 sh -lc 'nohup ping -D -n -i 0.2 -W 1 -I <ONT1_WAN2_V4> 99.99.99.99 > /tmp/srrp_demo_ont1_wan2_v4.log 2>&1 & echo $! > /tmp/srrp_demo_ont1_wan2_v4.pid'
docker exec ont2 sh -lc 'rm -f /tmp/srrp_demo_*; nohup ping -D -n -i 0.2 -W 1 -I <ONT2_PPP_V6> 2001:db8:aaaa::2 > /tmp/srrp_demo_ont2_ppp_v6.log 2>&1 & echo $! > /tmp/srrp_demo_ont2_ppp_v6.pid'
docker exec pc1 sh -lc 'rm -f /tmp/srrp_demo_pc1_lan_v6.*; nohup ping -D -n -i 0.2 -W 1 2001:db8:aaaa::2 > /tmp/srrp_demo_pc1_lan_v6.log 2>&1 & echo $! > /tmp/srrp_demo_pc1_lan_v6.pid'
Reemplazar <ONT1_WAN1_V6>, <ONT1_WAN2_V6>, <ONT1_WAN2_V4> y <ONT2_PPP_V6> con los valores detectados en 13.2.
Estos cinco pings cubren:
ONT1 WAN1 IPv6-onlyONT1 WAN2 dual-stack IPv6ONT1 WAN2 dual-stack IPv4ONT2 WAN1 PPPoE IPv6PC1detrás del PD entregado porONT1
13.4 Capturar el estado base
En el BNG MASTER:
show srrp
show service active-subscribers
En el BNG SLAVE:
show srrp
show service active-subscribers
Salida observada antes de la caída:
A:admin@MASTER# show srrp
2 9998 dual-stack Up master
1 9998 ipv6-only Up master
3 9998 vip Up master
A:admin@SLAVE# show srrp
2 9998 dual-stack Up backupShunt
1 9998 ipv6-only Up backupShunt
3 9998 vip Up backupShunt
13.5 Forzar la caída del enlace OLT -> BNG MASTER
Ejecutar el script desde containerbot:
docker exec containerbot sh -lc 'python3 /app/scripts/update-ports-sros.py --host 10.99.1.2 --state disable --port-id 1/1/c2/1'
Resultado esperado:
OK: port 1/1/c2/1 admin-state=disable on 10.99.1.2
13.6 Validar el switchover
En MASTER:
show srrp
show port 1/1/c2/1 detail
show service active-subscribers
En SLAVE:
show srrp
show service active-subscribers
Resultado observado:
A:admin@MASTER# show srrp
2 9998 dual-stack Up initialize
1 9998 ipv6-only Up initialize
3 9998 vip Up initialize
A:admin@SLAVE# show srrp
2 9998 dual-stack Up master
1 9998 ipv6-only Up master
3 9998 vip Up master
A:admin@MASTER# show service active-subscribers
...
00:d0:f6:01:01:01 IPoE DHCP6 9998 N
00:d0:f6:01:01:02 IPoE DHCP 9998 N
00:d0:f6:01:01:04 PPP 1 DHCP6 9998 N
A:admin@SLAVE# show service active-subscribers
...
00:d0:f6:01:01:01 IPoE DHCP6 9998 Y
00:d0:f6:01:01:02 IPoE DHCP 9998 Y
00:d0:f6:01:01:04 PPP 1 DHCP6 9998 Y
13.7 Validar continuidad de tráfico
Si dejaste una terminal aparte con el modo visual, aquí deberías ver en tiempo real qué probes siguen respondiendo, cuáles cambian de ttl y si aparece un hueco de icmp_seq.
Revisar las colas de ping:
bash configs/cbot/scripts/subscriber-failover-probes.sh srrp-demo watch
bash configs/cbot/scripts/subscriber-failover-probes.sh srrp-demo tail
docker exec ont1 sh -lc 'tail -n 12 /tmp/srrp_demo_ont1_wan1_v6.log'
docker exec ont1 sh -lc 'tail -n 12 /tmp/srrp_demo_ont1_wan2_v6.log'
docker exec ont1 sh -lc 'tail -n 12 /tmp/srrp_demo_ont1_wan2_v4.log'
docker exec ont2 sh -lc 'tail -n 12 /tmp/srrp_demo_ont2_ppp_v6.log'
docker exec pc1 sh -lc 'tail -n 12 /tmp/srrp_demo_pc1_lan_v6.log'
Señales observadas en esta ejecución:
- hubo continuidad de servicio, pero el switchover no fue hitless
ONT1 WAN1presentó hueco de secuencia entre el últimottl=62enicmp_seq=109y el primerttl=63enicmp_seq=144ONT2 PPPoEpresentó hueco de secuencia entre el últimottl=62enicmp_seq=113y el primerttl=63enicmp_seq=154ONT1 WAN1yONT2 PPPoEcambiaron dettl=62attl=63, indicando el nuevo camino víaSLAVEONT1 WAN2 IPv4continuó respondiendo hacia99.99.99.99PC1siguió alcanzando2001:db8:aaaa::2, validando continuidad del PD/LAN
Ejemplo real de ONT1 WAN1 durante el switchover:
[1773352987.998830] 64 bytes from 2001:db8:aaaa::2: icmp_seq=109 ttl=62 time=2.22 ms
...
[1773352997.495945] 64 bytes from 2001:db8:aaaa::2: icmp_seq=144 ttl=63 time=2082 ms
Ejemplo real de ONT2 PPPoE durante el switchover:
[1773352988.116137] 64 bytes from 2001:db8:aaaa::2: icmp_seq=113 ttl=62 time=1.32 ms
...
[1773352996.824532] 64 bytes from 2001:db8:aaaa::2: icmp_seq=154 ttl=63 time=1.03 ms
En esta prueba, la ventana de convergencia observada para tráfico de suscriptores fue de aproximadamente 8 a 10 segundos.
13.8 Restaurar el puerto del MASTER
docker exec containerbot sh -lc 'python3 /app/scripts/update-ports-sros.py --host 10.99.1.2 --state enable --port-id 1/1/c2/1'
Validar regreso al estado nominal:
show srrp
show service active-subscribers
Resultado esperado:
MASTERvuelve amasterSLAVEvuelve abackupShunt- las sesiones siguen activas
- en los pings IPv6 de
ont1yont2elttlvuelve a62
13.9 Limpiar los procesos de ping
Usar solo una de estas dos opciones:
- si iniciaste los probes con el helper opcional, detenerlos con el helper
- si iniciaste los probes manualmente con
docker exec, detenerlos manualmente con loskill
No es necesario ejecutar ambas opciones. Si primero usas el helper y luego ejecutas los kill manuales, puede aparecer No such process porque los probes ya habrán sido detenidos.
Opción 1, helper:
bash configs/cbot/scripts/subscriber-failover-probes.sh srrp-demo stop
Opción 2, comandos manuales:
docker exec ont1 sh -lc 'kill -INT $(cat /tmp/srrp_demo_ont1_wan1_v6.pid) $(cat /tmp/srrp_demo_ont1_wan2_v6.pid) $(cat /tmp/srrp_demo_ont1_wan2_v4.pid)'
docker exec ont2 sh -lc 'kill -INT $(cat /tmp/srrp_demo_ont2_ppp_v6.pid)'
docker exec pc1 sh -lc 'kill -INT $(cat /tmp/srrp_demo_pc1_lan_v6.pid)'