이중화 및 부하 분산 정보
CAMServer의 Ultimate 계획에서,온프레미스 환경에서 매우 쉽게웹 서버, Video 서버의 중복화 및 부하 분산을 할 수 있습니다. 이것에 의해, 1대의 서버가 다운해도 서비스를 계속시킬 수가 있어, 또 대규모 유저로 이용해도 처리를 분산시켜 퍼포먼스를 열화시키지 않고 서비스를 제공할 수 있게 됩니다.
분산 구성의 CAMServer
하지만 실시간 커뮤니케이션이 가능합니다. 예를 들어,CAMServer1
에 연결된 클라이언트는CAMServer2
에 연결된 다른 클라이언트와 채팅 및 웹 회의가 가능합니다. Video 서버의 부하 분산은 활성 회의 수와 참가자 수에 따라 분산됩니다.
웹 회의의 동시 개최 회의 수는 단순히CAMServer
노드를 늘리는 것만으로는 달성할 수 없습니다. 모든 회의가 동일한 VPN 또는 센터 라우터를 중계하지 않도록 네트워크 구성을 고려해야합니다.
중복 및 부하 분산 구성
온-프레미스 요구 수준 비용에 따라 최적의 환경을 구성할 수 있습니다.
소규모 시작 구성
- 스토리지:CAMServer1 측에 DB/File 을 배치해, CAMServer2 로부터도 참조한다. 이 경우에도 모든 사용자는 실시간으로 데이터가 공유.
- 백업: 매일 DB / File 데이터를 CAMServer2에 백업해야합니다.
- 부하 분산: 액세스하는 CAMServer를 부서별로 나누는 것으로 부하 분산이 가능(또는 대기계로 한다).
- 가용성: 장애 발생 시,웹 앱 버전 사용하면,
cam.clusterHosts
를 검출해 자동 페일오버가 가능. Disk 장애의 경우백업했다전날까지의 데이터를 보증. - 비용: 가장 저렴한 구성. 1대 구성으로 시작하여 부하에 따라 스케일업이 가능.
외부 스토리지(NAS) 구성
- 스토리지: RAID 구성으로 내구성이 높은 외부 Storage NAS에 DB / File을 배치하고 CAMServer1 / CAMServer2 함께 참조합니다.
- 백업: RAID 구성에서도 전원・케이스의 고장이나 인위적인 장해를 고려하여 매일 DB/File 데이터의 백업이 필요.
- 부하 분산: 스몰 스타트 구성과 동일.
- 가용성: 스몰 스타트 구성과 동일.
- 비용: 상대적으로 저렴한 구성.
중복된 외부 스토리지 구성
- 스토리지: 이중화된 파일 공유 서버(Windows Server Failover Clustering + SAN, AWS S3 등)를 이용하여 Disk 장애에 고가용성을 중시하는 구성.
- 백업: 데이터가 자동으로 복제되므로 정책에 따라 백업이 필요하지 않습니다. 다만 인위적인 장해를 고려하는 경우(수동으로 디스크를 삭제한 등), 역시 백업이 필요.
- 부하 분산: 스몰 스타트 구성과 동일.
- 가용성: 웹 서버는 소규모 시작 구성과 동일합니다. Disk나 케이스의 고장에 의한 장해 발생시에도 자동적으로 전환이 가능.
- 비용: 도입 비용이 높다. AWS S3는 저렴하게 구축할 수 있지만, 온프레미스 중시의 경우는 선택할 수 없다.
Load Balancer 구성
- 스토리지: 소규모 시작 구성 / 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 서버를 선택하는 경우에 영향을 받습니다. 또웹 앱 버전 를 이용하는 것으로 장해 발생시 페일오버 접속이 가능합니다.
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