工作在用户空间的代码:ipvsadm
工作在内核空间的代码:ipvs
查看一下ipvs
grep -i -C 5 ipvs /boot/config-2.6.18-l64.e.5
ipvsadm的工作原理类似于iptables
ipvsadm命令的使用:
1.定义集群服务
ipvsadm -t(tcp) |-u(udp) |-f(防火墙标记)
格式: ipvsadm -A|-E -t|-u VIP:port -s schedule_method
-A 添加
-E 修改
-s 指定调度算法
-D 删除
2.对于真正的服务
格式为: ipvsadm -a|-e -t|-u VIP:port -r Realserver_addr -g|-i|-m -w weight
-a 添加
-e 修改
-r 指定真正的服务器地址
-g|i|m 指定LVS类型 ,g表示为DR类型,i表示TUN类型,m表示NAT类型
-w 指定权重
删除一个realserver
ipvsadm -d -t|-u VIP:port -r REALSERVER_addr
3.查看,保存,恢复
-L|l 查看 -n 以数字的方式输出 ,--stats 统计数据
-C 清空规则
-S 保存规则到文件中
-R 恢复规则
保存ipvsadm规则也可以使用:service ipvsadm save
(1)LVS-NAT的实现
图1-1 LVS-NAT架构
准备工作
web1:10.0.11.12
web2:10.0.11.13
1. 分别在Director,web1上,web2上分别配置yum源
[base]
name=Instructor Server Repository
baseurl=ftp://192.168.0.254/pub/Server
gpgcheck=0
[Cluster]
name=Cluster
baseurl=ftp://192.168.0.254/pub/Cluster
gpgcheck=0
2. 在Director安装ipvsadm。
#yum install ipvsadm
在web1上安装apache。
#yum install httpd
配置网页文件:
#vim /var/www/html/index.html
This is the Realserver Web1
在web2上安装apache。
#yum install httpd
#vim /var/www/html/index.html
This is the Realserver Web2
3. 配置网络环境
设置ip地址:
(1)在Director上配置ip,并将第二块网卡类型设置为VMnet2:
#ifconfig eth0 192.168.0.151
#ifconfig eth1 10.0.11.11
(2) 在web1上配置ip,并将网卡类型设为VMnet2,并指定网关为10.0.11.11:
#ifconfig eth0 10.0.11.12
#route add default gw 10.0.11.11
#route -n
(3) 在web2上配置ip,并将网卡类型设为VMnet2,并指定网关为10.0.11.11:
#ifconfig eth0 10.0.11.13
#route add default gw 10.0.11.11
#route -n
--------------
你可以做一下测试,看一下Dip与两个Rip是否能ping通。
4.在Director上配置ipvsadm:
#ipvsadm -A -t 192.168.0.151:80 -s rr
#ipvsadm -a -t 192.168.0.151:80 -r 10.0.11.12 -m
#ipvsadm -a -t 192.168.0.151:80 -r 10.0.11.13 -m
5.在地址栏中输入192.168.0.151,然后不断刷新,看页面变化情况
你也可以在用一台虚拟机做测试,需要安装apache,安装完之后,使用ab名另对其测试:
ab -c 5 -n 10000
-c 表示线程数
-n 表示连接数
151后面的"/" 必须加上6.在做压力测试时,你可以在Director上查看负载均衡的情况
#watch -n 2 `ipvsadm -L -n`
7.你自己可以使用ipvsadm命令将算法进行改变,来查看效果,我就不再演示了。
--------------------------------------------------------------------------
(2) LVS-DR的实现:
原理我已经在集群的基础知识中介绍过了,这里不再啰嗦。
0(default) 无论你请求哪个端口,都响应
1 尽可能避免使用另外一个接口去响应
2 总是使用匹配到的去响应(最佳响应)
arp_ignore (接收到请求后,在那种情况下予以对响应)
0 (default)无论你请求哪个接口,都响应
1 请求的地址和ARP进来的接口的地址一致,才响应
LVS-DR的实现:
1.在director上进行配置:
注意:Dip要配置在接口上,Vip要配置在接口别名上
我在这里定义了一个变量,知识为了写起来方便
Vip=192.168.11.13
(1)配置Dip
#ifconfig eh0 192.168.11.10
(2)配置vip
# ifconfig eth0:0 $Vip broadcast $Vip
netmask 255.255.255.255 up
# route add -host $Vip dev eth0:0
# echo 1 > /proc/sys/net/ipv4/ip_forward
2.配置realserver
Rip要配置在接口上,Vip要配置在lo的别名上;
在web1上配置:
(1)定义内核参数,禁止响应对Vip的ARP广播请求;
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
(2)配置Rip,Vip
RIP:
#ifconfig eth0 192.168.11.11
VIP:
#ifconfig lo:0 $Vip broadcast $Vip netmask 255.255.255.255 up
#route add -host $Vip dev lo:0
在web2上配置:
(1)定义内核参数,禁止响应对Vip的ARP广播请求;
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
(2)配置Rip,Vip
RIP:
#ifconfig eth0 192.168.11.12
VIP:
#ifconfig lo:0 $Vip broadcast $Vip netmask 255.255.255.255 up
#route add -host $Vip dev lo:0
3.在director上:
定义集群服务
#ipvsadm -A -t 192.168.11.13:80 -s wlc
添加realserver
#ipvsadm -a -t 192.168.11.13:80 -r 192.168.11.11 -g -w 2
#ipvsadm -a -t 192.168.11.13:80 -r 192.168.11.12 -g -w 4
4.你可以使用ab做测试