Inleiding
Dit document beschrijft de detectie en work-around op Cisco bug id CSCvt73723 rond WebRTC server lekken sessies na grote hoeveelheid sessies geplaatst op de server. Dat kan er uiteindelijk voor zorgen dat gebruikers niet kunnen inloggen of deelnemen als gast op de WebBridge.
Voorwaarden
Vereisten
Cisco raadt kennis van de volgende onderwerpen aan:
- Cisco Meeting Server (CMS) (component CallBridge en WebBridge)
Gebruikte componenten
De informatie in dit document is gebaseerd op Cisco Meeting Server en in het bijzonder rond de WebBridge 2 / CMA WebRTC-component. Dit document is niet van toepassing op de nieuwe WebBridge 3 / CMS Web app component die is geïntroduceerd in versie 2.9.
De informatie in dit document is gebaseerd op de apparaten in een specifieke laboratoriumomgeving. Alle apparaten die in dit document worden beschreven, hadden een opgeschoonde (standaard)configuratie. Als uw netwerk live is, moet u zorgen dat u de potentiële impact van elke opdracht begrijpt.
CSCvt73723
- WebRTC-serverlekken na grote hoeveelheid sessies op de server
Hoe herken je deze bug?
Het symptoom vanuit het perspectief van de eindgebruiker is als ze eenmaal de harde limiet hebben bereikt en geen verdere gebruikers kunnen deelnemen aan een vergadering. In de logs betekent het zien van de webbridge-statistieken (volgens deze veelgestelde vragen) 149 raken NIET noodzakelijkerwijs dat dit allemaal gelekte sessies zijn. Dit betekent alleen dat de Web Bridge zijn harde limiet heeft bereikt en geen nieuwe verbindingen zijn toegestaan.
"webbridge": INFO: [DEBUGGING] Stats 149, c:3477, d:3170
Berekenen hoeveel van deze zijn uitgelekte sessies is een beetje ingewikkelder en kan worden gedaan als je NIET met behulp van de CMA desktop client of iOS-client. Vanaf versie 2.8 rapporteert de Call Bridge elke 5 minuten het aantal CMA-sessies (CMA WebRTC + CMA desktop client + CMA iOS client). Merk op dat dit wordt gerapporteerd als de "CMA": "X/Y" waarbij X het huidige aantal actieve CMA-sessies is en Y de piek in de laatste 5 minuten.
INFO: STATS: {"callLegsPS": 1, "callLegs": "20/24", "CMA": "14/17", "sip": {"std": "0/1", "peer": "6/6"}}
Alleen omdat een Call Bridge 14 huidige sessies rapporteert, betekent dit niet dat de co-locatie Web Bridge ook 14 sessies rapporteert. Deze toewijzing is 1:1 op een enkele gecombineerde server, maar in een geclusterde implementatie kan een Web Bridge-sessie een oproep op een andere Call Bridge instantiëren (vooral wanneer taakverdeling is ingeschakeld - wat standaard het geval is voor CMA).
Om het totale aantal gelekte sessies in een implementatie te berekenen, hebt u daarom de gecombineerde actieve sessies van ALLE Web Bridge-statistieken nodig en vergelijkt u dit met de gecombineerde CMA Call Bridge-statistieken die worden gerapporteerd.
Hoe kunt u dit probleem voorkomen?
Afhankelijk van hoe vaak uw implementatie deze situatie raakt (eenmaal per paar dagen of eenmaal per paar weken), moet u worden geadviseerd om hun Web Bridge(s) opnieuw op te starten, die alle gelekte sessies opruimt en het aantal actieve sessies terugzet naar 0. Het is begrijpelijk dat dit vervelend kan zijn als dit een dagelijkse klus wordt, vandaar dat deze taak kan worden vergemakkelijkt met een script dat beschikbaar is volgens het codeblok.
################################################################
#### Cisco Meeting Server ####
#### Webbridge restart ####
#### Workaround for CSCvt73723
####
#### feedback: willwoo@cisco.com ####
################################################################
#--------------------------------------------------------------
# ---------- DISCLAIMER ----------
#--------------------------------------------------------------
# Please note this script is NOT maintained or supported by Cisco.
# This is to be run at entirely your own risk.
# This script is not intended for redistribution
# Tested with python 3.7.4
#--------------------------------------------------------------
#--------------------------------------------------------------
# ---------- Libraries to import ----------
#--------------------------------------------------------------
import paramiko
import time
import datetime
#--------------------------------------------------------------
#--------------------------------------------------------------
# ---------- Deployment parameters to change ----------
#--------------------------------------------------------------
# WB Inventory - just extend or modify the below to match your deployment requirements.
# Enter the MMP IP of the server (can differ from interface webbridge service is running)
webbridges ={1:"127.0.0.1",2:"127.0.0.1",3:"127.0.0.1",4:"127.0.0.1"}
mmp_username = "admin" # MMP username
mmp_password = "password" # MMP password
#--------------------------------------------------------------
def mmp_webbridge_restart(mmp_address,uname,pword):
conn = paramiko.SSHClient()
conn.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
conn.connect(mmp_address, 22, uname, pword)
stdin, stdout, stderr = conn.exec_command('webbridge restart')
time.sleep(1)
conn.close()
print_log_message('Webbridge on server: ' + mmp_address + ' restarted successfully')
except Exception as error:
print_log_message('Failed to restart webbridge on server ' + mmp_address + '. Error:')
print_log_message(str(error))
pass
def print_log_message(message):
time_stamp = datetime.datetime.now(datetime.timezone.utc)
time_stamp = str(time_stamp)
file = open('webbridge_restart_logs.txt', 'a')
file.write(time_stamp + " " + message + "\n")
file.close()
if __name__ == '__main__':
for wb in webbridges:
mmp_webbridge_restart(webbridges[wb], mmp_username, mmp_password)
################################################################
Het script vereist enkele kleine bewerkingen (de referenties op regel 29-30 en IP-adressen van de webbruggen in de implementatie op regel 27) en moet ALLEEN worden uitgevoerd wanneer er geen verwachte belasting is of tijdens een onderhoudsvenster. Het script controleert niet op actieve sessies en voert gewoon de opdracht 'webbridge restart' uit op alle vermelde servers, die geen actieve WebRTC-sessie beëindigt.
Om dit script te automatiseren, kan dit worden gedaan door een cron-taak in te stellen of op een Windows 10-pc met Taakplanner. Ervan uitgaande dat de Win 10-pc Python 3.4+ heeft geïnstalleerd, kunnen ze deze stappen volgen:
1. Taakplanner openen
2. Selecteer 'Basistaak maken...'

2.1 Voer een naam/beschrijving in voor deze taak

2.2 Selecteer de frequentie en tijden waarop u deze taak wilt uitvoeren (aanbevolen alleen tijdens daluren, hier weergegeven voor elke zaterdag om 2 uur 's ochtends)


2.3 Te ondernemen actie, selecteer: 'Start een programma'

2.4 Actie:
* Programma / script: C:\<pad naar python.exe>
(Als u het pad naar Python.exe niet kent, kunt u het vinden door naar CMD te gaan en te typen: Python -c "Sys importeren; afdrukken(sys.executable)")

* Argumenten toevoegen (optioneel): webbridge_restart.py (of naam van het pythonscript)
* Start in (optioneel): C:\<path to webbridge_restart.py>

De computer waarop de cron-taak wordt uitgevoerd, moet toegang hebben tot de MMP van de geconfigureerde CMS-servers. Nadat het script is uitgevoerd, maakt het een webbridge_restart_logs.txt-bestand dat details bevat over het opnieuw opstarten van de verschillende WebBridges en mogelijke fouten. Er wordt een voorbeeld getoond met één succesvolle verbinding met 10.48.79.194 en één met 127.0.0.1 (als het loopback-adres van de pc eigenlijk).
2020-06-08 14:53:18.149915+00:00 Webbridge on server: 10.48.79.194 restarted successfully
2020-06-08 14:53:19.165543+00:00 Failed to restart webbridge on server 127.0.0.1. Error:
2020-06-08 14:53:19.165543+00:00 [Errno None] Unable to connect to port 22 on 127.0.0.1
Hoe kun je testen of het script goed werkt?
Als u de pc hebt geïnstalleerd waarop u het script wilt uitvoeren, kunt u er eerst handmatig op uitvoeren met de volgende stappen:
- Open cmd en blader naar de locatie van het script met de 'cd' opdracht

- Voer het python-bestand uit met de opdracht 'python webbridge_restart.py'

- Als u een fout ziet die aangeeft dat de 'paramiko'-module niet is geïnstalleerd, moet u een extra bibliotheek installeren met de opdracht 'pip install paramiko'

- Na voltooiing kunt u het script opnieuw uitvoeren met 'python webbridge_restart.py' (OPMERKING: hierdoor wordt de webbridge opnieuw gestart en worden de huidige lopende WebRTC-verbindingen verbroken)
Als het succesvol is uitgevoerd, kunt u de uitkomst ervan controleren in het webbridge_restart_logs.txt-bestand.
Wanneer wordt dit gepland?
Dit is geen nieuwe bug en er is geen plan om dit op te lossen op de Web Bridge 2 / CMA WebRTC. De nieuwe Web Bridge 3 / CMS web-app (beschikbaar vanaf 2.9) wordt niet beïnvloed door deze bug omdat deze volledig opnieuw is ontworpen. Klanten die hier zwaar door worden getroffen, moeten overwegen om over te stappen naar de nieuwe CMS-webapp (hoewel dit nog geen pariteit is met Web Bridge 2 in de 2.9-release. Controleer de CMS 2.9 en cms web app release notes voor alle details over deze.)
Gerelateerde informatie