目录

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 重启nginx

5 负载均衡测试

5.1 测试用例

5.2 验证结果

6 总结


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协议为例子):

http://localhost:80/live/1.flv

5.2 验证结果

经过测试:

  • 3次请求里头,前两次的请求落在172.17.0.3的服务器上,最后一次落在172.17.0.4服务器上,满足预期。
  • nginx可以实现flv拉流集群负载均衡
  • nginx可以实现hls拉流集群负载均衡

6 总结

在上面试验之后,笔者还做了一些其他的测试,比如动态下架一台拉流服务器,或者动态上架一台拉流服务器等,得到如下结论:

  1. SRS集群支持Hls和HttpFlv两种协议
  2. 单台服务情况下,hls/flv协议的资源消耗低于webRtc协议
  3. 使用nginx中间件可以实现SRS拉流侧负载均衡
  4. 根据SRS集群的特点,试验发现:SRS支持弹性的上架或者下架拉流服务器

总的来说:基于SRS的直播方案可以作为直播的一个备选方案

下一篇 云厂商直播服务描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐