blindsidenetwks/scaleliteBigBlueButton是一个用于在线学习的开源网络会议系统。
Scalelite是一个开源负载均衡器,用于管理BigBlueButton服务器池。它使服务器池呈现为单一(高度可扩展的)BigBlueButton服务器。前端应用(如Moodle或Greenlight)向Scalelite服务器发送标准BigBlueButton API请求,Scalelite再将这些请求分发到池中考量最低的BigBlueButton服务器。
符合最低配置的单一BigBlueButton服务器支持约200名并发用户。
对于许多学校和组织,支持4个50人同时上课或8个25人同时会议的容量已足够。但如果学校需要支持50个同时上课、共1500名用户,单一BigBlueButton服务器无法承受这样的负载。
使用Scalelite,学校可以创建包含4台BigBlueButton服务器的池,支持16个50人同时上课。如需更高容量,只需向池中添加更多BigBlueButton服务器。
BigBlueButton已开发超过10年,最新版本为纯HTML5客户端,配有详尽文档。还有名为bbb-install.sh的安装脚本,可在约15分钟内搭建BigBlueButton服务器(含Let's Encrypt证书)。使用bbb-install.sh可快速搭建供Scalelite管理的服务器池。
为实现负载均衡,Scalelite定期轮询每个BigBlueButton服务器,检查其是否在线、是否准备好接收API请求,并确定当前负载(运行中的会议数量)。当Scalelite收到创建新会议的create API调用时,会将会议分配到池中负载最低的服务器,从而均匀平衡会议请求负载。
多台BigBlueButton服务器会生成大量录制文件。Scalelite通过整合录制文件、在数据库中建立索引,在接收getRecordings请求时,利用数据库索引快速返回可用录制列表。
Scalelite安装过程需要高级技术知识,至少应熟悉:
systemd等工具管理进程如果您是初学者,可能难以正确部署。如需帮助,请参阅获取帮助。
搭建Scalelite需以下组件:
Scalelite部署示例架构如下:
Scalelite服务器的最低推荐配置:
每台BigBlueButton服务器的最低要求见此处。
外部PostgreSQL数据库的最低推荐配置:
外部Redis缓存的最低推荐配置:
推荐使用bbb-install.sh搭建BigBlueButton服务器池(最低推荐3台),该脚本可自动完成安装、配置(含SSL+Let's Encrypt),并在BigBlueButton新版本发布时更新服务器。
为帮助处于严格防火墙后的用户向BigBlueButton服务器发送/接收媒体(音频、视频、屏幕共享),应搭建TURN服务器,并配置每台BigBlueButton服务器使用该TURN服务器。bbb-install.sh可自动完成此过程。
参见搭建录制文件共享存储卷。
PostgreSQL数据库的搭建高度依赖Scalelite的部署基础设施,建议参考基础设施提供商的文档。确保在下一步中/etc/default/scalelite设置的DATABASE_URL与PostgreSQL数据库的连接URL匹配。更多配置选项见配置。
Redis缓存的搭建高度依赖Scalelite的部署基础设施,建议参考基础设施提供商的文档。确保在下一步中/etc/default/scalelite设置的REDIS_URL与Redis缓存的连接URL匹配。更多配置选项见配置。
参见部署Scalelite Docker容器。
要将前端应用从单一BigBlueButton服务器切换到Scalelite,需修改两项设置:
BigBlueButton服务器URL应设为Scalelite部署的URL:http(s)://<scalelite-hostname>/bigbluebutton/api/BigBlueButton共享密钥应设为在/etc/default/scalelite中设置的LOAD***_SECRET值URL_HOST:应用API端点的可访问主机名,用于防止DNS重绑定***。如在网络负载均衡器后部署Scalelite,应留空。SECRET_KEY_BASE:Rails内部使用的密钥,每个部署应唯一。可通过bundle exec rake secret或openssl rand -hex 64生成。LOAD***_SECRET:应用调用BigBlueButton API时使用的共享密钥。通过openssl rand -hex 32生成。LOAD***_SECRETS:额外共享密钥,用:分隔。任何密钥均可使用。在多应用需集成单一Scalelite服务器的场景中,可为每个应用分配独立密钥,便于后续单独撤销而不影响其他应用。DATABASE_URL:PostgreSQL数据库连接URL,参见Rails文档。格式为postgresql://username:password@connection_url。也可通过config/database.yml配置数据库,无需此环境变量。REDIS_URL:Redis服务器连接URL,参见Redis gem文档。格式为redis://username:password@connection_url。也可通过config/redis_store.yml配置Redis,无需此环境变量。这些变量用于Docker镜像中的服务启动脚本,非Docker部署无需设置。
NGINX_SSL:设为"true"可启用nginx镜像的SSL监听。启用时,需将/etc/nginx/ssl/live/$URL_HOST/fullchain.pem(证书及中间证书)和/etc/nginx/ssl/live/$URL_HOST/privkey.pem(私钥)挂载到Docker镜像中,或直接挂载整个/etc/letsencrypt目录到/etc/nginx/ssl。BEHIND_PROXY:如Scalelite位于代理或负载均衡器后,设为true。POLL_INTERVAL:轮询器镜像轮询BigBlueButton服务器的间隔(秒),默认60。RECORDING_IMPORT_POLL:是否轮询录制文件暂存目录以获取新文件,默认"true"。如暂存目录位于inotify可用的本地文件系统,可设为"false"以减少CPU开销。RECORDING_IMPORT_POLL_INTERVAL:轮询录制文件暂存目录的间隔(秒,轮询模式下),默认60。PORT:监听的TCP端口,默认3000。BIND:替代端口设置,可指定绑定URL(如Unix socket)。参见Puma文档。INTERVAL:更新服务器统计信息和会议状态的轮询间隔(秒),默认60。仅用于"poll"任务。WEB_CONCURRENCY:Puma Web服务器的进程数。合理值为每CPU线程2个或每256MB内存1个,取较低值。RAILS_MAX_THREADS:Rails进程的线程数。Redis连接池大小默认与此值匹配。默认5,适合生产环境。RAILS_ENV:环境类型,可选development、test或production。Docker镜像默认production,Rails默认development。BUILD_NUMBER:BigBlueButton顶级API端点中报告的额外构建版本。Docker镜像在构建时预设此值。RAILS_LOG_TO_STDOUT:输出日志到STDOUT而非文件。推荐用于服务管理器(如systemd)或Docker部署。Docker镜像默认启用。REDIS_POOL:Redis连接池大小,默认RAILS_MAX_THREADS。MAX_MEETING_DURATION:任何服务器上创建的会议的最大时长。如create调用中指定duration,仅当该值大于MAX_MEETING_DURATION时才会被覆盖。RECORDING_SPOOL_DIR:传输的录制文件存放目录,默认/var/bigbluebutton/spool。RECORDING_WORK_DIR:录制文件传输/导入过程中临时文件提取目录,默认/var/bigbluebutton/recording/scalelite。RECORDING_PUBLISH_DIR:发布的录制文件存放目录(供Web服务器访问),默认/var/bigbluebutton/published。RECORDING_UNPUBLISH_DIR:未发布的录制文件存放目录(Web服务器不可访问),默认/var/bigbluebutton/unpublished。SERVER_HEALTHY_THRESHOLD:离线服务器需成功响应的次数才能被视为在线,默认1。如增加此值,应减小POLL_INTERVAL。SERVER_UNHEALTHY_THRESHOLD:在线服务器需失败响应的次数才能被视为离线,默认2。如增加此值,应减小POLL_INTERVAL。DB_DISABLED:设为true禁用数据库。RECORDING_DISABLED:设为true禁用录制功能及相关API。GET_MEETINGS_API_DISABLED:设为true禁用GET_MEETINGS API。POLLER_THREADS:轮询器进程的线程数,默认5。config/redis_store.yml)Docker部署应通过REDIS_URL环境变量配置Redis连接,非Docker部署可使用config/redis_store.yml。该文件允许按环境指定Redis服务器配置,结构类似ActiveRecord的config/database.yml。默认配置在开发环境连接本地Redis,测试环境使用"fakeredis"(内存Redis模拟器)。生产环境默认通过环境变量配置。可设置以下选项:
pool:连接池数量(应匹配线程数),默认RAILS_MAX_THREADS环境变量,否则为5。pool_timeout:连接池满时的等待时间(秒),默认5。namespace:所有Redis键的可选前缀。使用以下命令可将Scalelite升级到最新版本:
systemctl restart scalelite.target
要确认是否为最新版本,在浏览器中访问http(s)://<scalelite-hostname>/bigbluebutton/api,检查<build></build>标签内的值是否为新版本。
Scalelite提供以下命令:
available或unavailable,后者不分配新会议)服务器管理通过rake任务实现,更新Redis中的服务器信息。
Docker部署中,需在容器内运行这些命令。可通过docker exec -it scalelite-api /bin/sh进入容器。
sh./bin/rake servers
输出每个服务器的摘要详情,示例:
id: 2d2d674a-c6bb-48f3-8ad4-68f33a80a5b7 url: [***] secret: 2bdce5cbab581f3f20b199b970e53ae3c9d9df6392f79589bd58be020ed*** enabled load: 21.0 load multiplier: 2.0 online
需注意的信息:
id:更新或移除服务器时使用的IDenabled或disabled:服务器是否启用(见下文“启用/禁用服务器”)load:服务器上的会议数量,新会议将分配到负载较低的服务器,由轮询进程更新online:服务器是否响应API请求,由轮询进程更新sh./bin/rake servers:add[url,secret,loadMultiplier]
url是BigBlueButton服务器API端点的完整URL,必须包含/api。可在BigBlueButton服务器上运行bbb-conf --secret获取URL和密钥。
loadMultiplier用于调整服务器优先级,较弱服务器应设较高值。不指定时默认1。
命令成功执行后会输出新服务器的ID和OK。注意:添加的服务器默认处于禁用状态,需通过“启用服务器”命令启用。
sh./bin/rake servers:remove[id]
警告:不要移除有运行中会议的服务器!这会导致数据库不一致。应等待所有会议结束,或先执行“紧急处理”命令。
sh./bin/rake servers:disable[id]
标记服务器为禁用状态。禁用后,不会在该服务器上启动新会议,现有会议将继续运行直至结束。轮询进程仍会运行以更新“在线”状态和检测会议结束。此功能用于在不中断进行中会议的情况下为服务器更新做准备。
sh./bin/rake servers:enable[id]
标记服务器为启用状态。注意:服务器需等待轮询进程下次运行更新负载信息后才会被分配新会议。
sh./bin/rake servers:panic[id]
禁用服务器并清除所有会议状态。此方法用于从崩溃的BigBlueButton服务器恢复。清除状态后,尝试加入原在此服务器上会议的用户将被重定向到其他服务器上的新会议。
sh./bin/rake servers:loadMultiplier[id,newLoadMultiplier]
设置BigBlueButton服务器的load_multiplier。loadMultiplier用于调整服务器优先级,较弱服务器应设较高值。更改后需至少轮询一次才能看到新负载。
sh./bin/rake poll:all
向池中添加服务器后,默认需等待60秒(后台服务器轮询进程的INTERVAL默认值)Scalelite才会将其标记为online。运行此命令可立即轮询服务器,无需等待。
sh./bin/rake status
输出所有服务器的状态表和基本统计信息,用于监控部署整体状态:
HOSTNAME STATE STATUS MEETINGS USERS LARGEST MEETING VIDEOS bbb1.example.com enabled online 12 25 7 15 bbb2.example.com enabled online 4 14 4 5
如需Scalelite搭建和部署的商业帮助,请联系Blindside Networks。===SHORT_DESC=== Scalelite是基于Ruby on Rails开发的开源负载均衡器,用于管理BigBlueButton服务器池,将多个服务器整合为单一可扩展服务,通过分发请求到负载最低的服务器实现均衡负载,支持添加更多服务器轻松扩展并发用户容量。 ===FULL_DESC===# Scalelite
BigBlueButton是一个用于在线学习的开源网络会议系统。
Scalelite是一个开源负载均衡器,用于管理BigBlueButton服务器池,将多个服务器整合为单一(高度可扩展的)BigBlueButton服务。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务