设为首页 收藏本站
查看: 703|回复: 0

[经验分享] lvs+srs(dr模型)

[复制链接]

尚未签到

发表于 2019-1-3 09:51:55 | 显示全部楼层 |阅读模式
  参考:
  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,eth1上绑定的是2.2.2.2,那么设置arp_ignore为1后,当eth0收到2.2.2.2的arp请求报文后不会响应,同理eth1收到1.1.1.1的arp请求报文不会响应(eth0:0子网卡不确定可不可以,待测试)
   然后,设置arp_announce为2,这个的作用是使用出口网口的mac作为源mac。
      举个例子,假设本机有eth0:1.1.1.1,eth1:2.2.2.2 ,假设本机收到了1.1.1.1的请求包,却从eth1口发送包,那么数据帧的源mac应该是写eth0的mac还是eth1的mac?  正常情况下是写eth1的,但是linux比较特殊,默认是写eth0的,设为2,是让它默认写eth1的。      
           为什么这里需要用到呢?因为vip包是director第一个响应的,所以网关的arp表保留的是director的mac,假设rs,eth0配的真实ip,eth1配的vip,那么,当收到director改写mac的vip请求包后,它响应并从eth0回送包(我们不应该让eth1接受到包,否则又回到2),如果此时填的是eth1,也就是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 查看确认视频可正常播放
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-658864-1-1.html 上篇帖子: lvs详细介绍 下篇帖子: LVS详解(实施级)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表