简介
本文档介绍在服务器上放置大量会话后,有关WebRTC服务器泄漏会话的Cisco bug id CSCvt73723的检测和解决方法。这最终可能导致用户无法在WebBridge上登录或作为访客加入。
先决条件
要求
Cisco 建议您了解以下主题:
- 思科会议服务器(CMS)(CallBridge和WebBridge组件)
使用的组件
本文档中的信息基于Cisco Meeting Server,尤其是WebBridge 2/CMA WebRTC组件。本文档不适用于2.9版中引入的新WebBridge 3/CMS Web应用组件。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
CSCvt73723 - WebRTC服务器在服务器上放置大量会话后泄漏会话
您如何识别此Bug?
从最终用户的角度来看,症状是,一旦达到硬性限制,其他用户将无法加入会议。在日志中,发现Webbridge统计信息(根据本常见问题)达到149并不一定意味着这些会话都是泄漏的。这仅意味着Web网桥已达到其硬性限制,不允许任何新连接。
"webbridge":信息:[DEBUGGING]统计信息149,c:3477,d:3170
如果不使用CMA桌面客户端或iOS客户端,计算这些泄露的会话数会比较复杂,并且可以进行。从版本2.8开始,Call Bridge会每5分钟报告一次CMA会话数(CMA WebRTC + CMA桌面客户端+ CMA iOS客户端)。请注意,此报告为“CMA”:“X/Y”,其中X是当前活动CMA会话数,Y是过去5分钟内的峰值。
信息:统计信息: {"callLegsPS": 1, "callLegs": "20/24", "CMA": "14/17", "sip": {"std": "0/1", "peer": "6/6"}}
仅仅因为呼叫网桥报告14个当前会话,并不意味着位于同一位置的Web网桥也报告14个会话。此映射在单个组合服务器上为1:1,但在集群部署中,Web网桥会话可以在不同的呼叫网桥上实例化呼叫(尤其是在启用了负载均衡时,默认情况下CMA启用负载均衡)。
因此,为了计算部署中泄露的会话总数,您确实需要来自所有Web Bridge统计信息的合并活动会话,并将此信息与报告的合并CMA呼叫网桥统计信息进行比较。
如何避免此问题?
根据您的部署遇到此情况的频率(每隔几天或每隔几周一次),必须建议您重新启动其Web网桥,这样可以清除所有泄露的会话,并将活动会话计数重置为0。可以理解的是,如果这变成日常繁琐的工作,这会非常繁琐,因此为什么可以使用代码块中提供的脚本来协助完成此任务。
################################################################
#### 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)
################################################################
脚本需要进行一些小的编辑(行29-30上的凭证和行27上部署中的Web网桥的IP地址),并且只有在没有预期负载时或在维护窗口期间,才必须运行。该脚本不检查活动会话,并且只对列出的所有服务器执行“webbridge restart”命令,该命令会终止任何活动的WebRTC会话。
要自动执行此脚本,可通过设置cron作业或在具有任务计划程序的Windows 10 PC上完成此操作。假设Win 10 PC已安装Python 3.4+,则可以执行以下步骤:
1.打开任务计划程序
2.选择“创建基本任务……”
2.1输入此任务的名称/说明
2.2选择要运行此任务的频率和时间(建议仅在非高峰时间运行,此处所示为每周六凌晨2点)
2.3要执行的操作,请选择:“启动程序”
2.4操作:
*程序/脚本: C:\<python.exe的路径>
(如果您不知道python.exe的路径,可以通过转到cmd并键入: python -c "import sys;print(sys.executable)")
*添加参数(可选):webbridge_restart.py(或python脚本的名称)
*起始位置(可选):C:\<webbridge_restart.py>
请注意,运行cron作业的计算机必须能够访问已配置的CMS服务器的MMP。脚本运行后,它会创建webbridge_restart_logs.txt文件,其中包含有关不同WebBridge重新启动以及任何潜在故障的详细信息。所示示例中有一个成功连接到10.48.79.194,还有一个失败到127.0.0.1(实际上是PC的环回地址)。
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
如何测试脚本是否运行正常?
如果您将Python安装在要从中运行脚本的PC上,则可以先通过后续步骤在其上手动运行:
- 打开cmd并使用“cd”命令浏览到脚本的位置
- 使用命令“python webbridge_restart.py”运行python文件
- 如果您看到指示未安装“paramiko”模块的错误,您需要使用命令“pip install paramiko”安装一些额外的库。
- 完成后,您可以使用“python webbridge_restart.py”再次运行脚本(注意:此操作将重新启动webbridge并导致当前的WebRTC连接断开)
如果运行成功,您可以在webbridge_restart_logs.txt文件中检查运行结果。
计划何时解决此问题?
这不是新的Bug,没有在Web Bridge 2 / CMA WebRTC上修复此漏洞的计划。新的Web Bridge 3/CMS Web应用(从2.9开始提供)不受此错误的影响,因为它已经完全重新设计。受此问题严重影响的客户必须考虑迁移到新的CMS Web应用(不过请注意,此功能尚未与2.9版本中的Web Bridge 2功能相同)。请查看CMS 2.9和cms Web应用版本说明,以了解此内容的完整详细信息。)
相关信息