--------------------------------------

一、前言

二、原理

三、环境

四、配置

 1.后端web服务器配置

 2.前端LVS服务器配置

五、测试

六、ipvsadm常用命令

--------------------------------------


一、前言  

   LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。

二、LVS-NAT原理

LVS--VS/NAT_第1张图片

三、环境

系统:CentOS6.4 32位

拓扑图

LVS--VS/NAT_第2张图片

四、配置

1.后端web服务器配置(生产环境中web页面应该是一样的,为了测试,显示才不一致。)

1.1.web1配置

# setenforce 0        //关闭SELinux及防火墙
# service iptables stop
# yum install httpd
# echo "This is web1" >/var/www/html/index.html
# service httpd start
# ping 192.168.4.1    //需通

1.2.web2配置

# setenforce 0        //关闭SELinux及防火墙
# service iptables stop
# yum install httpd
# echo "This is web2" >/var/www/html/index.html
# vim /etc/httpd/conf/httpd.conf
Listen 800            //将80端口改为800端口
# service httpd start
# ping 192.168.4.1    //需通

2.前端LVS服务器配置

2.1.使用轮询算法(rr)

# vim /etc/sysctl.conf
7 net.ipv4.ip_forward = 1       //开启路由转发功能
# route
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.4.0     *               255.255.255.0   U     1      0        0 eth3
192.168.2.0     *               255.255.255.0   U     1      0        0 eth1
default         192.168.2.254   0.0.0.0         UG    0      0        0 eth1
# yum install ipvsadm           //安装ipvs
# ipvsadm -A -t 192.168.2.10:80 -s rr                       //指定算法为轮训  
# ipvsadm -a -t 192.168.2.10:80 -r 192.168.4.100:80 -m      //NAT 模式
# ipvsadm -a -t 192.168.2.10:80 -r 192.168.4.200:800 -m
# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.10:80 rr
  -> 192.168.4.100:80             Masq    1      0          0
  -> 192.168.4.200:800            Masq    1      0          0

测试结果(基本1:1)

# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.10:80 rr
  -> 192.168.4.100:80             Masq    1      0          12
  -> 192.168.4.200:800            Masq    1      0          13

2.2.使用加权的轮询算法(wrr)

# ipvsadm -E -t 192.168.2.10:80 -s wrr     //加权轮询算法   
# ipvsadm -e -t 192.168.2.10:80 -r 192.168.4.200:800 -m -w 2  //权重设2
# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.10:80 wrr
  -> 192.168.4.100:80             Masq    1      0          0
  -> 192.168.4.200:800            Masq    2      0          0

测试结果(基本1:2)

# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.10:80 wrr
  -> 192.168.4.100:80             Masq    1      0          7
  -> 192.168.4.200:800            Masq    2      0          14

2.3.保存及应用

# service ipvsadm save           //保存
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [  OK  ]
# vim /etc/sysconfig/ipvsadm     //查看
  1 -A -t 192.168.2.10:80 -s wrr
  2 -a -t 192.168.2.10:80 -r 192.168.4.100:80 -m -w 1
  3 -a -t 192.168.2.10:80 -r 192.168.4.200:800 -m -w 2
# ipvsadm -C                     //临时清除
# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn                                                    
# service ipvsadm restart        //重新应用
ipvsadm: Clearing the current IPVS table:                  [  OK  ]
ipvsadm: Unloading modules:                                [  OK  ]
ipvsadm: Clearing the current IPVS table:                  [  OK  ]
ipvsadm: Applying IPVS configuration:                      [  OK  ]
# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.10:80 wrr
  -> 192.168.4.100:80             Masq    1      0          0
  -> 192.168.4.200:800            Masq    2      0          0

五、测试

客户机浏览器访问http://192.168.2.10即可。

六、ipvsadm常用命令  

-A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。

-E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。

-D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。

-C --clear 清除内核虚拟服务器表中的所有记录。

-R --restore 恢复虚拟服务器规则

-S --save 保存虚拟服务器规则,输出为-R 选项可读的格式

-a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器

-e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录

-d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录

-L|-l --list 显示内核虚拟服务器表

-Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)

-r --real-server server-address 真实的服务器[Real-Server:port]

-w --weight weight 真实服务器的权值

-m --masquerading 指定LVS 的工作模式为NAT模式

-g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)

-i --ipip 指定LVS 的工作模式为隧道模式

-t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务

[vip:port] or [real-server-ip:port]

-u --udp-service service-address 说明虚拟服务器提供的是udp 的服务

[vip:port] or [real-server-ip:port]

-f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。

-s --scheduler scheduler 使用的调度算法,有这样几个选项

rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq

默认的调度算法是: wlc

-n --numeric 输出IP 地址和端口的数字形式

-h --help 显示帮助信息