经验大分享:SRS4WebRTC集群docker安装部署:

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
传统型负载均衡 CLB,每月750个小时 15LCU
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 经验大分享:SRS4WebRTC集群docker安装部署:

webrtc doc:

官网部署文档:

参考:

单台服务器做直播风险太高,可以利用SRS的集群模式,示意图如下

源站服务器集群:origin server cluster,

边缘服务器集群:edge server cluster,可以用N台机器,从源站拉流,用于较大规模的实时播放。

源站前置负载均衡(硬件或软件负载均衡都行),上图中用haproxy来实现tcp的软负载均衡。

边缘服务器前置反向代理(比如:nginx),用于提供统一的播放地址,同时解决跨域问题,给客户端拉流播放。

这样架构的好处有以下:

1、不管是源站集群,还是连缘服务器集群,均可水平扩展,理论上没有上限。

2、源站可以仅用较少的机器,比如2主2从,就能实现一个高可用且性能尚可的集群(如果业务量不大,连slave server都可以省掉)

3、边缘服务器集群,可以根据实际用户量随时调整规模,另外hls切片,可以放在edge server上切片,减轻源站服务器压力。

部署规划:

ip rtmp port http api port role

192.168.25.131 19350 9090 originA

192.168.25.132 19350 9090 originB

192.168.25.133 19350 9090 originC

192.168.25.131 1935 8080 80 edgeA

192.168.25.132 1935 8080 80 edgeB

192.168.25.133 1935 8080 80 edgeC

git 下载代码,编译:

git clone -b 4.0release

cd srs/trunk ./configure make

启动:

srs/trunk> ./objs/srs -c conf/srs.conf 指定配置文件

此处主要docker 版本

docker images:

sudo docker pull registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4

or

sudo docker pull ossrs/srs:4

originA

vim /opt/srs/cluster/originA.conf (3台都一样)

# conf/origin.cluster.serverA.conf

listen 19350;

max_connections 1000;

daemon off;

srs_log_tank console;

pid ./objs/origin.cluster.serverA.pid;

http_api {

enabled on;

listen 9090;

}

vhost defaultVhost {

cluster {

mode local;

origin_cluster on;

coworkers 192.168.25.131:9090 192.168.25.132:9090 192.168.25.133:9090;

}

}

run:

docker run -itd --restart=always --net=host \

-v /opt/srs/cluster/originA.config:/opt/srs/cluster/originA.config \

registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 \

objs/srs -c /opt/srs/cluster/originA.conf

edgeA (三台都一样)

编写SRS边缘配置文件,从多个源站拉流,实现热备和负载均衡

vim /opt/srs/cluster/edgeA.conf

# conf/origin.cluster.edge.conf

listen 1935;

max_connections 1000;

pid objs/edge.pid;

daemon off;

srs_log_tank console;

vhost defaultVhost {

cluster {

mode remote;

origin 192.168.25.131:19350 192.168.25.132:19350 192.168.25.133:19350;

}

}//代码效果参考:http://www.ezhiqi.com/bx/art_185.html

run:

docker run -itd --restart=always --net=host \

-v /opt/srs/cluster/originA.config:/opt/srs/cluster/originA.config \

registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 \

objs/srs -c /opt/srs/cluster/edge.conf

都启动后 test:

推流分别测试

拉流:

是否播放正常

配置haproxy

配置

vim /opt/docker/haproxy/srs/haproxy.cfg

global

daemon

# nbproc 1

# pidfile /var/run/haproxy.pid

# 工作目录

chroot /usr/local/etc/haproxy

defaults

log 127.0.0.1 local0 err #【err warning info debug】

mode http #默认的模式mode { tcp|http|health }//代码效果参考:http://www.ezhiqi.com/bx/art_2609.html ,tcp是4层,http是7层,health只会返回OK

retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置

option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器

option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接

option dontlognull #日志中不记录负载均衡的心跳检测记录

maxconn 4096 #默认的最大连接数

timeout connect 5000ms #连接超时

timeout client 30000ms #客户端超时

timeout server 30000ms #服务器超时

#timeout check 2000 #=心跳检测超时

######## 监控界面配置 #################

listen admin_status

# 监控界面访问信息

bind 0.0.0.0:8888

mode http

# URI相对地址

stats uri /dbs

# 统计报告格式

stats realm Global\ statistics

# 登录账户信息

stats auth admin:123456

########frontend配置##############

######## srs cluster 负载均衡配置 ###############

listen proxy-srs

bind 0.0.0.0:19350

mode tcp

# 负载均衡算法

# static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin

balance roundrobin

# 日志格式

option tcplog

# 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户

# create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;

#option mysql-check user haproxy

# 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效

server SRS_ORG_1 192.168.25.131:19350 check weight 1 maxconn 2000

server SRS_ORG_2 192.168.25.132:19350 check weight 1 maxconn 2000

server SRS_ORG_3 192.168.25.133:19350 check weight 1 maxconn 2000

# 使用keepalive检测死链

# option tcpka

#########################################

配置解释:

option mysql-check user haproxy | 用于心跳的mysql用户,请在mysql集群数据库进行创建该用户haproxy,读者可自己配置该用户名。在此处我们按照约定俗成定为haproxy。

server SRS_ORG_1 192.168.25.131:19350 check weight 1 maxconn 2000 中

check(心跳检测),weight 1(权重,只有当算法为static-rr才生效),maxconn 2000(最大连接数)

参数可以参考:

使用Docker run启动容器: 新版本 docker pull haproxy:2.7.4

sudo docker run -d -p 19350:19350 -p 8888:8888 --name haproxy -v /opt/docker/haproxy/srs/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:1.9.11

重启haproxy成功后,可以用obs推流到 试下推流是否正常,如果ok,可以尝试把其中一台master停掉,看看是否有影响。

nginx:

关键是配置:

vim /opt/docker/ngnix/srs/nginx.cfg

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

upstream srs{

server 192.168.25.131:8080;

server 192.168.25.132:8080;

server 192.168.25.133:8080;

}

server {

listen 80;

server_name localhost;

location ~ / {

proxy_pass

add_header Cache-Control no-cache;

add_header Access-Control-Allow-Origin ;

}

location / {

root html;

index index.html index.htm;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

include servers/;

}//代码效果参考:http://www.ezhiqi.com/zx/art_2982.html

run:

docker run -itd --restart unless-stopped -p 7996:80 --name srs-nginx-container \

-v /opt/docker/ngnix/srs/nginx.cfg :/etc/nginx/nginx.conf:ro nginx:1.21.1

注:新增一个upstream用于指定要转发的edge服务器节点,然后在location ~ / 这里proxy_pass 指定upstream的名字即可(location ~ /* 切记要写在 location / 前面)。这样配置后,访问 理论上就能转到后端的edge服务器。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
4月前
|
Prometheus 监控 Cloud Native
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
344 79
|
7月前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
906 91
|
6月前
|
存储 开发工具 数据库
gitea docker 快捷安装部署
通过Docker快速部署Gitea,可以大大简化安装过程,确保系统环境的稳定性与一致性。使用Docker Compose管理容器,使得Gitea的维护和升级更加方便。通过定期备份数据,确保在需要时可以快速恢复。这个部署方案适合各种规模的开发团队,特别是希望通过自托管方式管理代码库的用户。
427 24
|
9月前
|
Prometheus 监控 Cloud Native
如何监控Docker Swarm集群的性能?
如何监控Docker Swarm集群的性能?
483 64
|
9月前
|
Prometheus 监控 Cloud Native
如何使用Prometheus监控Docker Swarm集群的资源使用情况?
还可以根据实际需求进行进一步的配置和优化,如设置告警规则,当资源使用超出阈值时及时发出警报。通过这些步骤,能够有效地使用 Prometheus 对 Docker Swarm 集群的资源进行监控和管理。
329 8
|
9月前
|
监控 Docker 容器
Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项
本文深入探讨了Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项,旨在帮助用户高效管理集群资源,适应业务变化,确保服务稳定性和资源优化。
216 6
|
10月前
|
API Docker 容器
【赵渝强老师】构建Docker Swarm集群
本文介绍了如何使用三台虚拟主机构建Docker Swarm集群。首先在master节点上初始化集群,然后通过特定命令将node1和node2作为worker节点加入集群。最后,在master节点上查看集群的节点信息,确认集群构建成功。文中还提供了相关图片和视频教程,帮助读者更好地理解和操作。
116 0
|
10月前
|
调度 Docker 容器
【赵渝强老师】Docker Swarm集群的体系架构
Docker Swarm自1.12.0版本起集成至Docker引擎,无需单独安装。它内置服务发现功能,支持跨多服务器或宿主机创建容器,形成集群提供服务。相比之下,Docker Compose仅限于单个宿主机。Docker Swarm采用主从架构,Swarm Manager负责管理和调度集群中的容器资源,用户通过其接口发送指令,Swarm Node根据指令创建容器运行应用。
145 0
|
2月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
202 57