SRS4 WebRTC 集群docker安裝部署:


官網部署文檔:https://github.com/ossrs/srs/wiki/v4_CN_SampleOriginCluster

參考:https://blog.csdn.net/sundehui01/article/details/106234778

單台服務器做直播風險太高,可以利用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 https://gitee.com/ossrs/srs.git &&
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;
    }
}

 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:

推流分別測試

 rtmp://192.168.25.131:19350/live/test
 rtmp://192.168.25.131:19350/live/test
rtmp://192.168.25.131:19350/live/test


拉流:
http://192.168.25.131:8080/live/test.flv
    webrtc://192.168.25.131:/live/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 },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
#########################################

配置解釋:

    1. option mysql-check user haproxy | 用於心跳的mysql用戶,請在mysql集群數據庫進行創建該用戶haproxy,讀者可自己配置該用戶名。在此處我們按照約定俗成定為haproxy。
    2. server SRS_ORG_1 192.168.25.131:19350 check weight 1 maxconn 2000 中
      check(心跳檢測),weight 1(權重,只有當算法為static-rr才生效),maxconn 2000(最大連接數)

 參數可以參考:https://blog.csdn.net/inthat/article/details/88928749

使用Docker run啟動容器:

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推流到 rtmp://haproxy_server_ip:1935/live/test 試下推流是否正常,如果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 http://srs; 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/*; }

 

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 / 前面)。這樣配置后,訪問 http://nginx_server_ip/live/test.flv 理論上就能轉到后端的edge服務器。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM