真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

lvs+srs(dr模型)

參考:

我們提供的服務(wù)有:成都網(wǎng)站制作、網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、羅湖ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的羅湖網(wǎng)站制作公司

https://my.oschina.net/fengjihu/blog/416883 (srs集群模式)

http://blog.csdn.net/reblue520/article/details/50857078 (lvs負(fù)載均衡

http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html (arp_ignore和arp_announce)

http://www.linuxvirtualserver.org/docs/arp.html (lvs arp問題)

http://www.linuxvirtualserver.org/VS-DRouting.html (lvs dr模式)

目的:

通過lvs推流到多個(gè)流服務(wù)器以緩解服務(wù)器壓力,利用邊緣服務(wù)器的功能可以訪問到所有流,又可以節(jié)約帶寬,因?yàn)槭侵辈?,所以推過來的流都是不同ip的,所以可以利用lvs hash ip的功能將同一流的包轉(zhuǎn)發(fā)到同一流服務(wù)器,這樣就解決了流的存放問題。

lvs dr模式原理簡介:

lvs+srs(dr模型)

    在dr模式下,director、real server和vip都在同一網(wǎng)段中,這就帶來了幾個(gè)問題:

1.在此模式下,vip接收到的請(qǐng)求不能簡單地通過轉(zhuǎn)發(fā)給real server,因?yàn)楫?dāng)請(qǐng)求過來的時(shí)候,如果簡單地轉(zhuǎn)發(fā),因?yàn)槿_(tái)都能連外網(wǎng),所以轉(zhuǎn)發(fā)的時(shí)候real server會(huì)直接回復(fù)給請(qǐng)求方,而請(qǐng)求方收到ip,發(fā)現(xiàn)不是自己請(qǐng)求的會(huì)丟棄。

    所以,每個(gè)real server上面都綁定了vip,當(dāng)收到vip來的請(qǐng)求包的時(shí)候,real server 用vip作為源地址回復(fù)。

2.我們解決了1的問題,但是這又帶來了新的問題:director和real server都有vip,而且在同一網(wǎng)段中,所以vip請(qǐng)求到來的時(shí)候,網(wǎng)關(guān)會(huì)廣播請(qǐng)求,所以不管是director還是realserver他們都會(huì)收到請(qǐng)求,假設(shè)我們director先收到了,它是怎么進(jìn)行負(fù)載均衡調(diào)度的呢?

    利用ip是不行的,如果用realserver的真實(shí)ip,那么就會(huì)回到1的問題上去,所以只能用vip作為目的ip。事實(shí)上,dr模式下,lvs是根據(jù)mac地址來進(jìn)行負(fù)載均衡調(diào)度的,因?yàn)槊颗_(tái)的mac地址都不同,所以只有對(duì)應(yīng)mac的rs(realserver簡寫,懶得打)會(huì)收到請(qǐng)求,并且因?yàn)樽约捍_實(shí)有vip,所以能響應(yīng)請(qǐng)求。 

3.那么,我們又怎么確保director第一個(gè)收到呢?在同一網(wǎng)段中,每臺(tái)服務(wù)器都會(huì)收到vip請(qǐng)求廣播包,我們怎么保證rs既能響應(yīng)這些請(qǐng)求又不首先響應(yīng)?這就要用到arp_ignore和arp_announce或者h(yuǎn)idden interface的功能。

    在dr模式下,rs的配置是有些特殊的。比較常見的一種是把vip綁定到lo口上,因?yàn)榇蠖鄶?shù)linux內(nèi)核版本不會(huì)響應(yīng)回環(huán)口ip的arp報(bào)文請(qǐng)求,所以當(dāng)收到vip廣播請(qǐng)求報(bào)文的時(shí)候,rs不會(huì)響應(yīng)。因?yàn)閐irector是把vip綁定到某個(gè)非回環(huán)口上的,所以director可以第一個(gè)收到并響應(yīng)vip請(qǐng)求報(bào)文。 另一種常見的做法是,rs把vip綁定到某個(gè)不在使用中的接口上,然后利用hidden interface的功能禁掉此接口的arp響應(yīng),因?yàn)闆]有arp響應(yīng),所以這個(gè)端口必須不使用,否則影響正常通信。 

         我們的案例使用的是第三種常見的方法:設(shè)置arp_ignore 為1,這個(gè)參數(shù)的作用是只回答目標(biāo)IP地址是來訪網(wǎng)絡(luò)接口本地地址的ARP查詢請(qǐng)求

            舉個(gè)例子,假設(shè)本機(jī)上兩個(gè)網(wǎng)口,eth0上綁定的ip為1.1.1.1,eth2上綁定的是2.2.2.2,那么設(shè)置arp_ignore為1后,當(dāng)eth0收到2.2.2.2的arp請(qǐng)求報(bào)文后不會(huì)響應(yīng),同理eth2收到1.1.1.1的arp請(qǐng)求報(bào)文不會(huì)響應(yīng)(eth0:0子網(wǎng)卡不確定可不可以,待測試)

 然后,設(shè)置arp_announce為2,這個(gè)的作用是使用出口網(wǎng)口的mac作為源mac。

    舉個(gè)例子,假設(shè)本機(jī)有eth0:1.1.1.1,eth2:2.2.2.2 ,假設(shè)本機(jī)收到了1.1.1.1的請(qǐng)求包,卻從eth2口發(fā)送包,那么數(shù)據(jù)幀的源mac應(yīng)該是寫eth0的mac還是eth2的mac?  正常情況下是寫eth2的,但是linux比較特殊,默認(rèn)是寫eth0的,設(shè)為2,是讓它默認(rèn)寫eth2的。      

         為什么這里需要用到呢?因?yàn)関ip包是director第一個(gè)響應(yīng)的,所以網(wǎng)關(guān)的arp表保留的是director的mac,假設(shè)rs,eth0配的真實(shí)ip,eth2配的vip,那么,當(dāng)收到director改寫mac的vip請(qǐng)求包后,它響應(yīng)并從eth0回送包(我們不應(yīng)該讓eth2接受到包,否則又回到2),如果此時(shí)填的是eth2,也就是vip所在的mac,那么網(wǎng)關(guān)發(fā)現(xiàn)這個(gè)是vip的新mac就會(huì)更新arp表,從而造成vip搶占(這個(gè)是別人的說法,我不太認(rèn)同,因?yàn)榫退阌胑th0的mac也會(huì)被更新,一樣搶占,待我找到靠譜的答案再更新此問題)

架構(gòu):

director ip:192.168.2.119(lvs調(diào)度器服務(wù)器ip)

virtual  ip:192.168.2.111(調(diào)度用的虛擬ip)

real1    ip:192.168.2.127(srs源端服務(wù)器ip1)

real2    ip:192.168.2.138(srs源端服務(wù)器ip2)

srs ip:192.168.2.221 (此為srs邊緣服務(wù)器ip)

為了實(shí)驗(yàn)方便,默認(rèn)都關(guān)閉iptables和selinux

real1:

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

    echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

cd  /etc/sysconfig/network-scripts/

cp ifcfg-lo  ifcfg-lo:0

vi ifcfg-lo:0 內(nèi)容如下:

            DEVICE=lo:0

            IPADDR=192.168.2.111

            NETMASK=255.255.255.255

            BROADCAST=192.168.2.111

            BROADCAST=127.255.255.255

            ONBOOT=yes

            NAME=loopback

service network  restart

vi  /usr/local/srs/conf/edge.conf 內(nèi)容如下:

            listen              1935;

            max_connections     1000;

            pid                 objs/edge.pid;

            srs_log_file        ./objs/edge.log;

            vhost __defaultVhost__ {

            }

service srs restart  

route add -host 192.168.2.111 dev lo:0  #加這條是為了保證本機(jī)響應(yīng)包的源ip為vip不變

real2:

配置和real1一樣,略

srs 邊緣服務(wù)器的配置:

vi  /usr/local/srs/conf/edge.conf 

            listen              1935;

            max_connections     1000;

            pid                 objs/edge.pid;

            srs_log_file        ./objs/edge.log;

            vhost __defaultVhost__ {

                mode            remote;

                origin          192.168.2.138:1935  192.168.2.127:1935;  (經(jīng)測試,當(dāng)192.168.2.138和192.168.2.127存在不同流的時(shí)候,

            }                                 用這種配置邊緣服務(wù)器可以訪問兩臺(tái)服務(wù)器上的所有流)              

        service srs restart

direct 的配置:

vi  /etc/sysctl.conf

net.ipv4.ip_forward = 1 (lvs轉(zhuǎn)發(fā)包,所以這個(gè)要為1,開啟轉(zhuǎn)發(fā)功能)

sysctl -p

yum install ipvsadm  -y (lvs是通過ipvsadm這個(gè)軟件包管理的,就類似于netfiter和iptables的關(guān)系)

cd  /etc/sysconfig/network-scripts/

cp ifcfg-eth0  ifcfg-eth0:0

vi ifcfg-eth0:0 內(nèi)容如下:

            DEVICE=eth0:0

            BOOTPROTO=static

            HWADDR=00:0C:29:5B:58:99

            ONBOOT=yes

            IPADDR=192.168.2.111

            GATEWAY=192.168.2.1

            NETMASK=255.255.255.0

service network  restart

route add 192.168.2.111 dev eth0:0

ipvsadm  -A -t 192.168.2.111:1935 -s sh (添加服務(wù),-s指定調(diào)度算法,sh是source_hash的意思,根據(jù)來源ip調(diào)度到同一臺(tái)服務(wù)器)

ipvsadm  -a  -t 192.168.2.111:1935 -r 192.168.2.138:1935 -m  (添加后端服務(wù)器)

ipvsadm  -a  -t 192.168.2.111:1935 -r 192.168.2.127:1935 -m

ipvsadm -Ln (這個(gè)命令可以查看ipvs當(dāng)前的狀態(tài))

推流測試:

/usr/local/src/srs/trunk/objs/ffmpeg/bin/ffmpeg  -re -i test.flv -vcodec copy -acodec copy -f flv -y rtmp://192.168.2.111/live/livestream1

/usr/local/src/srs/trunk/objs/ffmpeg/bin/ffmpeg  -re -i test2.flv -vcodec copy -acodec copy -f flv -y rtmp://192.168.2.111/live/livestream2

通過rtmp://192.168.2.221/live/livestream1和rtmp://192.168.2.221/live/livestream2 查看確認(rèn)視頻可正常播放


文章標(biāo)題:lvs+srs(dr模型)
文章網(wǎng)址:http://weahome.cn/article/pjhcis.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部