千家信息网

lvs+srs(dr模型)

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,参考:https://my.oschina.net/fengjihu/blog/416883 (srs集群模式)http://blog.csdn.net/reblue520/article/detai
千家信息网最后更新 2026年11月02日lvs+srs(dr模型)

参考:

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

http://blog.csdn.net/reblue520/article/details/50857078 (lvs负载均衡)

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推流到多个流服务器以缓解服务器压力,利用边缘服务器的功能可以访问到所有流,又可以节约带宽,因为是直播,所以推过来的流都是不同ip的,所以可以利用lvs hash ip的功能将同一流的包转发到同一流服务器,这样就解决了流的存放问题。

lvs dr模式原理简介:

在dr模式下,director、real server和vip都在同一网段中,这就带来了几个问题:

1.在此模式下,vip接收到的请求不能简单地通过转发给real server,因为当请求过来的时候,如果简单地转发,因为三台都能连外网,所以转发的时候real server会直接回复给请求方,而请求方收到ip,发现不是自己请求的会丢弃。

所以,每个real server上面都绑定了vip,当收到vip来的请求包的时候,real server 用vip作为源地址回复。


2.我们解决了1的问题,但是这又带来了新的问题:director和real server都有vip,而且在同一网段中,所以vip请求到来的时候,网关会广播请求,所以不管是director还是realserver他们都会收到请求,假设我们director先收到了,它是怎么进行负载均衡调度的呢?

利用ip是不行的,如果用realserver的真实ip,那么就会回到1的问题上去,所以只能用vip作为目的ip。事实上,dr模式下,lvs是根据mac地址来进行负载均衡调度的,因为每台的mac地址都不同,所以只有对应mac的rs(realserver简写,懒得打)会收到请求,并且因为自己确实有vip,所以能响应请求。


3.那么,我们又怎么确保director第一个收到呢?在同一网段中,每台服务器都会收到vip请求广播包,我们怎么保证rs既能响应这些请求又不首先响应?这就要用到arp_ignore和arp_announce或者hidden interface的功能。

在dr模式下,rs的配置是有些特殊的。比较常见的一种是把vip绑定到lo口上,因为大多数linux内核版本不会响应回环口ip的arp报文请求,所以当收到vip广播请求报文的时候,rs不会响应。因为director是把vip绑定到某个非回环口上的,所以director可以第一个收到并响应vip请求报文。 另一种常见的做法是,rs把vip绑定到某个不在使用中的接口上,然后利用hidden interface的功能禁掉此接口的arp响应,因为没有arp响应,所以这个端口必须不使用,否则影响正常通信。

我们的案例使用的是第三种常见的方法:设置arp_ignore 为1,这个参数的作用是只回答目标IP地址是来访网络接口本地地址的ARP查询请求

举个例子,假设本机上两个网口,eth0上绑定的ip为1.1.1.1,eth2上绑定的是2.2.2.2,那么设置arp_ignore为1后,当eth0收到2.2.2.2的arp请求报文后不会响应,同理eth2收到1.1.1.1的arp请求报文不会响应(eth0:0子网卡不确定可不可以,待测试)

然后,设置arp_announce为2,这个的作用是使用出口网口的mac作为源mac。

举个例子,假设本机有eth0:1.1.1.1,eth2:2.2.2.2 ,假设本机收到了1.1.1.1的请求包,却从eth2口发送包,那么数据帧的源mac应该是写eth0的mac还是eth2的mac? 正常情况下是写eth2的,但是linux比较特殊,默认是写eth0的,设为2,是让它默认写eth2的。

为什么这里需要用到呢?因为vip包是director第一个响应的,所以网关的arp表保留的是director的mac,假设rs,eth0配的真实ip,eth2配的vip,那么,当收到director改写mac的vip请求包后,它响应并从eth0回送包(我们不应该让eth2接受到包,否则又回到2),如果此时填的是eth2,也就是vip所在的mac,那么网关发现这个是vip的新mac就会更新arp表,从而造成vip抢占(这个是别人的说法,我不太认同,因为就算用eth0的mac也会被更新,一样抢占,待我找到靠谱的答案再更新此问题)


架构:

director ip:192.168.2.119(lvs调度器服务器ip)

virtual ip:192.168.2.111(调度用的虚拟ip)

real1 ip:192.168.2.127(srs源端服务器ip1)

real2 ip:192.168.2.138(srs源端服务器ip2)

srs ip:192.168.2.221 (此为srs边缘服务器ip)

为了实验方便,默认都关闭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 内容如下:


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 内容如下:

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 #加这条是为了保证本机响应包的源ip为vip不变

real2:

配置和real1一样,略

srs 边缘服务器的配置:

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; (经测试,当192.168.2.138和192.168.2.127存在不同流的时候,

} 用这种配置边缘服务器可以访问两台服务器上的所有流)

service srs restart

direct 的配置:

vi /etc/sysctl.conf

net.ipv4.ip_forward = 1 (lvs转发包,所以这个要为1,开启转发功能)

sysctl -p

yum install ipvsadm -y (lvs是通过ipvsadm这个软件包管理的,就类似于netfiter和iptables的关系)

cd /etc/sysconfig/network-scripts/

cp ifcfg-eth0 ifcfg-eth0:0

vi ifcfg-eth0:0 内容如下:

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 (添加服务,-s指定调度算法,sh是source_hash的意思,根据来源ip调度到同一台服务器)

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

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

ipvsadm -Ln (这个命令可以查看ipvs当前的状态)

推流测试:

/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 查看确认视频可正常播放


服务 服务器 模式 时候 问题 调度 功能 地址 报文 配置 边缘 本机 不同 均衡 内容 常见 接口 网关 网段 广播 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网高科技 互联网品科技 互联网与科技金融数据 金融科技创新监管互联网金融 金融科技和互联网金融 上海电发互联网科技有限公司 受益于互联网科技的高速发展 华夏恒生科技与互联网科技 四川慕妮娅互联网科技有限公司 互联网金融科技名词解释 元气玛特互联网科技公司是外包吗 皮皮虾互联网科技有限公司 产业互联网科技服务公司 互联网硬科技公司 全球科技与互联网公司市值变化 米泉互联网科技专业怎么样 北京军民互联网科技公司 互联网科技创新创业项目 恒生科技互联网指数十大成分股 小牛互联网科技有限公司地址 天津市摩尔互联网科技 伟宏互联网科技 互联网科技的 广州互联网络科技有限公司 互联网金融科技平台 洛阳昕诺飞互联网科技有限公司 半导体行业属于互联网高科技类吗 互联网硬科技公司 萌小萌互联网科技河南有限公司 北京瑞云互联网科技有限公司
0