lvs是在linux操作系统基础上建立虚拟服务器,实现服务节点之间的负载均衡。它是基于linux内核实现的。2.6.X内核默认集成了lvs模块。
lvs常用负载均衡的实现是基于ip协议的,所以一般称为ipvs。ipvs有三种实现方式,最常用、性能最好的是Direct routing(简称DR)。
Ubuntu9.10已经用了2.6的内核,所以不需要再编译内核了,为了检测一下,可以在命令行执行:modprobe -l | grep ipvs
会出现:
kernel/net/netfilter/ipvs/ip_vs.ko
kernel/net/netfilter/ipvs/ip_vs_rr.ko
kernel/net/netfilter/ipvs/ip_vs_wrr.ko
kernel/net/netfilter/ipvs/ip_vs_lc.ko
kernel/net/netfilter/ipvs/ip_vs_wlc.ko
kernel/net/netfilter/ipvs/ip_vs_lblc.ko
kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
kernel/net/netfilter/ipvs/ip_vs_dh.ko
kernel/net/netfilter/ipvs/ip_vs_sh.ko
kernel/net/netfilter/ipvs/ip_vs_sed.ko
kernel/net/netfilter/ipvs/ip_vs_nq.ko
kernel/net/netfilter/ipvs/ip_vs_ftp.ko
说明内核已经集成了ipvs模块
我的机器三台机器分别是10.45.8.5,10.45.8.108,10.45.8.111。虚拟IP为10.45.8.200其中10.45.8.108作为负载均衡器使用,首先需要安装ipvsadm。
执行:apt-get install ipvsadm
安装完成后执行:ipvsadm
会看到提示:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
说明已经安装成功。
接下来就是配置lvs,其实很简单,就是在负载均衡器建一个虚拟ip,然后用ipvsadm建立转发规则
配置虚拟IP:
ifconfig eth0:0 10.45.8.200 netmask 255.255.255.0 broadcast 10.45.8.200
echo "1">/proc/sys/net/ipv4/ip_forward (此指令暂没发现有啥用处)
使用ipvsadm安装LVS服务:
ipvsadm -A -t 10.45.8.200:http -s rr
增加真实服务器:
ipvsadm -a -t 10.45.8.200:http -r 10.45.8.111 -g -w 1
ipvsadm -a -t 10.45.8.200:http -r 10.45.8.5 -g -w 1
真实服务器的配置:
ifconfig lo:0 10.45.8.200 netmask 255.255.255.255 broadcast 10.45.8.200
route add -host 10.45.8.200 dev lo:0 (此指令暂没发现有啥用处)
echo "1">/proc/sys/net/ipv4/ip_forward (此指令暂没发现有啥用处)
我自己还尝试成功的指令:
LBServer:
ifconfig eth0:0 10.45.8.200 netmask 255.255.252.0 broadcast 10.45.8.200
真实服务器:
ifconfig eth0:0 10.45.8.200 netmask 255.255.252.0 broadcast 10.45.8.200
我只需要建立一个eth0:0就可以了。。。。。。与实际不同的在于子网掩码的第三段(255 vs 252)
在负载均衡服务器用ipvsadm --list查看:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP test1-1149.local:www rr
-> test3-63.local:www Route 1 0 0
-> test2-64.local:www Route 1 0 0
接着是做ARP Hidden,不同的linux系统指令有所区别,Ubuntu系统的指令为:
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
只需要在真实服务器安装个apache或者tomcat,把默认页面修改一下方便区别是哪台服务器即可。用浏览器先访问真实服务器的IP,如果浏览器正常显示对应的默认页面说明web服务正常。
这时就可以访问虚拟IP(10.45.8.200)咯,然后不停地刷新,会发现lvs已经成功的将请求转发了。当然,我发现IE在半分钟内刷新的话基本是仍然连接到之前的服务器,建议是开几个IE窗口,然后挨个刷新就可以看到变化呢。
最后可以在负载均衡服务器上用ipvsadm --list查看:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP test1-1149.local:www rr
-> test3-86.local:www Route 1 0 5
-> test2-87.local:www Route 1 1 4
确实大功告成。不过如果机器重启的话,这些配置就没了,需要重新设置哦,另外还有个ipvsadm -C的指令是用于清除ipvsadm配置的,可能会有用处。