Vai al contenuto principale
Il software SDLMUX combina due schede di rete in un'unica interfaccia IP, garantendo una funzionalità di failover nel caso in cui il collegamento sulla scheda attiva si interrompa o la scheda smetta di funzionare. Una volta configurato, non richiede praticamente alcuna gestione, ma è necessario tenere presente alcuni aspetti.
Innanzitutto, SDLMUX non offre alcuna funzione di bilanciamento del carico; tutto il traffico viene trasmesso e ricevuto dall'adattatore attivo.
In secondo luogo, sull'hardware ftServer , l'adattatore attivo ha un indirizzo MAC della forma 00:00:A8:4v:wx:yz. La sequenza 00:00:A8 è l'identificatore univoco Stratus (OUI) Stratus , assegnato dall'IEEE. La "v" è un indice basato sull'ordine in cui sono stati inizializzati i dispositivi SDLMUX, a partire da 0. Il valore "wx:yz" si basa sul numero di serie del sistema. L'indirizzo di standby differisce dall'indirizzo attivo solo nel nibble superiore del quarto byte: invece di un 4, è un 6. Inoltre, la differenza tra gli indirizzi MAC di due adattatori attivi (o in standby) sullo stesso modulo risiede solo nel nibble inferiore del quarto byte. Il modo più semplice per ottenere un elenco di tutti gli indirizzi MAC è utilizzare la richiesta analyze_system “dump_sdlmux” con filtro su “MAC”, come mostrato nella figura 1.
as: match 'MAC' ; dump_sdlmux
MAC address               = 0000A8405A8B
MAC address               = 0000A8605A8B
MAC address               = 0000A8415A8B
MAC address               = 0000A8615A8B
MAC address               = 0000A8425A8B
MAC address               = 0000A8625A8B
MAC address               = 0000A8435A8B
MAC address               = 0000A8635A8B
as:
Figura 1
I soli indirizzi MAC non sono molto utili; effettuando una ricerca per "MAC" o "#" si ottengono gli indirizzi MAC e i nomi dei dispositivi SDLMUX e delle schede di rete. Si noti che questo elenco non conterrà alcuna scheda di rete che non faccia parte di un gruppo SDLMUX.
as: match 'MAC' -or '#' ; dump_sdlmux
sdlmux device             = #sdlmuxA.m16.10-5-0.11-5-0
MAC address               = 0000A8405A8B
Interface device = %phx_vos#enetA.m16.10-5-0
MAC address               = 0000A8605A8B

Interface device          = %phx_vos#enetA.m16.11-5-0

sdlmux device             = #sdlmuxA.m16.10-5-1.11-5-1
MAC address               = 0000A8415A8B
Interface device = %phx_vos#enetA.m16.10-5-1
MAC address               = 0000A8615A8B

Interface device          = %phx_vos#enetA.m16.11-5-1

 

sdlmux device             = #sdlmux.m16.11-2
MAC address               = 0000A8425A8B
Interface device = %phx_vos#enet.m16.11.11-2
MAC address               = 0000A8625A8B

Interface device          = %phx_vos#enet.m16.10.11-2

 

sdlmux device             = #sdlmux.m16.11-3
MAC address               = 0000A8435A8B
Interface device = %phx_vos#enet.m16.10.11-3
MAC address               = 0000A8635A8B
Interface device          = %phx_vos#enet.m16.11.11-3
as:
Figura 2
In terzo luogo, le schede di rete SDLMUX inviano frame Ethernet 802.2 LLC ai propri partner per assicurarsi che il percorso di rete funzioni correttamente. Cinque serie di questi frame di test vengono inviate a intervalli di tre secondi, seguite da un intervallo di 33 secondi. La traccia 1 mostra tre cicli di questo schema. La traccia 1 mostra anche il frame effettivo proveniente dalla scheda attiva (frame 1) e dalla scheda di riserva (frame 2). Ho evidenziato il frame successivo all'intervallo di 33 secondi solo per rendere i cicli più facili da leggere. Questi non sono frame Ethernet di tipo II o pacchetti IP e gli switch collegati alle schede di rete e qualsiasi switch lungo il percorso tra le due schede devono avere una configurazione che non blocchi questi frame 802.2 LLC.

 

No. delta Time       Source              Destination   Protocol Info
1 0.000000   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
0000 00 00 a8 62 5a 8b 00 00 a8 42 5a 8b 00 1b ac ac   ...bZ....BZ.....
0010 03 31 32 39 2e 31 2e 30 00 00 00 00 00 00 00 00   .129.1.0........
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0030 00 00 00 00 00 00 00 00 00 00 00 00 b1 60 74 48   .............`tH
2 0.000007   StratusC_62:5a:8b     StratusC_42:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
0000 00 00 a8 42 5a 8b 00 00 a8 62 5a 8b 00 1b ac ac   ...BZ....bZ.....
0010 03 31 32 39 2e 31 2e 30 00 00 00 00 00 00 00 00   .129.1.0........
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0030 00 00 00 00 00 00 00 00 00 00 00 00 45 23 24 c0   ............E#$.
3 2.999945   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
4 0.000007   StratusC_62:5a:8b     StratusC_42:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
5 2.999943   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
6 0.000007   StratusC_62:5a:8b     StratusC_42:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
7 2.999882   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
8 0.000007   StratusC_62:5a:8b     StratusC_42:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
9 2.999946   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command

10 0.000009   StratusC_62:5a:8b     StratusC_42:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command

11 32.99900   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
12 0.000007   StratusC_62:5a:8b     StratusC_42:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
13 2.999945   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
14 0.000007   StratusC_62:5a:8b     StratusC_42:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
15 2.999938   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
16 0.000007   StratusC_62:5a:8b     StratusC_42:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
17 2.999942   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
18 0.000007   StratusC_62:5a:8b     StratusC_42:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
19 2.999943   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
20 0.000008   StratusC_62:5a:8b     StratusC_42:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
21 32.99900   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
22 0.000007   StratusC_62:5a:8b     StratusC_42:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
23 2.999944   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
24 0.000007   StratusC_62:5a:8b     StratusC_42:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
25 2.999947   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
26 0.000007   StratusC_62:5a:8b     StratusC_42:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
27 2.999938   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
28 0.000007   StratusC_62:5a:8b     StratusC_42:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
29 2.999946   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
30 0.000010   StratusC_62:5a:8b     StratusC_42:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
31 32.99900   StratusC_42:5a:8b     StratusC_62:5a:8b LLC   U, func=UI; DSAP 0xac Individual, SSAP 0xac Command
Traccia 1
Si noti che non è possibile utilizzare packet_monitor per visualizzare questi frame di test. I frame vengono inviati al di sotto del punto in cui packet_monitor si inserisce nello stack e SDLMUX li rimuove dallo stack prima che packet_monitor possa leggerli.
In quarto luogo, se ogni scheda è collegata a uno switch diverso e il collegamento tra tali switch si interrompe o, per qualche altro motivo, i frame di test non riescono a passare, nel syserr_log verrà visualizzato un messaggio simile a quello della figura 3. A partire dalle versioni 16.2.1ak e 17.0.0ah, in caso di errore di un frame di test, SDLMUX invia una richiesta ARP all'ultimo host che è stato raggiunto con successo tramite ARP sull'interfaccia sospetta. Se riceve una risposta, capisce che l'adattatore attivo funziona, quindi resetta l'adattatore di standby per cercare di farlo funzionare. Se c'è un problema di rete che blocca i frame di test, il ripristino dell'adattatore non serve e l'adattatore alla fine va in MTBF, vedi il timestamp 08:08:10 nella figura 3. Il comando dlmux_admin segnalerà l'adattatore guasto come DOWN, figura 4, e una traccia non mostrerà alcun frame di test poiché a questo punto non c'è nulla da testare. Se non viene ricevuta una risposta ARP o il problema si verifica su una versione che non invia la richiesta ARP, SDLMUX eseguirà il failover sugli adattatori e disattiverà il nuovo adattatore di standby. Se durante il ciclo successivo i frame di test falliscono nuovamente e non viene ricevuta alcuna risposta ARP, il failover e la disattivazione verranno eseguiti nuovamente. Alla fine un adattatore entrerà in MTBF.
08:05:02 WARNING(64): SDLMUX: the devices in group #sdlmux.m16.11-2
08:05:02 WARNING(65): SDLMUX: are not exchanging test packets with each other
08:05:02 WARNING(66): SDLMUX: but the active adapter is able to communicate wi
+th other hosts!
08:05:02 WARNING(67): SDLMUX: This indicates some sort of network or cabling i
+ssue!
08:05:02 WARNING(68): SDLMUX: breaking adapter %phx_vos#enet.m16.10.11-2: XID
+communication issue
08:05:02 PCI 10/11/2           enet.m16.10.11-2 Break Requested
08:05:02 WARNING(69): SDLMUX: device name %phx_vos#enet.m16.10.11-2 is broken
08:05:02 PCI 10/11/2           enet.m16.10.11-2 Adding
08:05:04 PCI 10/11/2           enet.m16.10.11-2 Online
08:05:04 WARNING(70): genet in (10/11/2) Link is Up.
08:05:04 WARNING(71): SDLMUX: device %phx_vos#enet.m16.10.11-2 back to servic
+e
08:05:49 WARNING(72): SDLMUX: breaking adapter %phx_vos#enet.m16.10.11-2: XID
+communication issue
08:05:49 PCI 10/11/2           enet.m16.10.11-2 Break Requested
08:05:49 WARNING(73): SDLMUX: device name %phx_vos#enet.m16.10.11-2 is broken
08:05:49 PCI 10/11/2           enet.m16.10.11-2 Adding
08:05:52 PCI 10/11/2           enet.m16.10.11-2 Online
08:05:52 WARNING(74): genet in (10/11/2) Link is Up.
08:05:52 WARNING(75): SDLMUX: device %phx_vos#enet.m16.10.11-2 back to servic
+e
08:07:22 WARNING(76): SDLMUX: the devices in group #sdlmux.m16.11-2
08:07:22 WARNING(77): SDLMUX: are not exchanging test packets with each other
08:07:22 WARNING(78):  SDLMUX: but the active adapter is able to communicate wi
+th other hosts!
08:07:22 WARNING(79): SDLMUX: This indicates some sort of network or cabling i
+ssue!
08:07:22 WARNING(80): SDLMUX: breaking adapter %phx_vos#enet.m16.10.11-2: XID
+communication issue
08:07:22 PCI 10/11/2           enet.m16.10.11-2 Break Requested
08:07:22 WARNING(81): SDLMUX: device name %phx_vos#enet.m16.10.11-2 is broken
08:07:22 PCI 10/11/2           enet.m16.10.11-2 Adding
08:07:25 PCI 10/11/2           enet.m16.10.11-2 Online
08:07:25 WARNING(82): genet in (10/11/2) Link is Up.
08:07:25 WARNING(83): SDLMUX: device %phx_vos#enet.m16.10.11-2 back to servic
+e
08:08:10 WARNING(84): SDLMUX: breaking adapter %phx_vos#enet.m16.10.11-2: XID
+communication issue
08:08:10 PCI 10/11/2           enet.m16.10.11-2 Break Requested
08:08:10 PCI 10/11/2                             MTBF Failure
08:08:10 WARNING(85): SDLMUX: device name %phx_vos#enet.m16.10.11-2 is broken
Figura 3
dlmux_admin #sdlmux.m16.11-2 sdlmux_status
Group Name:          #sdlmux.m16.11-2
Device Name:         %phx_vos#enet.m16.11.11-2
Adapter State:       ACTIVE   UP
Partner:             %phx_vos#enet.m16.10.11-2
Partner State:       DOWN
Figura 4
Per rimettere in servizio l'adattatore, è necessario aggiungerlo nuovamente tramite il comando board_admin. Ovviamente, se lo si fa senza risolvere il problema di fondo, l'adattatore smetterà di funzionare di nuovo.
board_admin 10/11/2 add
board_admin
device_id:    10/11/2
action:       add
Do you want to continue? (yes, no) yes
Command completed.
Figura 5
In quinto luogo, poiché l'adattatore attivo ha sempre lo stesso indirizzo MAC, l'effetto di un failover consiste nello spostare l'indirizzo MAC da una porta dello switch a un'altra. Qualsiasi impostazione di sicurezza sulle porte dello switch deve consentire questa modifica. Inoltre, le porte dello switch possono essere configurate per comunicare con altre porte dello switch, negoziando varie impostazioni. Queste operazioni possono essere attivate quando lo switch rileva un cambiamento nella topologia, come un nuovo indirizzo MAC o il ripristino di un collegamento. Finché queste impostazioni non vengono negoziate, lo switch potrebbe non trasmettere i frame regolari. Le porte dello switch collegate agli adattatori SDLMUX devono essere configurate in modo da non eseguire queste negoziazioni. Inoltre, le porte dello switch collegate agli adattatori SDLMUX devono essere configurate in modo da non eseguire il protocollo Spanning Tree o da saltare le fasi di apprendimento e ascolto (questo è chiamato "portfast" da Cisco). Durante le fasi di apprendimento e ascolto, lo switch non trasmetterà i normali frame di dati. In casi estremi, il ritardo causato da queste impostazioni può essere così lungo che SDLMUX attiva un altro failover.
Infine, è necessario monitorare lo stato delle connessioni delle schede di rete per assicurarsi che entrambe siano attive. Il malfunzionamento di una connessione non comporta l'invio di home , grazie alla tolleranza ai guasti del sistema, non si verifica alcuna perdita di connettività. Ho trattato questo argomento in un precedente post del blog; si veda "Monitoraggio dello stato delle schede di rete".