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

[经验分享] 一个公网地址部署LVS/DR模式

[复制链接]

尚未签到

发表于 2019-1-3 07:03:47 | 显示全部楼层 |阅读模式
  网上看了很多关于LVS的文章,在选取2种模式LVS/DR和LVS/NAT,看到很多人的观点都认为DR模型中必须要使用多个公网地址,既DIP,VIP,RIP必须在同一网段内
  刚开始我的想法也是如此,所知道的唯一的解决方案就是在LVS集群之前再加一台路由器,用路由器做静态NAT转换,后端的LVS集群则使用DR模式。不过这样一来就比较耗成本,要有一台路由器专门负责NAT的转换工作,而且压力都转交给了前端的路由器,而且在性能,速度上相对于单纯的DR模式并没有提升。
  DR模式的性能是绝对要比NAT要强很多的,一般NAT模式下,realserver不能超过10台,而DR模式中,上百台realserver也是木有问题的
  这两天也就一直纠结于能不能使用单纯的DR模式,并使用一个公网地址来实现(既VIP为公网地址,RIP和DIP使用私网内部的地址)。参考了一些文档
  其实章文嵩博士已经在官网上明确表示过配置DR模式,完全可以让VIP和DIP,RIP在不同网段的。参考http://zh.linuxvirtualserver.org/node/155
  而在此站点中也有关于DR模式使用不同网段的介绍 详见http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.LVS-DR.html
  在此,我在章文嵩博士的肯定回答下参考了上面的介绍,总结了一下在真实场景中常见网络架构中的场景
  下面的图有错误,VIP都是同一个地址200.0.0.10,在此纠正一下

  这种拓扑是比较常见类型,先分析下LVS的工作时数据包的是如何流转的
  1.客户发送源IP为1.1.1.1,目标IP为200.0.0.10的服务请求
  2.数据包经过中间的层层路由,翻山越岭到Director
  3.Director查询ipvsadm中定义的表项,根据算法选取一个realserver
  在这里,由于是DR模型,所以Director只改变了数据2层部分的目标mac地址,转发给私网IP的realserver
  4.Realserver收到数据包后,经过处理,封包转发给客户端
  关键的一步来了,realserver怎么将数据包回复给客户端?
  首先,在realserver上定义一条特殊路由,目标为VIP的数据包都从loopback口发出去,于是源地址还是为VIP,数据包的源和目的地址都没有变化。但是由于限制了arp的广播和应答方式,外界并不知道realserver上有VIP的存在,realserver也不知道VIP这个网段中的其它主机,所以数据包就卡在realserver这里了。解决方法就是,在realserver上添加一条默认路由,不知道的包都发往上私网地址的网关,于是路由器接收到数据包后就直接路由转发给客户了,在这个拓扑图中,路由器链接交换机的接口要有2个地址,一个是私网的网关地址,一个是公网的网关地址
  实现了单个公网IP地址的LVS/DR模式
  说了一大堆可能看的也晕乎,再来一幅常见的拓扑图

  在这幅图中,director直接从ISP拉一条专线(至于ISP和Director之间防火墙之类的东西暂做屏蔽)
  数据包是这样流转的
  客户-->互联网-- > Director-- > Realserver-- > Gateway-- > 客户
  拓扑是千变万化的,具体按照实际场景来实施
  接下来是具体的实现方法,以下实验由虚拟机完成,先给个拓扑
  这里192网段模拟公网,10网段模拟私网

  先介绍下实验环境:客户机是我的主机,Director和2台realserver都是虚拟机,他们之间用虚拟交换机VMnet8相连,其中客户既充当客户又充当网关,所以在VMnet8网卡上也配置了2个地址(为了避免混淆,实验最后会通过抓包来验证)
  director
  首先配置地址
  [root@localhost ~]# ifconfig eth0 10.0.0.10 netmask 255.255.255.0
  [root@localhost ~]# ifconfig eth0:1 192.168.92.100 netmask 255.255.255.0 up
  然后配置集群服务
  [root@localhost ~]# ipvsadm -A -t 192.168.92.100:80 -s rr #创建一个http的集群服务,使用轮询的算法
  [root@localhost ~]# ipvsadm -a -t 192.168.92.100:80 -r 10.0.0.1 –g #添加一个realserver,并使用DR模式。可以看到:提供服务的VIP和realserver的RIP并不在一个网段中
  [root@localhost ~]# ipvsadm -a -t 192.168.92.100:80 -r 10.0.0.2 –g #同样方法再添加一个realserver
  至此director配置完成
  查看下IP地址的配置

  查看下ipvsadm的配置

  看到这里是route模式,并在不同网段中
  realserver
  首先上来先限制arp的广播和应答
  [root@ww1 ~]# echo 2  >  /proc/sys/net/ipv4/conf/all/arp_announce
  [root@ww1 ~]# echo 2  >  /proc/sys/net/ipv4/conf/lo/arp_announce
  [root@ww1 ~]# echo 1  >  /proc/sys/net/ipv4/conf/all/arp_ignore
  [root@ww1 ~]# echo 1  >  /proc/sys/net/ipv4/conf/lo/arp_ignore
  然后配置地址
  [root@ww1 ~]# ifconfig eth0 10.0.0.1 netmask 255.255.255.0
  [root@ww1 ~]# ifconfig lo:1 192.168.92.100 netmask 255.255.255.255 broadcast 192.168.92.100 #配置VIP必须不让realserver对外广播
  接着配置路由
  [root@ww1 ~]# route add -host 192.168.92.100 dev lo:1 #请求是VIP的包,以lo:1接口出去,于是源地址还是为VIP,不会导致因为从eth0出去将源地址变为RIP
  [root@ww1 ~]# route add default gw 10.0.0.3  #添加默认路由,指向私网的网关,在此实验中是我的客户机
  然后启动web服务
  [root@ww1 ~]# echo "web1"  >  /var/www/html/index.html #创建网页文件,web1做标示。在realserver2中以web2做标示
  [root@ww1 ~]# service httpd start #启动http服务
  至此realserver1配置完成,realserver2也同样按照此配置,地址改下,网页文件不同就行
  查看下IP地址的配置

  这里再提供下第二台realserver的网卡信息,后面验证数据传送查看mac地址时要用到

  查看下路由表

  OK 配置都已经完成,在客户机上打开浏览器验证(浏览过程中用抓包工具抓取VMnet8网卡的数据)
  多次刷新,发现每次返回的内容是不一样的


  再到director上看下连接数,发现连接进来了

  然后抓包看看
  首先看下本地主机VMnet8的mac地址


  这个包是本地主机发往director的包,具体每台虚拟机和主机的mac地址可以看前文中查看IP地址的显示结果

  这个包是director发到realserver上的,源IP和目的IP都没变,director只改变了目的mac地址

  这个包是realserver传给本地客户的包(查看源和目标mac地址可以验证),源地址还是为VIP,目的地址为本机客户。
  通过抓包验证了数据的流向。
  一个公网IP实现LVS/DR是可行的,数据包最终到达客户时,在内部网络中走的是私网的网关,相当于在公司内部饶了一个圈而已,而相比较NAT模式而言,DR模式的效率是NAT所不能比较的,在实际部署LVS中,也应该尽量使用DR模式。




运维网声明 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.iyunv.com/thread-658761-1-1.html 上篇帖子: Linux下架构高可用性网络 下篇帖子: 集群理论和部分LVS
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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