소개
이 문서에서는 서버에 많은 세션이 배치된 후 WebRTC 서버 유출 세션에 대한 Cisco 버그 ID CSCvt73723의 탐지 및 해결에 대해 설명합니다.결과적으로 사용자는 WebBridge에서 게스트로 로그인하거나 참가할 수 없습니다.
사전 요구 사항
요구 사항
다음 주제에 대한 지식을 보유하고 있으면 유용합니다.
- Cisco CMS(Meeting Server)(CallBridge 및 WebBridge 구성 요소)
사용되는 구성 요소
이 문서의 정보는 Cisco Meeting Server 및 특히 WebBridge 2/CMA WebRTC 구성 요소에 기반합니다.이 문서는 버전 2.9에 도입된 새 WebBridge 3/CMS Web 앱 구성 요소에 적용되지 않습니다.
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다.이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다.네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 이해해야 합니다.
CSCvt73723
- 서버에 많은 수의 세션이 배치된 후 WebRTC 서버가 세션 누수
이 버그를 어떻게 식별합니까?
최종 사용자의 관점에서 나타나는 증상은 사용자가 한도 제한에 도달하면 더 이상 모임에 참가할 수 없다는 것입니다.로그에서 이 FAQ에 따라 웹 브리지 통계(149개)가 유출되는 세션이라고 반드시 암시하는 것은 아닙니다.이는 웹 브리지가 한계에 도달했고 새 연결이 허용되지 않음을 의미합니다.
"webbridge":정보:[디버깅] 통계 149, c:3477, d:3170
이러한 세션 중 유출되는 세션 수를 계산하는 작업은 좀 더 복잡하며 CMA 데스크톱 클라이언트 또는 iOS 클라이언트를 사용하지 않는 경우 수행할 수 있습니다.버전 2.8부터 통화 브리지는 5분마다 CMA 세션(CMA WebRTC + CMA 데스크톱 클라이언트 + CMA iOS 클라이언트)의 수를 보고합니다. 이는 "CMA"로 보고됩니다."X/Y" 여기서 X는 현재 활성 CMA 세션 수이고 Y는 최근 5분 동안의 피크 시간입니다.
정보:통계:{"callLegPS":1, "callLeg":"20/24", "CMA":"14/17", "sip":{"표준":"0/1", "피어":"6/6"}
통화 브리지에서 14개의 현재 세션을 보고한다고 해서 공동 배치된 웹 브리지도 14개의 세션을 보고하는 것은 아닙니다.이 매핑은 단일 통합 서버에서 1:1이지만 클러스터형 구축에서는 웹 브리지 세션이 다른 통화 브리지에 대한 통화를 인스턴스화할 수 있습니다(특히 로드 밸런싱이 활성화된 경우 - CMA에 기본적으로 사용됩니다).
따라서 구축에서 유출된 총 세션 수를 계산하려면 모든 웹 브리지 통계의 통합 활성 세션이 필요하며 보고된 결합된 CMA 통화 브리지 통계와 비교해야 합니다.
이 문제를 어떻게 피할 수 있습니까?
배포가 이러한 상황에 얼마나 자주(2-3일에 한 번 또는 2-주에 한 번) 도달하는지에 따라, 유출된 세션을 지우고 활성 세션 수를 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 Bridges의 IP 주소)을 필요로 하며 예상된 로드가 없거나 유지 보수 기간 중에만 실행해야 합니다.스크립트는 활성 세션을 확인하지 않으며 활성 WebRTC 세션을 종료하는 나열된 모든 서버에서 'webbridge restart' 명령을 수행합니다.
이 스크립트를 자동화하려면 cron 작업을 설정하거나 작업 스케줄러를 사용하는 Windows 10 PC에서 cron 작업을 설정하여 스크립트를 자동화할 수 있습니다.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 "가져오기 sysprint(sys.executable)"

* 인수 추가(선택 사항):webbridge_restart.py(또는 python 스크립트의 이름)
* 시작 위치(선택 사항):C:\<webbridge_restart.py 경로>

cron 작업을 실행하는 컴퓨터는 구성된 CMS 서버의 MMP에 액세스할 수 있어야 합니다.스크립트가 실행되면 다른 WebBridges의 재시작에 대한 세부 정보와 잠재적 장애가 포함된 webbridge_restart_logs.txt 파일이 생성됩니다.예를 들면 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 파일에서 결과를 확인할 수 있습니다.
이 문제를 언제 해결할 예정입니까?
이는 새로운 버그가 아니며, 웹 브리지 2/CMA WebRTC에서 수정할 계획이 없습니다.새로운 Web Bridge 3/CMS 웹 앱(2.9부터 사용 가능)은 완전히 재설계되었으므로 이 버그의 영향을 받지 않습니다.이러한 영향을 많이 받는 고객은 새로운 CMS 웹 앱으로 전환하는 것을 고려해야 합니다(하지만 2.9 릴리스의 Web Bridge 2와 동일한 기능은 아직 아닙니다.자세한 내용은 CMS 2.9 및 cms 웹 앱 릴리스 정보를 확인하십시오.)
관련 정보
- 결함 메모:https://bst.cloudapps.cisco.com/bugsearch/bug/CSCvt73723
- 릴리스 정보:https://www.cisco.com/c/en/us/support/conferencing/meeting-server/products-release-notes-list.html
- FAQ