簡介
本檔案介紹在伺服器上放置大量作業階段後,針對WebRTC伺服器遺漏作業階段的Cisco錯誤id CSCvt73723進行偵測和解決方法。這最終可能會導致使用者無法登入或作為WebBridge上的訪客加入。
必要條件
需求
思科建議您瞭解以下主題:
- Cisco Meeting Server(CMS)(CallBridge和WebBridge元件)
採用元件
本檔案中的資訊是根據思科會議伺服器,尤其是WebBridge 2 / CMA WebRTC元件。本文檔不適用於2.9版中引入的新WebBridge 3/CMS Web應用元件。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
CSCvt73723 - WebRTC伺服器在伺服器上放置大量會話後洩漏會話
如何識別此錯誤?
從終端使用者的角度來看,症狀是一旦達到硬限制,其他使用者就無法加入會議。在日誌中,發現Webbridge統計資訊(如本常見問題)達到149並不一定意味著這些會話都是洩露的。這僅表示Web橋已達到其硬性限制,不允許新連線。
"webbridge":資訊:[DEBUGGING] Stats 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"}}
僅僅因為Call Bridge報告14個當前會話,並不意味著位於同一位置的Web Bridge也報告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作業或在帶有Task Scheduler的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檔案中檢查運行結果。
計畫何時修復此問題?
這不是新錯誤,也沒有在Web Bridge 2 / CMA WebRTC上解決此問題的計畫。新的Web Bridge 3/CMS Web應用(從2.9開始提供)不受此錯誤的影響,因為它已經過完全重新設計。受到此問題嚴重影響的客戶必須考慮遷移到新的CMS Web應用(不過請注意,在2.9版本中,此功能尚未與Web Bridge 2完全相同)。請檢視CMS 2.9和cms web app發行說明以瞭解有關此內容的完整詳細資訊。)
相關資訊