http://blog.chinaunix.net/uid-7411781-id-3436142.html

一个公网地址部署LVS/DR模式

 
网上看了很多关于LVS的文章,在选取2种模式LVS/DR和LVS/NAT,看到很多人的观点都认为DR模型中必须要使用多个公网地址,既DIP,VIP,RIP必须在同一网段内
 
刚开始我的想法也是如此,所知道的唯一的解决方案就是在LVS集群之前再加一台路由器,用路由器做静态NAT转换,后端的LVS集群则使用DR 模式。不过这样一来就比较耗成本,要有一台路由器专门负责NAT的转换工作,而且压力都转交给了前端的路由器,而且在性能,速度上相对于单纯的DR模式并 没有提升。  www.2cto.com  
 
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
 
在此,我在章文嵩博士的肯定回答下参考了上面的介绍,总结了一下在真实场景中常见网络架构中的场景  www.2cto.com  
 
这种拓扑是比较常见类型,先分析下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-- > 客户
   www.2cto.com  
拓扑是千变万化的,具体按照实际场景来实施
 
接下来是具体的实现方法,以下实验由虚拟机完成,先给个拓扑
这里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地址的配置
  www.2cto.com  

 
查看下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做标示  www.2cto.com  
[root@ww1 ~]# service httpd start #启动http服务
至此realserver1配置完成,realserver2也同样按照此配置,地址改下,网页文件不同就行
 
查看下IP地址的配置

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

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

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

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

 
这个包是本地主机发往director的包,具体每台虚拟机和主机的mac地址可以看前文中查看IP地址的显示结果  www.2cto.com  
 
这个包是director发到realserver上的,源IP和目的IP都没变,director只改变了目的mac地址

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

一个公网地址部署LVS/DR模式的更多相关文章

  1. Linux centosVMware Linux集群架构LVS DR模式搭建、keepalived + LVS

    一.LVS DR模式搭建 三台机器 分发器,也叫调度器(简写为dir) davery :1.101 rs1 davery01:1.106 rs2 davery02:11.107 vip 133.200 ...

  2. LVS DR模式 负载均衡服务搭建

    LVS 负载均衡 最近在研究服务器负载均衡,阅读了网上的一些资料,发现主要的软件负载均衡方案有nginx(针对HTTP服务的负载均衡),LVS(针对IP层,MAC层的负载均衡).LVS模式工作在网络层 ...

  3. LVS DR模式搭建 keepalived lvs

    LVS DR模式搭建• 三台机器 • 分发器,也叫调度器(简写为dir)172.16.161.130 • rs1 172.16.161.131 • rs2 172.16.161.132 • vip 1 ...

  4. CentOS下LVS DR模式负载均衡配置详解

    一安装LVS准备: 1.准备4台Centos 6.2 x86_64 注:本实验关闭 SELinux和IPtables防火墙. 管理IP地址 角色 备注 192.168.1.101 LVS主调度器(Ma ...

  5. lvs dr 模式请求过程

    一. lvs dr 模式请求过程 1.整个请求过程如下: client在发起请求之前,会发一个arp广播的包,在网络中找"谁是vip",由于所有的服务器,lvs和rs都有vip,为 ...

  6. LVS DR模式搭建、keepalived+lvs

    1.LVS DR模式搭建 条件: 即三台机器,在同一内网. 编辑脚本文件:/usr/local/sbin/lvs_dr.sh #! /bin/bashecho 1 > /proc/sys/net ...

  7. lvs之 lvs+nginx+tomcat_1、tomcat_2+redis(lvs dr 模式)

    前提:已经安装好 lvs+nginx+tomcat_1.tomcat_2+redis环境 ,可参考 (略有改动,比如tomcat_1.tomcat_2安装在两台机器上,而不是单机多实例 ,自行稍稍变动 ...

  8. Keepalived+LVS DR模式高可用架构实践

    Keepalived最初是为LVS设计,专门监控各服务器节点的状态(LVS不带健康检查功能,所以使用keepalived进行健康检查),后来加入了VRRP(虚拟路由热备协议(Virtual Route ...

  9. LVS DR模式实验

    LVS DR模式实验 三台虚拟机,两个台节点机(Apache),一台DR实验调度机 一:关闭相关安全机制 systemctl stop firewalld iptables -F setenforce ...

随机推荐

  1. 《Python 学习手册4th》 第十五章 文档

    ''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...

  2. 从python run 和python unittest两种eclipse运行方式深入理解if __name__ == "__main__"

    在写一个简单的python测试程序的时候,发现eclipse中Run as "Python run 和 Python unittest”结果不一样?为什么会不一样? 先贴一下代码段: # - ...

  3. RockMongo安装使用笔记

    下载nginx最新版本下载PHP,5.X版本即可,非线程安全的的,因为nginx用的是fastcgi下载rockmongo最新版本下载php_mongo组件 在rockmongo里的readme里有下 ...

  4. fork之后发生了什么(基于3.16-rc4)

    在linux c编程中,我们可以使用fork,vfork,clone三个系统调用来创建子进程.下面我们先分析下fork系统调用的实现原理.代码如下(kernel/fork.c): #ifdef __A ...

  5. mysql repair data 语句

    1. 这条语句主要是用来修复一个表中的数据 , 在另一个统计表中没有统计时,进行修改统计表的操作 update expert_count ec inner join ( select sum(e.EF ...

  6. centos6.4 挂载ntfs分区

    默认情况下,CentOS 6.4不支持Widows NTFS硬盘分区读写,要想把NTFS格式的磁盘挂载到CentOS 6.3下面需要安装第三方的插件ntfs-3g,这里我们采用编译安装插件. 1.安装 ...

  7. 5个让人激动的Java项目

    每个Java/JVM领域的技术专家都应从那些项目中获益,他们中有2011在SanJose举办的Jax 会议中提名为最好的技术产品奖的.我之所以选择它们,是因为它们可以广泛用于一系列的项目中,解决真实问 ...

  8. 第二百八十四天 how can I 坚持

    又是一个周一.今天感觉过得好艰辛啊,幸好晚上程秀通过生日请客,吃了顿大餐,还拿回了一瓶酒.哈哈. 其他也没什么了.晚上玩的挺好.不过,回来,老是渴,一直想喝水,现在是又困,又累啊,睡觉了.

  9. Cocos2d-x 对于中文的支持-----iconv库

    Cocos2d-x 对于中文的支持-----iconv库 转自:http://momowing.diandian.com/post/2013-01-16/40047183777 Jetion: 我们在 ...

  10. HDU 4893 Wow! Such Sequence! (线段树)

    Wow! Such Sequence! 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4893 Description Recently, Doge ...