概要
このドキュメントでは、大量のセッションがサーバに配置された後にセッションがリークするWebRTCサーバに関するCisco Bug ID CSCvt73723の検出と回避策について説明します。これにより、ユーザはWebBridgeにログインしたり、ゲストとして参加したりできなくなります。
前提条件
要件
次の項目に関する知識があることが推奨されます。
- Cisco Meeting Server(CMS)(CallBridgeおよびWebBridgeコンポーネント)
使用するコンポーネント
このドキュメントの情報は、Cisco Meeting Server(CMS)に基づいており、特にWebBridge 2/CMA WebRTCコンポーネントを中心としています。このドキュメントは、バージョン2.9で導入された新しいWebBridge 3/CMS Webアプリケーションコンポーネントには適用されません。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、初期(デフォルト)設定の状態から起動しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
CSCvt73723
– 大量のセッションがサーバに配置された後、WebRTCサーバがセッションをリーク
このバグを特定するにはどうすればよいですか。
エンドユーザの観点から見た症状は、ユーザが厳しい制限に達した後で、ユーザが会議に参加できないことです。ログで、webbridgeの統計情報を特定する(このFAQに従って)が149に達していると、必ずしもこれらすべてがリークされたセッションであるとは限りません。これは、Webブリッジがハードリミットに達し、新しい接続が許可されていないことを意味します。
「webbridge」:INFO:[DEBUGGING] Stats 149, c:3477, d:3170
これらのセッションのリーク数の計算は、もう少し複雑で、CMAデスクトップクライアントやiOSクライアントを使用していない場合に実行できます。バージョン2.8以降、Call BridgeはCMAセッション数(CMA WebRTC + CMAデスクトップクライアント+ CMA iOSクライアント)を5分ごとに報告します。 これは「CMA」として報告されます。「X/Y」。ここで、XはアクティブなCMAセッションの現在の数、Yは過去5分間のピークです。
INFO:STATS:{"callLegsPS":1.「callLegs」:「20/24」、「CMA」:「14/17」、「sip」:{"std":「0/1」、「ピア」:"6/6"}}
Call Bridgeが14の現在のセッションを報告しているからといって、同じ場所にあるWeb Bridgeが14のセッションも報告しているわけではありません。このマッピングは、単一の統合サーバ上では1:1ですが、クラスタ化された展開では、Web Bridgeセッションが別のCall Bridge上でコールをインスタンス化できます(特に、ロードバランシングが有効な場合は、CMAのデフォルトです)。
したがって、導入環境内のリークしたセッションの合計数を計算するには、すべてのWebブリッジ統計情報からのアクティブなセッションの組み合わせが必要です。これをレポートされるCMA Call Bridge統計情報と比較します。
この問題を回避するにはどうすればよいのですか。
この状況が発生する頻度(数日または数週間に1回)によっては、Web Bridgeを再起動して、漏れたセッションをクリアし、アクティブセッション数を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アドレス)が必要で、予期される負荷がない場合やメンテナンス時にのみ実行する必要があります。スクリプトはアクティブなセッションをチェックせず、アクティブなWebRTCセッションを終了するリストのすべてのサーバで「webbridge restart」コマンドを実行するだけです。
このスクリプトを自動化するには、cronジョブを設定するか、タスクスケジューラを備えたWindows 10 PCで実行できます。Win 10 PCにPython 3.4+がインストールされていると仮定すると、次の手順を実行できます。
1.タスクスケジューラを開く
2. [Create Basic Task..]を選択します。

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への1つの正常な接続と、127.0.0.1への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
スクリプトが正常に動作することをテストする方法は?
スクリプトの実行元として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アプリのリリースノートを参照してください)。
関連情報