BigBlueButton.plNiezależny serwis po polsku

Klaster i proxy

Konfiguracja reverse proxy i scenariusze wdrożenia wielu serwerów.

Tłumaczenie automatyczne 4.0 Stan źródeł:
Ilustracja rozdziału: Klaster i proxy
Ilustracja z repozytorium dokumentacji BigBlueButton, tag v4.0.0. Niektóre obrazy źródłowe przedstawiają starszy interfejs. Źródło ilustracji.

Motywacja

W tradycyjnej konfiguracji klastra odpowiedzialny jest skaler taki jak Scalelite dystrybuowanie nowych spotkań i dołączanie użytkowników do jednego z dostępnych Serwery BigBlueButton. Chociaż ta konfiguracja jest prosta, wymaga od użytkowników zgody uprawnienia dostępu do mikrofonów, filmów i udostępniania ekranu zawsze, gdy: użytkownik zostaje przypisany do innego serwera. Wynika to z zachowania tzw getUserMedia() wywołanie interfejsu API przeglądarki. Jest to środek zapobiegawczy, który chroni użytkowników udzielają dostępu tylko do serwerów, do których mają zamiar. Jednak w konfiguracji klastra każdy serwer indywidualnie pyta o pozwolenie. Jest to postrzegane jako irytujące lub nawet nieregularny.

W tym dokumencie opisano podejście do konfigurowania klastra BigBlueButton w sposób , który wyświetli monit każdemu użytkownikowi tylko raz dla każdego typu nośnika. Aby zapewnić poziomą skalowalność , ruch medialny i połączenia z gniazdem sieciowym są bezpośrednio wymieniane pomiędzy użytkownikiem a serwerem BigBlueButton, który prowadzi konferencję. Ten osiąga się poprzez przekazywanie tylko interfejsu użytkownika klienta HTML5 przez wspólny serwer proxy.

Przed zagłębieniem się w szczegóły ważne jest, aby podkreślić, czym nie jest to rozwiązanie :

Nie jest pełnym odwrotnym proxy dla całego ruchu związanego z BigBlueButton. Przeglądarka i serwer BigBlueButton nadal będą nadal wymieniać większość ruchu bezpośrednio.

  • Nie jest także powiązany ze Scalelite. Możesz wybrać dowolny inny moduł równoważenia obciążenia BigBlueButton .

Uwaga: Konfiguracja proxy klastra wymaga BigBlueButton 2.4.0 lub nowszego!

Zasada podstawowa

Poniższy obraz wizualizuje zależności koncepcyjne. Należy pamiętać, że nie jest to schemat blokowy .

Conceptual drawing of the cluster proxy setup

Gdy użytkownik rozpocznie spotkanie lub dołączy do niego (1), Greenlight lub inny interfejs BigBlueButton zainicjuje nowe spotkanie, dzwoniąc pod numer create i join API wywołuje odpowiednio Scalelite (2). Scalelite z kolei przekaże wywołania API do jednego z serwerów BigBlueButton (3). Serwer BigBlueButton poinformuje przeglądarkę, aby pobrała interfejs klienta HTML5 za pośrednictwem adresu proxy klastra. Tym samym serwer BigBlueButton będzie wyglądał tak, jakby był ukryty za klastrem proxy (4).

Podczas gdy zasoby takie jak obrazy, pliki CSS i JavaScript są ładowane za pośrednictwem klastra proxy , wszystkie websockety, strumienie multimediów i pobierane/pobierane slajdy są bezpośrednio wymieniane z serwerem BigBlueButton, który obsługuje spotkanie (5).

Konfiguracja

W tym przykładzie będziemy używać następujących nazw hostów:

  • bbb-proxy.example.com: Serwer proxy klastra
  • bbb-XX.example.com: Serwery BigBlueButton (XX reprezentuje numer serwera BigBlueButton)

Serwer proxy proxy

W tym przykładzie: użyjemy prostej konfiguracji opartej na Nginx. Dla każdego serwera BigBlueButton dodaj nową dyrektywę lokalizacyjną. Dla pierwszego węzła będzie to:

location /bbb-01/html5client/ {
  proxy_pass https://bbb-01.example.com/bbb-01/html5client/;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "Upgrade";
}

location /bbb-01/bigbluebutton/api {
  proxy_pass https://bbb-01.example.com/bigbluebutton/api;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "Upgrade";
}

Powtórz tę dyrektywę location dla każdego serwera BigBlueButton.

Możesz wybrać dowolne inne oprogramowanie odwrotnego proxy HTTP, które wypełni rolę odwrotnego proxy w tej konfiguracji.

Ponieważ jest to nazwa hosta widoczna dla użytkownika, możesz wybrać ładniejszą nazwę hosta, , na przykład bbb-cluster.example.com. Pamiętaj, aby wyregulować go we wszystkich miejscach.

Serwery BigBlueButton

Dla każdego serwera BigBlueButton w klastrze powtórz następujące kroki:

Dodaj te opcje do /etc/bigbluebutton/bbb-web.properties:

defaultHTML5ClientUrl=https://bbb-proxy.example.com/bbb-01/html5client/
presentationBaseURL=https://bbb-01.example.com/bigbluebutton/presentation
accessControlAllowOrigin=https://bbb-proxy.example.com
graphqlWebsocketUrl=wss://bbb-01.example.com/graphql
graphqlApiUrl=https://bbb-01.example.com/api/rest

Dodaj następujące opcje do /etc/bigbluebutton/bbb-html5.yml:

public:
  app:
    basename: '/bbb-01/html5client'
    bbbWebBase: 'https://bbb-01.example.com/bigbluebutton'
    learningDashboardBase: 'https://bbb-01.example.com/learning-analytics-dashboard'
  media:
    stunTurnServersFetchAddress: 'https://bbb-01.example.com/bigbluebutton/api/stuns'
    livekit:
      url: wss://bbb-01.example.com/livekit
  kurento:
    wsUrl: wss://bbb-01.example.com/bbb-webrtc-sfu
  presentation:
    uploadEndpoint: 'https://bbb-01.example.com/bigbluebutton/presentation/upload'
  sharedNotes:
    serverHostname: bbb-01.example.com

Utwórz nowy plik w /etc/bigbluebutton/nginx/bbb-cluster.nginx

  • zamień bbb-proxy.example.com na swoje źródło proxy w $bbb_cors_origin
  • dodaj początek bbb-html5 punkt mocowania we wszystkich sekcjach location
# Enable per-origin CORS
# Required because the HTML5 client is served from the proxy origin while slides (and other requests)
# are fetched directly from this BBB node with credentials
set $bbb_cors_origin 'https://bbb-proxy.example.com';

# running in production (static assets)
location /bbb-01/html5client {
    gzip_static on;
    alias /usr/share/bigbluebutton/html5-client/;
    index index.html;
    try_files $uri $uri/ =404;
}

location /bbb-01/html5client/locales {
  alias /usr/share/bigbluebutton/html5-client/locales;
  autoindex on;
  autoindex_format json;
}

Uwaga: Ważne jest, aby konfiguracja lokalizacji była taka sama pomiędzy serwerem BigBlueButton i serwerem proxy.


Dodaj trasę dla modułu obsługi ustawień regionalnych dla lobby gościa. Lobby dla gości obsługiwane jest bezpośrednio z węzła BBB.

# /etc/bigbluebutton/nginx/bbb-cluster.nginx
location =/html5client/locale {
  return 301 /bbb-01$request_uri;
}

Utwórz plik /etc/systemd/system/bbb-web.service.d/override.conf i dodaj następujące ustawienie środowiska:

[Service]
Environment="JDK_JAVA_OPTIONS=-Dgrails.cors.enabled=true -Dgrails.cors.allowCredentials=true -Dgrails.cors.allowedOrigins=https://bbb-proxy.example.com,https://bbb-01.example.com"

Utwórz plik /etc/bigbluebutton/bbb-graphql-middleware.yml o następującej zawartości:

# If you are running a cluster proxy setup, you need to allow the url of the Frontend
# Add an Authorized Cross Origin. See https://docs.bigbluebutton.org/administration/cluster-proxy
server:
  authorized_cross_origin: bbb-proxy.example.com

Uwaga: Zwróć uwagę, że ten nie zawiera protokołu, tylko nazwę hosta.


Dostosuj ustawienie CORS w /etc/bigbluebutton/bbb-graphql-server.env:

HASURA_GRAPHQL_CORS_DOMAIN="https://bbb-proxy.example.com"

Uwaga: Ten zawiera protokół.


Jeśli Twój serwer proxy używa innej domeny głównej niż Twój serwer BBB, będziesz potrzebować dodatkowej konfiguracji. Dodaj następujące ustawienia do /usr/share/bbb-web/WEB-INF/classes/application.properties:

server.servlet.session.cookie.secure=true
server.servlet.session.cookie.SameSite=none

Uwaga: Ta zmiana zostanie cofnięta wraz z kolejnymi aktualizacjami bbb-web. Jeśli polegasz na zastąpieniu, spróbuj uwzględnić je w procedurze poinstalacyjnej.


Przeładuj systemd i uruchom ponownie BigBlueButton:

# systemctl daemon-reload
# bbb-conf --restart

Teraz otwarcie nowej sesji powinno wyświetlić w pasku adresu przeglądarki bbb-proxy.example.com/bbb-XX/html5client/, a przeglądarka powinna zapytać o pozwolenie na dostęp tylko raz.

Dalsze uwagi

Bezpieczeństwo

Jeśli Twój serwer proxy ma dostęp do maszyn wewnętrznych, upewnij się, że odwrotne proxy nie daje dostępu do stron internetowych na maszynach innych niż serwery BigBlueButton . W sugerowanej konfiguracji opisanej powyżej tak nie jest. Może to stanowić problem, jeśli uciekniesz się np. do oparte na wyrażeniach regularnych dyrektywy location, aby uniknąć dodawania jednego location na serwer BigBlueButton .

Wydajność, ruch danych i separacja ról

BigBlueButton HTML5 ma rozmiar kilku megabajtów. Upewnij się, że ruch pomiędzy serwerami BigBlueButton a serwerem proxy klastra nie powoduje dodatkowych kosztów .

Ta konfiguracja wprowadza widoczny dla użytkownika pojedynczy punkt awarii, tj. widoczny cel DDoS . Upewnij się, że Twój serwer frontendowy jest odporny na ataki DDoS, np. ma wyłączone śledzenie połączeń w ustawieniach zapory sieciowej, a serwer WWW jest skonfigurowany tak, aby obsługiwał wystarczającą liczbę połączeń. Jednakże te optymalizacje są raczej specyficzne dla poszczególnych konfiguracji i dlatego wykraczają poza zakres tego dokumentu.

Z tego samego powodu zaleca się pozostawienie Scalelite na innej maszynie i w celu zapewnienia konfiguracji HA dla serwera proxy (tj. przy użyciu przełączania awaryjnego IP lub Anycast). Proszę uważnie monitorować swoją konfigurację.