冗長化・負荷分散について
CAMServer の Ultimate プランでは、オンプレミス環境でとても簡単にWebサーバ、Videoサーバの冗長化・負荷分散が行えます。これにより、1台のサーバがダウンしてもサービスを継続させる事ができ、また大規模ユーザでご利用しても処理を分散させパフォーマンスを劣化させずサービスを提供できるようになります。
分散構成の CAMServer
でもリアルタイムコミュニケーションが可能です。例えば、CAMServer1
に接続している Client は、CAMServer2
に接続している別 Client とチャットやWeb会議が可能です。Video サーバの負荷分散ではアクティブな会議数、参加ユーザ数を元に分散が行われます。
Web会議の同時開催会議数は、単純にCAMServer
ノードを増やすだけでは達成できません。全ての会議が同一のVPNやセンタールータを中継しないよう、ネットワーク構成の検討も必要
冗長化・負荷分散の構成
社内の要求レベル・コストに応じ最適な環境を構成できます。
スモールスタート構成
- Storage:CAMServer1 側へ DB/File を配置し、CAMServer2 からも参照する。この場合でも全てのユーザはリアルタイムでデータが共有。
- バックアップ:毎日、DB/File データを CAMServer2 へバックアップが必要。
- 負荷分散:アクセスする CAMServer を部署毎に分ける事で負荷分散が可能(または待機系とする)。
- 可用性:障害発生時、Webアプリ版 を利用した場合は、後述の
cam.clusterHosts
を検出し自動フェイルオーバーが可能。Disk障害の場合はバックアップされた前日までのデータを保証。 - コスト:最も安価な構成。1台構成からスタートし、負荷に応じてスケールアップが可能。
外部Storage(NAS) 構成
- Storage:RAID構成で耐久性の高い外部 Storage NAS に DB/File を配置し、 CAMServer1 / CAMServer2 共に参照する。
- バックアップ:RAID構成であっても電源・筐体の故障や人為的な障害を考慮して、毎日 DB/File データのバックアップが必要。
- 負荷分散:スモールスタート構成と同じ。
- 可用性:スモールスタート構成と同じ。
- コスト:比較的安価な構成。
冗長化された外部 Storage 構成
- Storage:冗長化されたファイル共有サーバ(Windows Server Failover Clustering +SAN、AWS S3等) を利用し、Disk障害に対し高可用性を重視する構成。
- バックアップ:データは自動でレプリケーションされているためポリシーによってはバックアップ不要。ただし人為的な障害を考慮する場合は(手動でディスクを消去したなど)、やはりバックアップが必要。
- 負荷分散:スモールスタート構成と同じ。
- 可用性:Webサーバはスモールスタート構成と同じ。Diskや筐体の故障による障害発生時でも自動的に切替が可能。
- コスト:導入コストは高い。AWS S3は安価に構築できるが、オンプレミス重視の場合は選択できない。
Load Balancer 構成
- Storage:スモールスタート構成 / NAS / SAN の選択が可能。
- バックアップ:スモールスタート構成 / NAS / SAN と同じ。
- 負荷分散:CAMServer の前段に Load Balancer を配置する事で、冗長化・負荷分散が可能。※ Load Balancer 構成の要件詳細も確認してください。
- 可用性:冗長化された外部 Storage 構成と組み合わせる事で全てのレイアで自動フェイルオーバが可能。
- コスト:導入コストは高い。
冗長化・負荷分散の設定
各分散サーバで共通の設定
CAMServer を冗長化・負荷分散に対応するには、分散サーバにそれぞれ CAMServer をインストールし、CAMServer/cam.ini
ファイルに次のエントリーを追加します。
cam.clusterHosts=camserver1;camserver2
cam.clusterHostsDesc=camserver1 がメインサーバ、camserver2 は待機系サーバです。
cam.serverDatePath=\\disk\CAMServer\data
cam.enabledSingleProcessingHost=camserver1
cam.clusterHosts
cam.clusterHosts
は分散サーバそれぞれのホスト名を ;
で区切り列挙します。ホスト名はクライアント側から https://ホスト名/
でアクセスできる必要があります。
cam.clusterHosts=camserver1;camserver2
部署ごとに CAMServer を分ける場合は、それぞれの CAMServer の ini ファイルで自ホスト名を先頭に記述します。列挙順は、起動時の初期接続サーバ、Video サーバを選択する際に影響を受けます。またWebアプリ版 を利用する事で障害発生時フェイルオーバー接続が可能です。
cam.clusterHostsDesc
cam.clusterHostsDesc
は分散サーバの説明欄のコメントを変更できます。
cam.serverDatePath
cam.serverDatePath
はDB、アップロードされた添付ファイルを保存する場所を指定します。分散されたサーバからアクセスできる NAS など共有ディスクを指定します。
※ 共有ディスクが無い場合は、サブ CAMServer がメインの CAMServer の CAMServer/config
フォルダを指定する事でも Storage を共有できます。
cam.enabledSingleProcessingHost
cam.enabledSingleProcessingHost
は cam.clusterHosts で列挙した先頭サーバのホスト名を指定してください。バッチ処理など単一ホストでしか稼働出来ない処理は、cam.enabledSingleProcessingHost に定義されたホストかどうか判定してから実行する目的で設定します。
サブのサーバのみ設定
cam.disableLANNetwork=true
を設定すると、LAN用のTCP/UDP接続を無効化できます。2台目以降のサブ CAMServer はこの設定を行ってください。
cam.disableLANNetwork=true
Load Balancer の要件詳細
Load Balancer 構成で必要となる要件詳細を記述致します。
1. SSL終端(SSL Termination)
- ロードバランサーでSSL証明書をインストールし、SSL/TLSの復号を行う。
- クライアントからの通信はHTTPSで受け付け、ロードバランサーからバックエンドにはHTTPを使用。
2. 負荷分散アルゴリズム
- ラウンドロビンでの負荷分散
- クッキー(Cookie)ベースのセッション維持(セッション・アフィニティー)が必要で、同一 Client のアクセスを同一ノードへ振り分ける機能を有しているか確認が必要。
3. バックエンドサーバー(8080)に転送するヘッダや追加処理
X-Forwarded-Proto
LBがバックエンドサーバーに転送する際に、リクエストが https である事を識別させるヘッダ項目
X-Forwarded-For
LBがバックエンドサーバーに転送する際に、クライアントのIPアドレスを識別させるヘッダ項目
WebSocketのUpgradeヘッダーの処理
HTTPリクエストを解析し、Upgrade ヘッダーを検出すると、それをトリガーにTCP切り替え
4. バックエンドサーバとの通信
ロードバランサーから各CAMServerへの通信は以下のプロトコルとポートで行う。
- プロトコル: HTTP
- ポート番号: 8080
- 接続例: http://HOSTNAME:8080/
5. ヘルスチェック(Health Check)
- ロードバランサーは次のURLを定期的にリクエストし、条件を満たす場合に「正常」と判定。
- ヘルスチェックURL: http://HOSTNAME:8080/CAMServer/healthcheck
- ヘルスチェックの条件: HTTPステータスコード: 200レスポンスボディ: {“status”:200}
6. サーバ間データ同期のため、通信許可
- リアルタイムなデータ(ユーザプレゼンス状態、メッセージ、チャットルーム等)更新はCAMServer間で同期を行うためFirewall などでサーバ間の通信許可が必要。
- サーバ間接続URLは、iniファイルの cam.clusterHosts で定義
- 例)cam.clusterHosts=camserver1:8080;camserver2:8080;camserver3:8080
※ camserver1 でユーザ情報が更新された場合、以下URLに接続しデータ同期を行う
http://camserver2:8080/CAMServer/syncWebSocketData
http://camserver3:8080/CAMServer/syncWebSocketData