天天看点

Lvs之NAT、DR、TUN三种模式的应用配置案例

本文系统Centos6.0

1、NAT模式;

NAT模型:地址转换类型,主要是做地址转换,类似于iptables的DNAT类型,它通过多目标地址转换,来实现负载均衡;

特点和要求:

1、LVS(Director)上面需要双网卡:DIP(内网)和VIP(外网)

2、内网的Real Server主机的IP必须和DIP在同一个网络中,并且要求其网关都需要指向DIP的地址

3、RIP都是私有IP地址,仅用于各个节点之间的通信

4、Director位于client和Real Server之间,负载处理所有的进站、出站的通信

5、支持端口映射

6、通常应用在较大规模的应用场景中,但Director易成为整个架构的瓶颈!

相关机器信息;

(Director Server)  LB1   eth0:192.168.244.132 (Vip)  (公网)

                                         eth1:192.168.27.128  (Dip)     (内网)

rs1                 rs1    eth0:192.168.27.130  (Rip) (内网)getway:192.168.27.128

rs2                 rs2    eth0:192.168.27.131  (Rip) (内网)getway:192.168.27.128

1

2

3

4

5

6

7

8

<code>[root@rs1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0</code>

<code>DEVICE=</code><code>"eth0"</code>

<code>BOOTPROTO=</code><code>static</code>

<code>IPADDR=</code><code>192.168</code><code>.</code><code>27.130</code>

<code>NETMASK=</code><code>255.255</code><code>.</code><code>255.0</code>

<code>GATEWAY=</code><code>192.168</code><code>.</code><code>27.128</code>

<code>NM_CONTROLLED=</code><code>"yes"</code>

<code>ONBOOT="yes</code>

拓扑如下:

<a target="_blank" href="http://blog.51cto.com/attachment/201306/222141352.jpg"></a>

首先在rs1、rs2部署httpd,并且进行测试是否OK!

9

10

<code>[root@rs1 ~]# yum install httpd -y</code>

<code>[root@rs1 ~]# echo web1 &gt; /</code><code>var</code><code>/www/html/index.html</code>

<code>[root@rs1 ~]# service httpd start</code>

<code>[root@rs2 ~]# yum install httpd -y</code>

<code>[root@rs2 ~]# echo web2 &gt; /</code><code>var</code><code>/www/html/index.html</code>

<code>[root@rs2 ~]# service httpd start</code>

<code>[root@rs1 ~]# curl http:</code><code>//127.0.0.1</code>

<code>web1</code>

<code>[root@rs1 ~]# curl http:</code><code>//192.168.27.131</code>

<code>web2</code>

现在在LB上操作;

确定本机ip_vs模块是否加载,也就是是否支持lvs,2.4.2后都支持了;然后安装ipvsadm 用户操作命令

<code>[root@LB1 ~]# grep -i </code><code>'ip_vs'</code> <code>/boot/config-</code><code>2.6</code><code>.</code><code>32</code><code>-</code><code>71</code><code>.el6.i686</code>

<a target="_blank" href="http://blog.51cto.com/attachment/201306/161831414.jpg"></a>

ipvsadm安装:

<code>[root@LB1 ~]# yum install ipvsadm -y</code>

<code>echo </code><code>1</code> <code>&gt; /proc/sys/net/ipv4/ip_forward</code>

<code>ipvsadm -A -t </code><code>192.168</code><code>.</code><code>244.132</code><code>:</code><code>80</code> <code>-s rr</code>

<code>ipvsadm -a -t </code><code>192.168</code><code>.</code><code>244.132</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>27.131</code> <code>-m</code>

<code>ipvsadm -a -t </code><code>192.168</code><code>.</code><code>244.132</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>27.130</code> <code>-m</code>

测试页面

<a target="_blank" href="http://blog.51cto.com/attachment/201306/173006742.jpg"></a>

页面轮询交替出现;说明机器轮询提供服务;

如果使用加权轮询的话;比如rs1提供2次,rs2提供1次,这样来提供服务;

<code>[root@LB1 html]# ipvsadm -E -t </code><code>192.168</code><code>.</code><code>244.132</code><code>:</code><code>80</code> <code>-s wrr</code>

<code>[root@LB1 html]# ipvsadm -e -t </code><code>192.168</code><code>.</code><code>244.132</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>27.130</code> <code>-m -w </code><code>2</code>

<code>[root@LB1 html]# ipvsadm -e -t </code><code>192.168</code><code>.</code><code>244.132</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>27.131</code> <code>-m -w </code><code>1</code>

现在来测试:

<a target="_blank" href="http://blog.51cto.com/attachment/201306/173425301.jpg"></a>

2、DR模式:

特点和要求

1、各个集群节点必须和Director在同一个物理网络中

2、RIP地址不能为私有地址,可以实现便捷的远程管理和监控

3、Director仅仅负责处理入站请求,响应报文则由Real Server直接发往客户端

4、集群节点Real Server 的网关一定不能指向DIP,而是指向外部路由

5、Director不支持端口映射

6、Director能够支持比NAT多很多的Real Server 

原理:

DR模型:直接路由模型,每个Real Server上都有两个IP:VIP和RIP,但是VIP是隐藏的,就是不能提高解析等功能,只是用来做请求回复的源IP的,Director上只需要一个网卡,然后利用别名来配置两个IP:VIP和DIP

      Director在接受到外部主机的请求的时候转发给Real Server的时候并不更改目标地址,只是通过arp解析的MAC地址进行封装然后转给Real Server,Real Server在接受到信息以后拆除MAC帧封装,然后直接回复给CIP。

<a target="_blank" href="http://blog.51cto.com/attachment/201306/223227903.jpg"></a>

LB1: eth0: 192.168.182.133

    vip(eth0:0): 192.168.182.200

RS1: eth0:192.168.182.130

     lo:0(vip)  :192.168.182.200

RS2: eth0:192.168.182.129

     lo:0(vip)  192.168.182.200

通信原理:

    每个Real Server上都有两个IP:VIP和RIP,但是VIP是隐藏的,就是不能提高解析等功能,只是用来做请求回复的源IP的,Director上只需要一个网卡,然后利用别名来配置两个IP:VIP和DIP

    Director在接受到外部主机的请求的时候转发给Real Server的时候并不更改目标地址,只是通过arp解析的MAC地址进行封装然后转给Real Server,Real Server在接受到信息以后拆除MAC帧封装,然后直接回复给CIP。

   而此时需要关闭RS上的基于VIP的arp解析,在linux内核2.4以后,内核中都内置了这种功能,通过一些设置可以关闭其arp的功能:

      arp_ignore:定义接收到ARP请求时的响应级别      

          0:默认,只用本地配置的有响应地址都给予响应       

          1:仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应(仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)       

      arp_announce:定义将自己的地址向外通告时的级别       

          0:默认,表示使用配置在任何接口的任何地址向外通告       

          1:试图仅向目标网络通告与其网络匹配的地址       

          2:仅向与本地接口上地址匹配的网络进行通告       

       Ps:要想让其功能生效,必须先设置相关设置,然后在配置IP地址等信息

1、开始在RS1操作:

<code>[root@rs1 ~]# echo </code><code>2</code> <code>&gt; /proc/sys/net/ipv4/conf/all/arp_announce</code>

<code>[root@rs1 ~]# echo </code><code>2</code> <code>&gt; /proc/sys/net/ipv4/conf/eth0/arp_announce</code>

<code>[root@rs1 ~]# echo </code><code>1</code> <code>&gt; /proc/sys/net/ipv4/conf/all/arp_ignore</code>

<code>[root@rs1 ~]# echo </code><code>1</code> <code>&gt; /proc/sys/net/ipv4/conf/eth0/arp_ignore</code>

<code>[root@rs1 ~]# service network restart</code>

<code>[root@rs1 ~]# ifconfig lo:</code><code>0</code> <code>192.168</code><code>.</code><code>182.200</code> <code>netmask </code><code>255.255</code><code>.</code><code>255.255</code> <code>broadcast </code><code>182.168</code><code>.</code><code>182.200</code>

<code>[root@rs1 ~]# route add -host </code><code>192.168</code><code>.</code><code>182.200</code> <code>dev lo:</code><code>0</code>

上面的就是定义了arp响应的级别;还有就是vip的请求数据,从rs1的本地ip进行了回复;

2、在RS2上执行上面同样的操作

3、在LB上操作:

配置eth0网卡ip;

<code>[root@LB1 ~]# ifconfig eth0:</code><code>0</code> <code>192.168</code><code>.</code><code>182.200</code><code>/</code><code>24</code>  <code>#在eth0:</code><code>0</code><code>配置vip</code>

验证RS的web服务

<a target="_blank" href="http://blog.51cto.com/attachment/201306/231709681.jpg"></a>

下面开始着手配置ipvs

<code>[root@LB1 ~]# ipvsadm -A -t </code><code>192.168</code><code>.</code><code>182.200</code><code>:</code><code>80</code> <code>-s rr</code>

<code>[root@LB1 ~]# ipvsadm -a -t </code><code>192.168</code><code>.</code><code>182.200</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>182.130</code> <code>-g</code>

<code>[root@LB1 ~]# ipvsadm -a -t </code><code>192.168</code><code>.</code><code>182.200</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>182.129</code> <code>-g</code>

<a target="_blank" href="http://blog.51cto.com/attachment/201306/232212426.jpg"></a>

测试效果;

<a target="_blank" href="http://blog.51cto.com/attachment/201306/232328328.jpg"></a>

3、TUN模式;

其实数据转发原理和上图是一样的,不过这个我个人认为主要是位于不同位置(不同机房);LB是通过隧道进行了信息传输,虽然增加了负载,可是因为地理位置不同的优势,还是可以参考的一种方案;

优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。

不足:但是,这种方式需要所有的服务器支持"IP Tunneling"(IP Encapsulation)协议;

LB1: eth0: 192.168.182.132

    vip(tunl0): 192.168.182.200

RS1: eth0:192.168.27.130

     tunl0(vip)  :192.168.182.200

RS2: eth0:192.168.138.131

     tunl0(vip) :192.168.182.200

LB1操作:

<code>yum install ipvsadm -y</code>

<code>ifconfig tunl0192.</code><code>168.182</code><code>.</code><code>200</code> <code>broadcast </code><code>192.168</code><code>.</code><code>182.200</code> <code>netmask </code><code>255.255</code><code>.</code><code>255.0</code> <code>up</code>

<code>route add -host $VIP dev tunl0</code>

<code>ipvsadm -A -t </code><code>192.168</code><code>.</code><code>182.200</code><code>:</code><code>80</code> <code>-s rr</code>

<code>ipvsadm -a -t </code><code>192.168</code><code>.</code><code>182.200</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>27.130</code> <code>-i</code>

<code>ipvsadm -a -t </code><code>192.168</code><code>.</code><code>182.200</code><code>:</code><code>80</code> <code>-r </code><code>192.168</code><code>.</code><code>138.131</code> <code>-i</code>

RS1操作:

<code>ifconfig tunl0 </code><code>192.168</code><code>.</code><code>182.200</code> <code>netmask </code><code>255.255</code><code>.</code><code>255.0</code> <code>broadcast </code><code>192.168</code><code>.</code><code>182.200</code> <code>up</code>

<code>route add -host </code><code>192.168</code><code>.</code><code>182.200</code> <code>dev tunl0</code>

<code> </code><code>echo </code><code>"1"</code> <code>&gt;/proc/sys/net/ipv4/conf/tunl0/arp_ignore</code>

<code> </code><code>echo </code><code>"2"</code> <code>&gt;/proc/sys/net/ipv4/conf/tunl0/arp_announce</code>

<code> </code><code>echo </code><code>"1"</code> <code>&gt;/proc/sys/net/ipv4/conf/all/arp_ignore</code>

<code> </code><code>echo </code><code>"2"</code> <code>&gt;/proc/sys/net/ipv4/conf/all/arp_announce</code>

RS2同上:

访问vip进行测试即可;

本文转自 西索oO 51CTO博客,原文链接:http://blog.51cto.com/lansgg/1229421

继续阅读