Application Notes: EAPS Ethernet Automatic Protection Switching Application Notes: EAPS Ethernet Automatic Protection Switching Documento de Uso Público. Data 15/07/2010, Revisão 1.2 Parecer Introdução Firmware Desenvolvimento Exemplo 1: EAPS com uma instância Analisando e entendo os logs Analisando e entendo os debugs Exemplo 2: EAPS com duas instância Exemplo 3: EAPS no EDD Considerações Finais Parecer Este documento explica o funcionamento do EAPS (Ethernet Automatic Protection Switching) e mostra como analisar os debugs e logs, para depurar as causas de problemas em caso de falha. Introdução O EAPS é um protocolo de proteção contra loop em topologias no formato de anel, onde um switch, chamado de master, será o controlador da rede. Este switch possui as mesmas configurações de EAPS dos demais equipamentos do anel, diferenciando-se apenas pela designação de master e que possui a função de enviar BPDUs de controle a cada segundo ou milisegundo, chamado de hellotime. Esta BPDU é enviada através de uma das interfaces do master, designada como "porta primária". Estes pacotes de controle serão recebidos por cada equipamento que compõem o anel em sequência até chegarem na porta de recepção do master, designada porta secundária. Se por algum motivo os pacotes de controle não chegarem nesta interface secundária em um período de tempo máximo chamado failtime esta porta secundária será desbloqueada. Quando o anel está completo e funcional, esta porta permanece com link UP porém em estado bloqueado, não aprendendo endereços MAC nem enviando tráfego por ela. O master é quem detém todas as ações do anel, é ele quem dita o sentido do tráfego, e é para ele que importa os tempos de hellotime e failtime. No transit não importará se a ordem das portas não estiverem no mesmo sentido do master, fazendo com que ele apenas receba a BPDU em uma das portas e encaminhe pela outra, sendo esta primary ou secondary. É claro que para se manter uma organização, e facilitar na depuração de problemas, o ideal é manter a configuração das portas em um mesmo sentido. DATACOM 1 Documento de Uso Público Para otimizar a convergência do protocolo EAPS os equipamentos intermediários, designados transit, enviam uma BPDU especial para o master em caso de falha de qualquer link, fazendo com que a convergência seja de aproximadamente 50ms. Este tempo pode variar, de acordo com as configurações utilizadas nos switches, como por exemplo a quantidade de vlans ou tipo de interface em uso. Se o EAPS for o único protocolo de proteção utilizado no switch, todas as vlans (exceto a de controle) deverão estar protegidas pelo EAPS. Caso contrário, se uma VLAN não protegida for criada no anel, o mesmo entrará em loop. Um artifício muito utilizado, para balaceamento de carga no anel, é a criação de duas instâncias de EAPS, cada uma em um sentido do anel. Desta forma uma instância protege um grupo de vlans, e a outra as demais. A porta primária de uma instância do EAPS será a secundária da outra, e vice-versa. Esta é uma forma de otimizar a capacidade do anel, podendo-se ter até o dobro da capacidade de cada link, como por-exemplo num anel de 1 Gbps pode-se transportar até 2 Gbps, dependendo também dos pontos de entrada de tráfego. Isto pois neste caso tem-se um link de 1 Gbps full duplex. Topologia: Firmware Version Date 7.8.6 14/07/2010 DATACOM 2 Documento de Uso Público Podem haver algumas diferenças nos logs e debugs de firmwares anteriores a 7.8.2. Nesta versão foram feitas melhorias, que deixaram os logs e debugs mais completos e claros. Desenvolvimento Capacidade de instâncias, de acordo com o modelo: Modelo Instâncias Dm3000 16 Dm4000 64 Exemplo 1: EAPS com uma instância Neste primeiro exemplo será demonstrada uma topologia, onde quatro switches dm3000 estão ligados em anel, e protegidos por uma intância de EAPS. Baseados nesta topologia, mostra-se a utilização dos debugs, para troubleshooting e as configurações necessárias para utilização do EAPS. DATACOM 3 Documento de Uso Público Configuração: interface vlan 4094 name CONTROL_EAPS1 set-member tagged ethernet range 1/27 1/28 ! vlan-group 1 vlan-group 1 vlan range 1 4093 ! eaps 1 eaps 1 mode master eaps 1 name EAPS1 eaps 1 port primary ethernet 1/28 eaps 1 port secondary ethernet 1/27 eaps 1 control-vlan id 4094 eaps 1 protected-vlans vlan-group 1 ! As configurações de hellotime e failtime, por default, são de 1 segundo e 3 segundos, respectivamente. Estas configurações podem ser visualizadas como demonstrado abaixo: DM3000_A#show eaps detail Domain ID: Domain Name: State: Mode: Hello Timer interval: Fail Timer interval: Pre-forwarding Timer: Last update from: Last seq. number received: Primary port: Secondary port: Control VLAN ID: Protected VLAN group IDs: 1 EAPS1 Complete Master 1.0 sec 3.0 sec 6 sec (learned) Remaining: 00:04:DF:12:8A:29, Eth 1/27, 4512 Eth1/28 Port status: Eth1/27 Port status: 4094 1 0 sec Fri Jun 25 17:08:22 2010 Up Blocked Este comando "show eaps detail", mostra as informações completas de cada instância do EAPS, bem como número da instância, nome do domínio, estado do EAPS, se é master ou transit, hellotime e failtime, pre-forwarding timer, horário da última BPDU recebida, ID da última BPDU, portas primária e secundária, vlan de controle e vlan-groups protegidos. Uma forma mais simplificada para analisar-se o estado do EAPS é com um "show eaps": DM3000_A#show eaps EAPS information: Mode: M - Master T - Transit ID -1 DATACOM Domain --------------EAPS1 State --------------Complete 4 Mode ---M Pri Port -----1/28 Sec Port -----1/27 Ctrl VLAN ---4094 Protected Groups/VLANs -----------1/4093 Documento de Uso Público Para alterar a configuração padrão de hellotime e failtime para milessegundos, deve-se configurar em "0" segundos e então selecionar quantos milesegundos. DM3000_A#configure DM3000_A(config)#eaps 1 failtime <?> 0-60 Number of seconds DM3000_A(config)#eaps 1 failtime 0 milliseconds <?> 0-900 Fraction of seconds (valid only for seconds equal to zero) DM3000_A(config)#eaps 1 hellotime 0 milliseconds <?> 0-900 Fraction of seconds (valid only for seconds equal to zero) Analisando e entendo os logs Logs do master: Quando alguma inerface do anel mudar seu estado para down, o master recebe um aviso: Jun 25 17:28:34 DM3000_106 : <4> EAPS 1 (EAPS1): LINK DOWN packet received on Eth 1/27 Se um pacote for perdido, o master irá registrar 1 failcount e o ID do pacote perdido. Esta mensagem também pode ser gerada para o atraso no recebimento de um pacote de controle acima do esperado: Jun 25 17:28:33 DM3000_106 : <4> EAPS 1 (EAPS1): Possible control packet loss (FailCount=1.0s, Seq=5612) Caso 3 pacotes sejam perdidos na sequência, no failtime padrão, o EAPS irá falhar: Jun Jun Jun Jun Jun 28 28 28 28 28 11:11:14 11:11:15 11:11:16 11:11:16 11:11:27 DM3000_106 DM3000_106 DM3000_106 DM3000_106 DM3000_106 : : : : : <4> <4> <4> <4> <6> EAPS EAPS EAPS EAPS EAPS 1 1 1 1 1 (EAPS1): Possible control packet loss (FailCount=1.0s, Seq=14668) (EAPS1): Possible control packet loss (FailCount=2.0s, Seq=14669) (EAPS1): Possible control packet loss (FailCount=3.0s, Seq=14670) (EAPS1) changed to state FAILED. (EAPS1) changed to state COMPLETE. Logs do transit: Quando um ou vários pacotes são perdidos, é registrado um log com o primeiro pacote perdido da sequência. Quando voltar a receber os pacotes, então é registrado um log com o primerio pacote da sequencia recebido. Jun 28 11:11:13 DM3000L2_104 : <4> EAPS 1: Possible HEALTH CHECK packet loss (Seq=14668) Jun 28 11:11:27 DM3000L2_104 : <4> EAPS 1: Got HEALTH CHECK packet (Seq=14681) Analisando e entendo os debugs Debug eaps do master: Utilizando o "debug eaps", pode-se ver os pacotes sendo recebidos pela interface 1/27 e sendo enviados pela 1/28. Pode-se observar que a BPDU de número 14668 é enviada, mas não é recebida. Após a perda de três pacotes, o estado muda de complete para failed, e a porta secundária (1/27) é desbloqueada. Ocorre então um flush nas tabelas L2 e L3, onde os endereços MAC das portas primária e secundária são apagados e reaprendidos. Quando o master voltar a receber as BPDUs, o estado irá voltar para complete, a porta secundária é bloqueada e é feito um novo flush nas tabelas L2 e L3 das portas envolvidas no anel. DATACOM 5 Documento de Uso Público Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 11:11:11.914999 11:11:11.921823 11:11:13.015012 11:11:14.116302 11:11:14.117561 11:11:15.215032 11:11:15.216186 11:11:16.315016 11:11:16.316162 11:11:16.424822 11:11:16.425806 11:11:16.426825 11:11:16.428090 11:11:16.429247 11:11:17.565043 11:11:18.665045 11:11:19.765057 11:11:20.865043 11:11:21.965055 11:11:23.065051 11:11:24.165055 11:11:25.265031 11:11:26.365055 11:11:27.465042 11:11:27.481463 11:11:27.481716 11:11:27.482646 11:11:27.483524 11:11:27.484510 11:11:27.485753 11:11:27.511262 11:11:28.565056 11:11:28.573336 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Complete Seq=14667 (EAPS1) <Eth 1/27>: Rx Type=HEALTH_CHECK State=Complete Seq=14667 (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Complete Seq=14668 (EAPS1): Warning: Possible control packet loss (FailCount=1.0s, Seq=14668) (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Complete Seq=14669 (EAPS1): Warning: Possible control packet loss (FailCount=2.0s, Seq=14669) (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Complete Seq=14670 (EAPS1): Warning: Possible control packet loss (FailCount=3.0s, Seq=14670) (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Complete Seq=14671 (EAPS1) State Change: Complete -> Failed (EAPS1) <Eth 1/27>: Unblocked (EAPS1) <Eth 1/28>: Tx Type=RING_DOWN State=Failed Seq=14671 (EAPS1) <Eth 1/27>: Tx Type=RING_DOWN State=Failed Seq=14671 (EAPS1) <Eth 1/28>: L2/L3 Table Flush (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Failed Seq=14672 (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Failed Seq=14673 (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Failed Seq=14674 (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Failed Seq=14675 (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Failed Seq=14676 (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Failed Seq=14677 (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Failed Seq=14678 (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Failed Seq=14679 (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Failed Seq=14680 (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Failed Seq=14681 (EAPS1) <Eth 1/27>: Rx Type=HEALTH_CHECK State=Failed Seq=14681 (EAPS1) State Change: Failed -> Complete (EAPS1) <Eth 1/27>: Blocked (EAPS1) <Eth 1/28>: Unblocked (EAPS1) <Eth 1/28>: Tx Type=RING_UP State=Complete Seq=14681 (EAPS1) <Eth 1/27>: L2/L3 Table Flush (EAPS1) <Eth 1/27>: Rx Type=RING_UP State=Complete Seq=14681 (EAPS1) <Eth 1/28>: Tx Type=HEALTH_CHECK State=Complete Seq=14682 (EAPS1) <Eth 1/27>: Rx Type=HEALTH_CHECK State=Complete Seq=14682 Debug eaps do transit: O debug no switch TRANSIT é bem semelhante sendo que a única diferença é que não existe bloqueio e desbloqueio de portas. Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 11:11:11.919190 11:11:11.919671 11:11:13.511686 11:11:16.429254 11:11:16.429734 11:11:16.430934 11:11:16.469446 11:11:27.470075 11:11:27.470539 11:11:27.478744 11:11:27.489374 11:11:27.489850 11:11:27.491048 11:11:27.526352 11:11:28.570019 : : : : : : : : : : : : : : : EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS EAPS 1 <Eth 1/27>: Rx Type=HEALTH_CHECK State=Complete 1 <Eth 1/28>: Tx Type=HEALTH_CHECK State=Complete 1: Warning: possible HEALTH CHECK packet loss (Seq=14668) 1 <Eth 1/28>: Rx Type=RING_DOWN State=Failed 1 <Eth 1/27>: Tx Type=RING_DOWN State=Failed 1 <Eth 1/28>: L2/L3 Table Flush 1 <Eth 1/27>: L2/L3 Table Flush 1 <Eth 1/27>: Rx Type=HEALTH_CHECK State=Failed 1: Got HEALTH CHECK packet (Seq=14681) 1 <Eth 1/28>: Tx Type=HEALTH_CHECK State=Failed 1 <Eth 1/27>: Rx Type=RING_UP State=Complete 1 <Eth 1/28>: Tx Type=RING_UP State=Complete 1 <Eth 1/28>: L2/L3 Table Flush 1 <Eth 1/27>: L2/L3 Table Flush 1 <Eth 1/27>: Rx Type=HEALTH_CHECK State=Complete Seq=14667 Seq=14667 Seq=14671 Seq=14671 Seq=14681 Seq=14681 Seq=14681 Seq=14681 Seq=14682 Exemplo 2: EAPS com duas instância Como já mencionado neste documento, a utilização de duas instâncias em um anel é uma forma de ampliar a capacidade do anel. Analisando-se a topologia abaixo, caso fosse utilizada apenas uma instância, todo o tráfego dos switches B, C e D se somariam no link final, entre A e B, ou A e D. Usando duas instâncias, podemos fazer uma balanceamento deste tráfego, encaminhando parte do tráfego do switch C no sentido de D e outra parte no sentido de B. E até mesmo encaminhar algum tráfego de B ou D pelo sentido inverso (caminho mais longo), caso o link ligado diretamente ao master já esteja no limite de sua capacidade. DATACOM 6 Documento de Uso Público A necessidade de refazer o balanceamento do tráfego, quando o link atinge seu limite, é muito comum. Para isto basta saber as vlans que necessitarão o redirecionamento no anel, e então movê-las para o vlan-group protegido pela outra instância e fazer um "clear mac-address-table", para fazer um flush forçado nas tabelas de L2, fazendo-se com que os endereços MAC sejam aprendidos de acordo com o novo sentido do anel. Para esta alteração, todo procedimento é realizado no MASTER, não necessitando qualquer interação nos switches TRANSIT. O ideal é que depois de executada a manobra, por uma questão de organização, se padronize as configurações, deixando todos membros do anel com as mesmas configurações. Configuração: interface vlan 4093 name CONTROL_EAPS2 set-member tagged ethernet range 1/27 1/28 ! interface vlan 4094 name CONTROL_EAPS1 set-member tagged ethernet range 1/27 1/28 ! vlan-group 1 vlan-group 1 vlan range 1 2000 vlan-group 2 vlan-group 2 vlan range 2001 4092 ! DATACOM 7 Documento de Uso Público eaps eaps eaps eaps eaps eaps eaps ! eaps eaps eaps eaps eaps eaps eaps 1 1 1 1 1 1 1 mode master name EAPS1 port primary ethernet 1/28 port secondary ethernet 1/27 control-vlan id 4094 protected-vlans vlan-group 1 2 2 2 2 2 2 2 mode master name EAPS2 port primary ethernet 1/27 port secondary ethernet 1/28 control-vlan id 4093 protected-vlans vlan-group 2 DM3000_A#show eaps EAPS information: Mode: M - Master T - Transit ID -1 2 Domain --------------EAPS1 EAPS2 State --------------Complete Complete Mode ---M M Pri Port -----1/28 1/27 Sec Port -----1/27 1/28 Ctrl VLAN ---4094 4093 Protected Groups/VLANs -----------1/1999 1/2092 Exemplo 3: EAPS no EDD A utilização do EAPS na linha de equipamentos EDD (Ethernet Demarcation Device) é feita da mesma forma que nos switches, porém neste equipamento existe uma feature diferente conhecida como "hw-forwarding", que visa melhorar a performance da convergência do anel. Como já foi explicado, cada switch membro do anel recebe a BPDU e trata este pacote na CPU. Esta configuração de "hw-forwarding" desabilita o tratamento desta BPDU pela CPU, enviando estes pacotes como um DLF e evitando o delay de processamento da CPU. A única questão é que na utilização desta funcionalidade deve-se cuidar as limitações de storm-control das portas, que por default no EDD são de 256Kbs. Então se o tráfego DLF estiver perto deste limite, estas BPDUs poderão ser perdidas e causar a abertura do anel, o que ocasionaria um loop na rede. Outra questão a ser salientada é que esta limitação de DLF é feita em Kbps e não em pacotes como nos switches. Desta forma, esta limitação fica amarrada ao tamanho dos pacotes que estão trafegando na rede. Assim, se o "hw-forwarding" for utilizado, aconselha-se desabilitar o storm-control das portas do anel ou aumentar este limite para uma capacidade compatível com o fluxo de tráfego desta rede. Neste caso, é importante utilizar o "cpu-dos-protect" para limitar o tráfego que é encaminhado para CPU, pois como as proteções das portas estarão desabilitadas pode-se ter uma sobrecarga no tráfego encaminhado para CPU. Por exemplo: DATACOM 8 Documento de Uso Público Se forem enviados frames de 64B, então 64*8=512b, multiplicados pelo número de pacotes (300 por exemplo) 512*300=153,6Kbs. Configuração do "hw-forwarding" (a configuração deve ser aplicada em todo o anel): EDD#configure EDD(config)#eaps control-vlan failtime hellotime hw-forwarding mode name port protected-vlans <enter> 1 <?> Configure the control VLAN for the domain Maximum time to wait for health-check packets Health-check packet transmission period HW forwarding of packets in transit mode Configure the switch mode for the domain Rename the EAPS domain Configure the domain member ports Add protected VLANs to the domain Create a new EAPS domain EDD-2(config)#eaps 1 hw-forwarding <?> <enter> no further known parameters Para desabilitar o storm-control: EDD#configure EDD(config)#interface ethernet 5 EDD-2(config-if-eth-1/5)#no switchport storm-control <?> broadcast Disable broadcast storm control dlf Disable storm control for Destination Lookup Failure packets (unicast/multicast) rate Set the kbit/s limit to default value EDD(config-if-eth-1/5)#no switchport storm-control dlf <?> <enter> no further known parameters Considerações Finais Não existe uma limitação quanto ao número máximo de switches que podem ser utilizados em um anel EAPS. Em uma rede controlada pode-se observar que o envio e recebimento das BPDUs é muito eficiente, mesmo em um anel com uma grande quantidade de switches. Porém, salienta-se que em uma topologia onde existem muitos clientes conectados, passando diversos tipos de tráfego, não é possível prever o comportamento da CPU de cada switch membro deste anel se houverem endereços IP nelas ou mesmo na gerência. Se por acaso um switch estiver tratando muitos pacotes na CPU, ou estiver em loop, ele pode atrasar o envio das BPDUs, causando a abertura do anel sendo que o anel está completo. Então quanto maior o anel, maior a probabilidade ocorrerem atrasos na entrega e processamento de pacotes de controle do EAPS. Em condições normais um Dm3000 leva em média 6.0ms para tratar uma BPDU, sendo que isto inclui recebê-la, tratá-la e encaminhar para interface correta. Se a CPU estiver sob ataque e num extremos consumo de 100% levará em média 150ms para fazer a mesma operação, podendo levar até 550ms como pior caso. Este tempo deve ser levado em consideração na hora do planjamento da topologia, considerando que se dois switches atingirem o pior caso ao mesmo tempo, uma BPDU será perdida. A solução para casos onde existem vários switches em um mesmo anel é aumentar o failtime assim como adotar as medidas de proteção descritas em outro documento.No EDD os tempos são de 5.3ms em condições normais e 3.5ms utilizando o hw-forwarding. No dm4004 os tempos são de 5.3ms para condições normais. DATACOM 9 Documento de Uso Público Com estes tempos normais conhecidos, sabe-se que não há problemas para criar anéis grandes como com 50 elementos, por exemplo, desde que tomados os cuidados necessários. As configurações e comandos demonstrados no documento são válidas tanto para a linha de switches Dm3000, Dm4000, quanto para o EDD. DATACOM 10 Documento de Uso Público