SRS服务器集群部署

SRS 是一个高效的实时视频服务器,支持 RTMP、WebRTC、HLS、HTTP-FLV 等多种协议。以下是如何搭建 SRS 服务器集群的详细信息:

集群架构概述

SRS 集群通常由以下组件组成:

  • 边缘服务器(Edge):处理客户端连接和流分发

  • 源站服务器(Origin):接收推流并分发到边缘

  • 负载均衡器:分配客户端请求到不同边缘节点

部署步骤

1. 源站服务器配置

# conf/origin.conf
listen              1935;
max_connections     1000;
daemon              on;
pid                 ./objs/srs.pid;
srs_log_tank        file;
srs_log_file        ./objs/srs.log;

http_api {
    enabled         on;
    listen          1985;
}

http_server {
    enabled         on;
    listen          8080;
    dir             ./objs/nginx/html;
}

rtc_server {
    enabled on;
    listen 8000;
    candidate $CANDIDATE_IP;
}

vhost __defaultVhost__ {
    cluster {
        mode            local;
        origin_cluster  on;
        coworkers       127.0.0.1:1985;
    }
}

origin.conf 配置项详细说明

#基本配置项
listen              1935;       # RTMP服务监听端口(默认1935)
max_connections     1000;       # 最大连接数限制
daemon              on;         # 以守护进程模式运行
pid                 ./objs/srs.pid;  # 进程ID存储文件
srs_log_tank        file;       # 日志输出方式(file|console)
srs_log_file        ./objs/srs.log;  # 日志文件路径
srs_log_level       trace;      # 日志级别(trace|debug|info|warn|error)

#HTTP API 配置
http_api {
    enabled         on;         # 启用HTTP API管理接口
    listen          1985;       # API监听端口
    crossdomain     on;         # 允许跨域访问
    raw_api {                   # 原始API配置
        enabled     on;         # 启用原始API(如/api/v1/versions)
    }
}

#HTTP Server 配置(提供 HLS、HTTP-FLV 和 DVR 文件访问)
http_server {
    enabled         on;         # 启用HTTP服务
    listen          8080;       # HTTP服务端口
    dir             ./objs/nginx/html;  # HLS/DVR文件根目录
    cors {
        enabled     on;         # 允许跨域访问(对HLS/FLV重要)
        allow_origin *;        # 允许的域名(*为通配)
    }
}

#RTC (WebRTC) 配置
rtc_server {
    enabled         on;         # 启用WebRTC服务
    listen          8000;       # WebRTC信令端口
    candidate       $YOUR_SERVER_IP;  # 服务器公网IP(必须修改) candidate 必须设置为服务器的公网IP或域名,否则 WebRTC 无法穿透 NAT。
}

#集群配置
vhost __defaultVhost__ {
    cluster {
        mode            local;      # 源站模式(local表示是Origin)
        origin_cluster  on;         # 启用源站集群协作
        coworkers       192.168.1.101:1985 192.168.1.102:1985;  # 其他源站API地址
    }
}

#转码与DVR录制
vhost __defaultVhost__ {
    transcode {                  # 转码配置
        enabled     on;
        ffmpeg      ./objs/ffmpeg/bin/ffmpeg;
        engine hd {              # 转码引擎(示例:高清转码)
            enabled         on;
            vcodec          libx264;
            vbitrate        1500;
            vfps            25;
            vwidth          1280;
            vheight         720;
            acodec          aac;
            abitrate        128;
        }
    }

    dvr {                       # 录制配置
        enabled     on;
        dvr_path    ./objs/nginx/html/[app]/[stream]/[timestamp].flv;
    }
}

#安全控制
vhost __defaultVhost__ {
    # 推流鉴权
    publish {
        enabled     on;
        auth {
            key     "your_push_key";
            expire  3600;       # 密钥有效期(秒)
        }
    }

    # 播放鉴权
    play {
        enabled     on;
        auth {
            key     "your_play_key";
        }
    }
}

#性能调优
vhost __defaultVhost__ {
    tcp_nodelay    on;          # 禁用Nagle算法(降低延迟)
    min_latency    on;          # 最小化延迟模式(牺牲吞吐量)

    hls {
        hls_fragment     5;     # HLS分片长度(秒)
        hls_window      30;     # HLS播放窗口长度(秒)
    }
}

2. 边缘服务器配置

# conf/edge.conf
listen              1935;
max_connections     1000;
daemon              on;
pid                 ./objs/srs.pid;
srs_log_tank        file;
srs_log_file        ./objs/srs.log;

http_api {
    enabled         on;
    listen          1985;
}

vhost __defaultVhost__ {
    cluster {
        mode            remote;
        origin          $ORIGIN_SERVER_IP;
    }
    
    hls {
        enabled         on;
    }
    
    http_remux {
        enabled     on;
        mount       [vhost]/[app]/[stream].flv;
    }
}

edge.conf 配置项详细说明

#基础配置
listen              1935;       # RTMP服务监听端口(默认1935)
max_connections     1000;       # 最大连接数限制(根据服务器性能调整)
daemon              on;         # 以守护进程模式运行
pid                 ./objs/srs.pid;  # 进程ID存储文件
srs_log_tank        file;       # 日志输出方式(file|console)
srs_log_file        ./objs/srs.log;  # 日志文件路径
srs_log_level       trace;      # 日志级别(trace|debug|info|warn|error)

#HTTP API 配置
http_api {
    enabled         on;         # 启用HTTP API管理接口
    listen          1985;       # API监听端口
    crossdomain     on;         # 允许跨域访问
}

#边缘模式核心配置
vhost __defaultVhost__ {
    cluster {
        mode            remote;     # 边缘服务器模式(必须设为remote)
        origin          192.168.1.100:1935;  # 源站服务器地址(必须修改) 必须指向有效的源站服务器地址。
        
        # 高级参数(可选)
        token_traverse  on;         # 携带鉴权token到源站
        origin_connect_timeout 5s;  # 连接源站超时时间
        origin_reconnect 3s;        # 重连源站间隔
    }
}

#协议输出配置
vhost __defaultVhost__ {
    # HTTP-FLV 配置
    http_remux {
        enabled     on;         # 启用HTTP-FLV
        mount       [vhost]/[app]/[stream].flv;  # URL路径格式
    }

    # HLS 配置
    hls {
        enabled         on;     # 启用HLS
        hls_path       ./objs/nginx/html;  # 切片存储目录
        hls_fragment   10;      # 切片时长(秒)
        hls_window     60;      # HLS播放窗口长度(秒)
    }

    # WebRTC 中继配置
    rtc {
        enabled     on;         # 启用WebRTC中继
        stun_timeout 30s;      # STUN超时时间
    }
}

#缓存与性能
vhost __defaultVhost__ {
    # 边缘缓存配置
    edge {
        queue_length    10;     # 边缘缓存数据包数量(降低延迟)
        mix_correct    on;      # 自动校正混合时间戳
    }

    # 低延迟优化
    tcp_nodelay       on;       # 禁用Nagle算法
    send_min_interval 20ms;     # 最小发送间隔
}

#安全控制
vhost __defaultVhost__ {
    # 播放鉴权(边缘节点通常只需播放鉴权)
    play {
        enabled     on;
        auth {
            key     "your_play_key";  # 与源站保持一致
        }
    }

    # 防盗链(可选)
    refer {
        enabled     on;
        all deny;                  # 默认禁止所有
        allow 192.168.1.*;        # 允许特定IP段
    }
}

#故障转移配置
vhost __defaultVhost__ {
    cluster {
        # 备用源站配置(当主源站不可用时切换)
        origin_backup 192.168.1.101:1935 192.168.1.102:1935;
        origin_standby on;        # 启用备用源站自动切换
    }
}

#生产环境建议配置
vhost __defaultVhost__ {
    # 日志记录客户端信息
    play {
        enabled on;
        log     on;        # 记录播放日志
    }

    # 带宽保护
    bandwidth {
        enabled         on;
        default_kbps    3000;  # 默认限制3Mbps/客户端
    }
}

源站Origin与边缘Edge关系: 

  • 边缘节点本身不接收推流,只从源站拉流并分发给客户端。

 

3. 集群部署模式

模式一:单源站多边缘
  • 1个源站接收推流

  • 多个边缘服务器从源站拉流并服务客户端

模式二:多源站集群
  • 多个源站通过集群协作

  • 使用 coworkers 配置源站间通信

4. 负载均衡配置

可以使用以下方式实现负载均衡:

  • DNS 轮询

  • Nginx/HAProxy 反向代理
    Nginx 配置示例

    # RTMP 负载均衡
    rtmp {
        server {
            listen 1935;
            
            application live {
                live on;
                
                # 边缘服务器列表
                push rtmp://edge1:1935/live;
                push rtmp://edge2:1935/live;
                push rtmp://edge3:1935/live;
            }
        }
    }
    
    # HTTP-FLV 负载均衡
    http {
        upstream srs_edges {
            server edge1:8080;
            server edge2:8080;
            server edge3:8080;
        }
        
        server {
            listen 80;
            
            location / {
                proxy_pass http://srs_edges;
            }
        }
    }

    HAProxy 配置示例

    frontend rtmp_lb
        bind *:1935
        mode tcp
        default_backend srs_edges_rtmp
    
    backend srs_edges_rtmp
        mode tcp
        balance roundrobin
        server edge1 edge1:1935 check
        server edge2 edge2:1935 check
        server edge3 edge3:1935 check
    
    frontend http_flv_lb
        bind *:80
        mode http
        default_backend srs_edges_http
    
    backend srs_edges_http
        mode http
        balance leastconn
        server edge1 edge1:8080 check
        server edge2 edge2:8080 check
        server edge3 edge3:8080 check
  • CDN 网络集成

5. 启动命令

bash

# 启动源站
./objs/srs -c conf/origin.conf

# 启动边缘
./objs/srs -c conf/edge.conf

监控与维护

  1. 使用 SRS 的 HTTP API 监控服务器状态:

    curl http://localhost:1985/api/v1/summaries
  2. 配置 Prometheus + Grafana 进行可视化监控

  3. 日志分析:定期检查 SRS 日志文件中的错误和警告

性能优化建议

  1. 根据服务器配置调整 max_connections

  2. 对于高并发场景,考虑启用 TCP REUSE 端口

  3. 合理配置 HLS 切片大小和窗口大小

  4. 对于 WebRTC,优化 ICE 候选地址配置

常见问题解决

  • 边缘无法连接源站:检查防火墙和网络连通性

  • 延迟过高:调整协议配置,考虑使用低延迟模式

  • 内存泄漏:定期重启服务或升级到最新版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byxdaz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值