A-A+

LVS 的 NAT模式和DR模式介绍及搭建

2015年12月13日 站长资讯 暂无评论

LVS简介:LVS全称 Linux Vritual Server,linux虚拟服务器,主要用于多服务器的负载均衡,工作于网络层。LVS工作相似iptables,很多原理相通。

LVS调度方法:

  1. # grep -i 'VS'/boot/config-2.6.32-431.el6.x86_64 |grep -A 10 'IPVS scheduler'  
  2. # IPVS scheduler  
  3. CONFIG_IP_VS_RR=m  
  4. CONFIG_IP_VS_WRR=m  
  5. CONFIG_IP_VS_LC=m  
  6. CONFIG_IP_VS_WLC=m  
  7. CONFIG_IP_VS_LBLC=m  
  8. CONFIG_IP_VS_LBLCR=m  
  9. CONFIG_IP_VS_DH=m  
  10. CONFIG_IP_VS_SH=m  
  11. CONFIG_IP_VS_SED=m  
  12. CONFIG_IP_VS_NQ=m  

静态方法:仅根据调度算法本身进行调度

rr: 轮流 轮询 轮叫。

wrr:加权轮询。

sh: 源地址hash,表示来源于同一个CIP的请求始终被定向至同一个RS。SESSION保持。

dh: 目标地址hash。

动态方法:根据算法及各RS当前的负载情况进行调度

lc: 最小连接。

wlc:加权最小连接 。

sed: 最短期望延迟,一个请求进来,性能最好的响应。

nq: 永不排队连接,轮询一圈后,性能最好的开始响应。

lblc:基于本地的最少连接。

lblcr: 带复制的lblc

接下来在LVS主机安装ipvsadm

# yum install ipvsadm -y

ipvsadm 命令参数:

ipvsadm -A|E-t|u|f service-address [-s scheduler]

-A:在内核虚拟服务器表中添加一个虚拟服务器记录。添加一个新的虚拟IP地址。

-E:编辑内核虚拟服务器的参数。

-D:删除内核虚拟表中的一条记录。

-C:清除虚拟服务表中的配置记录。

-S:保存配置好的内核虚拟表规则。

-a: 在内核虚拟服务器表中添加一个被转发的主机地址,也就是后端的服务器。

-e: 编辑一条虚拟服务表中记录中的真实服务器记录。

-t: tcp,指定转发的协议

-u: udp,同tcp。

-w: 权重。

-r: 指定后端节点ip地址。

NAT模型工作原理:

NAT模式是用户iptables做转发功能的,后来用于解决公网IP地址不足的一个方案。LVS的NAT工作过程对比iptables做了修改,就成了一种高并发负载方案。客户端通过http请求Virtual IP,服务器接收http请求转发给DIP所对应的一个Real Server IP地址,Real Server处理完成后响应客户端,这个时候如果直接使用Real ServerIP去响应客户端的话,客户端不会接收,因为客户端请求的是Virtual IP地址。这个时候,Real Server会把请求响应发给DIP,DIP和Vritual同处一个主机,封装VritualIP响应报文返回给客户端。

LVS主机端IP地址划分。

  1. # ifconfig eth0 |grep 'inet addr'  
  2. inetaddr:172.16.32.10 Bcast:172.16.255.255 Mask:255.255.0.0  
  3. # ifconfig eth1 |grep 'inet addr'  
  4. inetaddr:10.0.0.1  Bcast:10.255.255.255  Mask:255.0.0.0  

WEB主机1IP地址划分。

  1. # ifconfig eth0 |grep 'inet addr'  
  2. inetaddr:172.16.32.11 Bcast:172.16.255.255 Mask:255.255.0.0  
  3. # ifconfig eth1 |grep 'inet addr'  
  4. inetaddr:10.0.0.10  Bcast:10.255.255.255  Mask:255.0.0.0  

WEB主机2IP地址划分。

  1. # ifconfig eth0 |grep 'inet addr'  
  2. inet addr:172.16.32.12  Bcast:172.16.255.255  Mask:255.255.0.0  
  3. # ifconfig eth1 |grep 'inet addr'  
  4. inetaddr:10.0.0.11  Bcast:10.255.255.255  Mask:255.0.0.0  

测试的时候可以把WEB主机的eth0网卡down掉。这里是方便配置。

在LVS主机测试WEB节点是否可以正常访问。

  1. # curlhttp://10.0.0.10  
  2. <h1>Lvs Web1Node</h1>  
  3. # curl http://10.0.0.11  
  4. <h1>Lvs Web2Node</h1>  

开启内核转发功能

# echo 1 >/proc/sys/net/ipv4/ip_forward

设置LVS。

  1. # ipvsadm -A -t172.16.32.10:80 -s rr  
  2. # ipvsadm -a -t172.16.32.10:80 -r 10.0.0.10 -m  
  3. # ipvsadm -a -t172.16.32.10:80 -r 10.0.0.11 -m  
  4.    
  5. # ipvsadm -L -n  
  6. IP Virtual Serverversion 1.2.1 (size=4096)  
  7. ProtLocalAddress:Port Scheduler Flags  
  8.   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn  
  9. TCP  172.16.32.10:80 rr  
  10.   -> 10.0.0.10:80                 Masq    1     0          2           
  11.   -> 10.0.0.11:80                 Masq    1     0          3  

打开浏览器输入VIP地址。

好了,已经看到效果了。

DR模型工作原理:

DR和Real Server通用一个Virtual IP地址对外提供服务,LVS主机和后端WEB主机同一个网段。在同一个广播域内,进来的请求通过ARP广播方式请求响应,而这时通过配置只有DR响应,而Real server则对这个IP的ARP采取静默方式。DR根据调度算法找到Real server,把目的的MAC地址改为Real server的MAC地址,并发给Real server。Real server 接收处理后,等同于直接接到客户端请求,处理后直接由Real server 响应给客户端,而不在经由DR。

接下来构建DR模式。

arp_ignore: 如何响应接收ARP地址请求,默认0,1表示仅在请求的地址配置在请求报文的接口进行响应。

arp_announce: 如何通告本地地址,默认0,2表示仅通过网络直连的接口的地址。

LVS主机端

  1. # ifconfig eth0:0172.16.32.88/16 up  
  2. # ifconfig eth0:0  
  3. eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:E1:B1:1B    
  4.           inet addr:172.16.32.88  Bcast:172.16.255.255  Mask:255.255.0.0  
  5.           UP BROADCAST RUNNING MULTICAST  MTU:1500 Metric:1  

WEB节点1设置:

修改RS上的内核参数,将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址请求

  1. # echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore   
  2. # echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore   
  3. # echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce   
  4. # echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce  
  5. # ifconfig lo:0172.16.32.88/16 up  
  6. # ifconfig lo:0  
  7. lo:0      Link encap:Local Loopback    
  8.           inet addr:172.16.32.88  Mask:255.255.0.0  
  9.           UP LOOPBACK RUNNING  MTU:16436 Metric:1  
  10.    
  11. # ifconfig lo:0172.16.32.88 netmask 255.255.255.255 broadcast 172.16.32.88 up  
  12. # route add -host172.16.32.88 dev lo:0  

WEB节点2设置:http://www.xiaoxiongboke.com

  1. # echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore   
  2. # echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore   
  3. # echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce   
  4. # echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce  
  5. # ifconfig lo:0172.16.32.88/16 up  
  6. # ifconfig lo:0  
  7. lo:0      Link encap:Local Loopback    
  8.           inet addr:172.16.32.88  Mask:255.255.0.0  
  9.           UP LOOPBACK RUNNING  MTU:16436 Metric:1  
  10.    
  11. # ifconfig lo:0172.16.32.88 netmask 255.255.255.255 broadcast 172.16.32.88 up  
  12. # route add -host172.16.32.88 dev lo:0  

LVS主机设置。

  1. # ipvsadm -A -t172.16.32.88:80 -s rr  
  2. # ipvsadm -a -t172.16.32.88:80 -r 172.16.32.11 -g -w 1  
  3. # ipvsadm -a -t172.16.32.88:80 -r 172.16.32.12 -g -w 1  
  4. # ipvsadm -L -n  
  5. IP Virtual Serverversion 1.2.1 (size=4096)  
  6. ProtLocalAddress:Port Scheduler Flags  
  7.   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn  
  8. TCP  172.16.32.88:80 rr  
  9.   -> 172.16.32.11:80              Route   1     1          3           
  10.   -> 172.16.32.12:80              Route   1     0          4  

好了。至此,LV的NAT模式和DR模式就完成了搭建。

标签:

给我留言