Antwort:
"Datacenter Troubleshooting Guide" - ein Blog von Gilles Dufour.
Klebrigkeit (2. Teil)
Die Fehlerbehebung ist keine einfache Aufgabe.
Es gibt keine Debugging-Option, um zu erfahren, warum ACE sich entschied, eine Verbindung zu einem bestimmten Server zu senden.
Es gibt ein paar häufige Fehler, die wir erkennen können, wenn wir uns Statistiken ansehen.
Hier ist die bekannteste.
1. Was auch immer der klebrige Typ, den Sie ausgewählt haben, wenn Grund, nicht an einen Server zu haften ist, wenn die klebrige Eintrag abgelaufen ist oder wurde entfernt, weil es an klebrigen Ressourcen. Überprüfen Sie also Ihre sticky resource allocation mit dem folgenden Befehl :
AceC6k2 Admin.# np1 me-stats anzeigen "-slb -v"
LB-Leistungsstatistiken unter Adresse 0x82e05000
LB-Leistungsstatistiken unter Adresse 0x82e05000
LB-Statistik
--------------
(Kontext ALLE Statistiken)
...
Zur Wiederverwendung gestohlene Num: 0 0
Num Aktiver Sticky Entry: 0 0
Num Aktiver Reverse Sticky-Eintrag: 0 0
Anzahl aktiver Verbindungen: 0 0
Kostenlose Sticky Entry Count: 1794111 0
Anzahl Gruppen- oder Timeout-Knoten: 4 0
Anzahl statischer Einträge: 0 0
Konfigurierter Eintrag: 1794111 0
Vorherige Ressourcenanforderung: 1794111 0
Max. Remote-Speicher löschen:
0 0
Die "Num Stolen For Reuse" zeigt an, dass Sie nicht genug klebrige Ressource haben und alte klebrige Einträge gelöscht wurden, um neue zu speichern. Dies ist ein möglicher Grund für schwierige Misserfolge. Um dieses Problem zu lösen, können Sie entweder die sticky-Ressource erhöhen oder für sticky-Quell-IP, können Sie die Maske ändern, sodass ein Eintrag für alle Clients, die zu einem Subnetz gehören, verwendet werden kann.
"Drop Max Remote Stack" zählt die Anzahl der Sticky-Lookups, die fehlschlugen, weil die Kommunikation zwischen internen Komponenten zu langsam ist, um die gesamte Sticky-Lookup zu verarbeiten.
2. Wenn Sie irgendeine Form von HTTP Stickyness (Cookie, Header, ...) konfiguriert haben, ist ein Grund, um Sticky-Fehler zu sehen, http-Parsing-Fehler. ACE muss den HTTP-Header analysieren, um die für die Stickyness erforderlichen Informationen (d. h.: Cookie). Wenn die HTTP-Anfrage falsch formatiert ist, kann ACE die Daten nicht richtig analysieren und versucht nicht einmal, eine sticky lookup durchzuführen. Überprüfen Sie mit dem Befehl :
AceC6k2/Admin# show np 1 me-stats "-shttp -v" | in Teilen
Zweite Durchlauf-Analyse: 0 0
Statische Analysefehler: 0 0
Max. Parselenfehler: 0 0
AceC6k2/Admin#
Wenn Sie "Static parse errors" (Statische Parserfehler) sehen, die Ihr Sticky-Failure erklären könnten. Leider gibt es hier keine Lösung. Mit DDtT CSCtj42969
haben wir einen neuen Befehl hinzugefügt, um mit der Analyse von HTTP-Daten fortzufahren, auch wenn ein Fehler erkannt wurde. Weitere Informationen finden Sie im vorherigen Blog-Beitrag.
"Max parselen errors" ist das Ergebnis von zu großen HTTP-Headern und den Daten, die wir außerhalb unseres Puffers benötigen. Sie können die Größe des Parsing-Puffers mit einer Parameterzuordnung anpassen
AceC6k2/Admin(config)# Parameterzuordnungstyp http ParseLen
AceC6k2/Admin(config-parammap-http)# set ?
content-maxparse-length Inhalt konfigurieren maxparse-Länge
header-maxparse-length Header konfigurieren maxparse-Länge
sekundäre Cookie-Delimiter URL/COOKIE-Delimiter (Cookie-in-url-query) konfigurieren
Natürlich können die oben stehenden Statistiken nicht alle möglichen heiklen Fragen erklären. Wir müssen oft Sniffer-Spuren erfassen und regelmäßig den klebrigen Tisch ablegen, um zu verstehen, was vor sich geht.
Aus diesem Grund habe ich in Version 4.1.x einen neuen Befehl eingeführt, um Verbindungen aufzulisten, die mit einem bestimmten Sticky-Eintrag verknüpft sind.
CSCti03084
: Enh: show conn sticky - Display-Verbindungen verbunden mit einem Sticky
Hier erfahren Sie, wie Sie diesen neuen Befehl verwenden.
Listen Sie zunächst die sticky-Einträge im "Detail"-Modus auf (der Befehl ist ausgeblendet), und extrahieren Sie die interne Eintrags-ID.
Scimitar1/Admin# show sticky data detail
processor (0/0): 0
results index: 1 of 1
sticky group: RESERVATIONS_STICKY
sticky type: IP
rserver: vmware-46
realPort: 80
timeout (secs): 1200
sticky-entry: 192.168.20.0
internal entry-id: 0x200004
time-to-expire (secs): 1198
stcky-hit-count: 63402
active-conn-count: 1
in-use reference count: 0
static entry: FALSE
reverse entry: FALSE
active entry: TRUE
timeout-active-conns: FALSE
created-from-HA-peer: FALSE
HA-replicated-at-least-once: TRUE
With the internal entry-id you can list all connections using that entry.
Scimitar1/Admin# show conn sticky 0x200004
conn-id np dir proto vlan source destination state
----------+--+---+-----+----+---------------------+---------------------+------+
653622 1 in TCP 20 192.168.20.45:47377 192.168.20.15:80 SYNSEEN
658234 1 out TCP 40 192.168.40.46:80 192.168.20.45:47377 INIT
Scimitar1/Admin#
Sie können auch die interne Eintrags-ID abrufen, die von einer Verbindung verwendet wird.
Dazu müssen Sie die conn-id und den NP kennen, dem die Verbindung zugeordnet ist.
switch/Admin# show np 1 me-stats "-c 242"
Connection ID:seq: 242[0xf2].0
Other ConnID : 243[0xf3].0
Proxy ConnID : 0[0x0].0
Next Q : 0[0x0]
192.168.20.45:44425 -> 192.168.20.15:80 [RX-NextHop: TX] [TX-NextHop: TX]
Flags: PAT: No DynNAT: No Implicit PAT: No On_Reuse: No
L3 Protocol : IPv4 L4 Protocol : 6
Inbound Flag : 1
Interface Match : Yes
Interface MatchID: 3
EncapsID:ver : 45:0 TCP ACK delta : 0xc8228d7e
MSS : 1460 TOS Stamp : 0
Repeat mode : No Punt Flag : No
TOS Stamp : No TCP Window Check: No
ACE ID : 98 NAT Policy ID : 0
Post NAT hop : 0
Packet Count : 5 Byte Count : 309
TCP Information: (State = 3)
Window size : 6432 Window scale : 0
FIN seen : No FIN/ACK seen : No
FIN/ACK exp : No Close initiator : No
FIN/ACK expval: 5b40000 Last seq : 9f50cfc0
timestamp_delta: 0 Last ack : 947b3980
Data/ACK Trigger : 947b3980 Trigger Status : 1
Timestamp : 39cd8
TCP options negotiated:
Sack:Clear TS:Clear Windowscale: Clear
Reserved: Allow Exceed MSS: Deny Window var: Allow
Sticky Internal Entry-id : 0x200006
Raw Connection Entry
0000 0x00000000 0xc0a8142d 0xc0a8140f 0x06090003
0010 0xad890050 0xc8228d7e 0x002d0000 0x05b40000
0020 0x000000f3 0x00000000 0x080a2480 0x24450000
0030 0x00000005 0x00000135 0x19200030 0x05b40000
0040 0x9f50cfc0 0x947b3980 0x00039cd8 0x00000000
0050 0x00000062 0x947b3980 0x00039cb1 0x00000000
0060 0x00000000 0x00000000 0x00000000 0x00000000
0070 0x0000bc90 0x00000000 0x00000000 0x00000000
switch/Admin#
Can not view this . file attachment inline, please click on the following link to view the attachment.
http://cdetsweb-prd.cisco.com/apps/dumpcr_att?identifier=CSCti03084&title=Diffs-commit-converge_dev&ext=&type=FILE
Can not view this . file attachment inline, please click on the following link to view the attachment.
Can not view this . file attachment inline, please click on the following link to view the attachment.
http://cdetsweb-prd.cisco.com/apps/dumpcr_att?identifier=CSCti03084&title=Diffs-commit-converge_dev.p2&ext=&type=FILE
Can not view this . file attachment inline, please click on the following link to view the attachment.
Can not view this . file attachment inline, please click on the following link to view the attachment.
http://cdetsweb-prd.cisco.com/apps/dumpcr_att?identifier=CSCti03084&title=Scimitar-code-review&ext=&type=FILE
Can not view this . file attachment inline, please click on the following link to view the attachment.
Eine weitere neue Funktion, die ich in Version 4.1.x eingeführt habe, ist CSCth64697
: Enh: Neuer show-Befehl zum Anzeigen des http url/cookie-Hashergebnisses
| Was | Schlecht | Wer | Versionen | ||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
| Verlauf |
|---|
Histogram of CSCti03084 N -> A [ 0] | <-----------------------------------+-----------------------------------> |
| Cdetsadm | 11/30/2010 15:15:24 | Integrierte Versionen: | —> 3.0(0)A90(7.0.12) |
| Cdetsadm | 11/01/2010 13:42:20 | Integrierte Versionen: | —> 3,0(0)A4(1,0) |
| gdufour | 10/19/2010 00:22:06 | RNE-Genehmigungskennzeichen: | N —> |
| gdufour | 10/19/2010 00:22:06 | Titel des Hinweises: | —> V-Kommentare |
| gdufour | 10/19/2010 00:22:05 | Verifiziert am: | —> 19.10.2010 00:22:05 |
| gdufour | 10/19/2010 00:22:05 | Prüfer: | —> gdufour |
| gdufour | 10/19/2010 00:21:59 | Verifiziert: | —> getestet |
| gdufour | 10/19/2010 00:20:32 | Status: | R —> V |
| gdufour | 10/19/2010 00:22:05 | Verifizierte Version: | —> 3.0(0)A4(1.0.5) |
| CMS | 10/04/2010 07:12:07 | Dateiname: | —> Scimitar-Code-Review |
| Cdetsadm | 09/23/2010 10:30:36 | Integrierte Versionen: | —> 3,0(0)A90(4.0.38) |
| Cdetsadm | 09/07/2010 11:35:29 | Integrierte Versionen: | —> 3,0(0)A4(0,99,214) |
| gdufour | 09/06/2010 00:56:13 | RNE-Genehmigungskennzeichen: | N —> |
| gdufour | 09/06/2010 00:56:13 | Titel des Hinweises: | —> R-Kommentare |
| gdufour | 09/06/2010 00:56:13 | Auflösbar am: | 29.07.2010 04:09:36 —> 06.09.2010 00:56:12 |
| gdufour | 09/06/2010 00:55:57 | Status: | A —> R |
| Diwjain | 09/06/2010 00:51:22 | RNE-Genehmigungskennzeichen: | N —> |
| Diwjain | 09/06/2010 00:51:22 | Titel des Hinweises: | —> A-Kommentare |
| Diwjain | 09/06/2010 00:51:22 | Zuweiser: | gdufour —> divjain |
| Diwjain | 09/06/2010 00:51:22 | Zuordnungsdatum: | 26.07.2010 06:19:33 —> 06.09.2010 00:51:22 |
| Diwjain | 09/06/2010 00:51:07 | Status: | R —> A |
| gdufour | 09/06/2010 00:42:03 | Dateiname: | —> Diffs-commit-converge_dev.p2 |
| Cdetsadm | 08/25/2010 13:05:01 | Integrierte Versionen: | —> 3,0(0)A90(4.0.27) |
| Brahul | 08/01/2010 23:52:20 | Gefunden: | de-test —> Entwicklung |
| Cdetsadm | 07/31/2010 07:09:49 | Integrierte Versionen: | —> 3,0(0)A4(0,99,180) |
| Kavenkat | 07/29/2010 14:19:33 | Attribut 2: | Fusion —> FUSION |
| gdufour | 07/29/2010 04:09:36 | Auflösbar am: | —> 29.07.2010 04:09:36 |
| gdufour | 07/29/2010 04:09:28 | Dokumente geändert: | —> keine |
| gdufour | 07/29/2010 04:09:28 | Status: | O —> R |
| gdufour | 07/29/2010 04:05:46 | Dateiname: | —> Diffs-commit-converge_dev |
| gdufour | 07/28/2010 02:03:37 | Regression: | —> N |
| gdufour | 07/28/2010 02:03:47 | Code-Prüfer: | —> Blanco |
| gdufour | 07/28/2010 02:02:52 | Anmerkung: | Static-analysis-runinfo —> Static-analysis-runinfo |
| gdufour | 07/28/2010 01:59:11 | RNE-Genehmigungskennzeichen: | N —> |
| gdufour | 07/28/2010 01:59:11 | Titel des Hinweises: | —> Static-analysis-runinfo |
| gdufour | 07/26/2010 08:04:54 | RNE-Genehmigungskennzeichen: | N —> |
| gdufour | 07/26/2010 08:04:54 | Titel des Hinweises: | —> AUT |
| gdufour | 07/26/2010 07:21:27 | Status: | A —> O |
| CMS | 07/26/2010 07:17:50 | Dateiname: | —> Scimitar-Code-Review |
| gdufour | 07/26/2010 06:24:00 | RNE-Genehmigungskennzeichen: | N —> |
| gdufour | 07/26/2010 06:24:00 | Titel des Hinweises: | —> Komponententest |
| gdufour | 07/26/2010 06:19:54 | Titel des Hinweises: | —> Versionshinweis |
| gdufour | 07/26/2010 06:19:33 | Zuweiser: | —> gdufour |
| gdufour | 07/26/2010 06:19:33 | Zuordnungsdatum: | —> 26.07.2010 06:19:33 |
| gdufour | 07/26/2010 06:19:33 | Techniker: | —> gdufour |
| gdufour | 07/26/2010 06:19:28 | Status: | N —> A |
| gdufour | 07/26/2010 06:19:18 | Fehler verursacht: | --> |
Im Folgenden finden Sie ein Beispiel zur Verwendung dieses Befehls.
Eine Sticky-Funktion hasht die Eingabedaten sehr oft in einen 64-Bit-Wert. Dies ist der Wert, den wir in unserem Stichwort behalten und den wir verwenden, um neue Eingabedaten mit bestehenden Einträgen abzugleichen.
Wenn Sie also eine klebrige Datenbank anzeigen, erhalten Sie normalerweise einen klebrigen Eintrag, was eine riesige Zahl ist.
Es ist unmöglich, die Originaldaten aus dem Hashwert abzurufen.
ctw1prod001/maxcon# show sticky database group group1
sticky group : group1
type : HTTP-COOKIE
timeout : 5 timeout-activeconns : TRUE
sticky-entry rserver-instance time-to-expire flags
---------------------+--------------------------------+--------------+-------+
18119923635054054134 rser3:0 293 -
5834233610907968705 rser2:0 6 -
Until version 4.1.x it was also impossible to know the hash value from the original data.
This is why the command show sticky hash is useful. This command will hash whatever text you provide and return the hash value in hexadecimal and decimal.
ctw1prod001/maxcon# show sticky hash cisco123
Hash: 0x50f75c8edad064c1 - 5834233610907968705
ctw1prod001/maxcon# show sticky hash testing123
Hash: 0xfb76e68ae89a0af6 - 18119923635054054134
ctw1prod001/maxcon#
In the example above, the text cisco123 is hashed into value 5834233610907968705
This value correspond to the sticky entry pointing to rser2:0
Below is another example with cookie insert.
ctw1prod001/maxcon# sh sticky cookie-insert group group1
Cookie | HashKey | rserver-instance
------------+----------------------+----------------------------------------+
R876364218 | 8016668853981260554 | s1/rser1:0
R876365307 | 1555693097661300743 | s1/rser2:0
R876366396 | 9600904050871858939 | s1/rser3:0
R876367485 | 3122196043780649991 | s1/rser4:0
R2830679934 | 17805359266603035579 | s2/rser4:0
R2830681023 | 81717080676150073 | s2/rser5:0
ctw1prod001/maxcon# sh sticky hash R876364218
Hash: 0x6f40edd93b7dab0a - 8016668853981260554
ctw1prod001/maxcon# sh sticky hash R2830681023
Hash: 0x12251407dc8ab39 - 81717080676150073
ctw1prod001/maxcon#
Und das wird unsere Überprüfung der Stickyness beenden.
Vielen Dank.
Gilles Dufour
| Überarbeitung | Veröffentlichungsdatum | Kommentare |
|---|---|---|
1.0 |
15-Jul-2026
|
Erstveröffentlichung |