[SRS+docker]实现直播服务器 7 SRS集群的负载均衡
目录1 前言2 负载均衡组件选定3 负载均衡方案选定4 环境搭建4.1 容器启动4.1.1 启动命令4.2 安装和使用4.2.1 nginx版本4.2.2 nginx下载4.2.3 nginx解压编译安装4.2.4 nginx启动4.2.5 负载均衡配置4.2.6 重启nginx5 负载均衡测试5.1 测试用例5.2 验证结果6 总结1 前言上一篇,分享了基于hls、flv的拉流集群的实现。上一篇
目录
1 前言
上一篇,分享了基于hls、flv的拉流集群的实现。
上一篇:传送门
集群起来了,那么集群的负载均衡就一定要做了,本篇就来讲解下这块的内容。
2 负载均衡组件选定
该专栏讲到现在已经有很多篇的沉淀了,所以大家在看这个专栏之前,建议要先把前面的看完,不然每个章节讲解的内容单独看你会看不懂的。
因为整个srs集群是采用docker来搭建的,因此负载均衡服务器也是单独起一个docker容器来部署的。
组件 | 版本 | 备注 |
Nginx | 1.20 | |
Centos | 7.x |
3 负载均衡方案选定
考虑到实际的应用场景,推流不会有很大的负载压力,因此不对推流进行集群和负载均衡处理。但是拉流因为只要观众一多起来,拉流会很快成为负载压力的焦点。
因此,使用nginx作为拉流的负载均衡服务器:
4 环境搭建
4.1 容器启动
因为nginx搭建过程,也需要编译,需要的编译环境跟之前srs的编译环境是一样的,为了方便,我就直接复制过来了:
# 安装编译环境
yum -y install gcc gcc-c++
# 安装编译环境
yum install -y patch
# 安装编译环境
yum install -y unzip
# 安装编译环境
yum -y install gcc automake autoconf libtool make
# 安装 git
yum install -y git
但是实际在安装这些环境的过程,可能会因为网络原因会安装的很慢,所以,为了省时间,我直接把之前[SRS+docker]实现直播服务器 5 SRS集群方案里头已经提交为镜像的镜像文件作为基础镜像(如下图),直接以该镜像作为镜像启动容器,这样就省了安装编译环境的过程了。
4.1.1 启动命令
nginx容器启动命令:
docker run -d -p 80:80 --privileged=true 5de52d772a3c /usr/sbin/init
4.2 安装和使用
Centos中搭建nginx这个网上有很多现成的教程。所以安装过程也比较简单:
4.2.1 nginx版本
nginx官网为:http://nginx.org/en/download.html
选择一个你想要的版本,右击复制下载链接:
4.2.2 nginx下载
在centos上运行:
cd /usr/local && curl http://nginx.org/download/nginx-1.20.1.tar.gz
等待下载完毕。
4.2.3 nginx解压编译安装
在centos上运行:
# --prefix=/usr/local/nginx-1.20.1告诉linux等会安装的文件要放在哪里,这样比较方便找到nginx的安装目录。(也可以不设置,直接 ./configure)
tar -zxvf nginx-1.20.1.tar.gz && cd nginx-1.20.1 && ./configure --prefix=/usr/local/nginx-1.20.1 && make
4.2.4 nginx启动
进入到/usr/local/nginx-1.20.1/sbin目录 然后./nginx启动 nginx默认是80端口 如果你想修改端口就进入到conf目录下找到nginx.conf修改
启动成功之后,因为我们容器的80端口映射到宿主机的也是80端口,所以可以直接通过如下链接来访问,看下nginx是否启动成功:
http://localhost:80
如果成功了,继续往下看
4.2.5 负载均衡配置
nginx的负载均衡通过配置./conf/nginx.conf文件来实现:
# 新增 upstream 通过docker容器之间内网访问,并使用权重负载均衡策略
upstream srs-edge-server {
server 172.17.0.3:8080 weight=2;
server 172.17.0.4:8080 weight=1;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
# 修改,所有请求转发到边缘站
proxy_pass http://srs-edge-server;
proxy_redirect default;
}
...
4.2.6 重启nginx
通过netstat -ntpl | grep 80或者ps -ef | grep nginx命令查找到nginx占用的pid,然后通过kill -9 pid杀掉进程。再启动nginx即可。
5 负载均衡测试
5.1 测试用例
任选推流集群里头的一台来推流:
rtmp://localhost:1935/live/1
使用nginx拉流(以flv协议为例子):
5.2 验证结果
经过测试:
- 3次请求里头,前两次的请求落在172.17.0.3的服务器上,最后一次落在172.17.0.4服务器上,满足预期。
- nginx可以实现flv拉流集群负载均衡
- nginx可以实现hls拉流集群负载均衡
6 总结
在上面试验之后,笔者还做了一些其他的测试,比如动态下架一台拉流服务器,或者动态上架一台拉流服务器等,得到如下结论:
- SRS集群支持Hls和HttpFlv两种协议
- 单台服务情况下,hls/flv协议的资源消耗低于webRtc协议
- 使用nginx中间件可以实现SRS拉流侧负载均衡
- 根据SRS集群的特点,试验发现:SRS支持弹性的上架或者下架拉流服务器
总的来说:基于SRS的直播方案可以作为直播的一个备选方案
下一篇 云厂商直播服务描述
更多推荐
所有评论(0)