LVS的全称Linux vitual system,是由目前阿里巴巴的著名工程师章文嵩博士开发的一款开源软件。LVS工作在一台server上提供Directory(负载均衡器)的功能,本身并不提供服务,只是把特定的请求转发给对应的realserver(真正提供服务的主机),从而实现集群环境中的负载均衡。
LVS的核心组件ipvs工作在kernel中,是真正的用于实现根据定义的集群转发规则把客户端的请求转发到特定的realserver。而另一个组件ipvsadm是工作在用户空间的一个让用户定义ipvs规则的工具。故我们只要在server上装了ipvsadm软件包就可以定义ipvs规则,而在linux kernel的2.6版本之后kernel是直接支持ipvs的。
注:由于ipvs是接受netfilter五个钩子函数的中的local_in函数控制的。故ipvs不能和netfilter的一些控制规则同时使用。
实验环境:redhat enterprise 5.4+ipvsadm+httpd(用于提供web服务)
这些为LVS环境搭建中的一些专业名词:
RIP:realserver的ip地址
DIP:director的ip地址
CIP:用户客户端的ip地址
VIP:虚拟ip地址(这个ip地址是用户请求的提供服务的ip地址)
一,LVS-NAT
工作原理图:
工作原理:基于NAT机制实现。当用户请求到达director之后,director将请求报文的目标地址(即VIP)改成选定的realserver地址,同时将报文的目标端口也改成选定的realserver的相应端口,最后将报文请求发送到指定的realserver。在服务器端得到数据后,realserver将数据返给director,而director将报文的源地址和源端口改成VIP和相应端口,然后把数据发送给用户,完成整个负载调度过程。
特点:
1,所有的realserver和director要在同一个网段内
2,VIP生产环境为公网ip,而DIP用于和rs通信
3,director同时处理请求和应答数据包
4,realserver的网关要指向DIP
5,可以实现端口映射
6,realserver可以是任意操作系统
7,director很可能成为系统性能瓶颈
实验拓扑:
Director这台server为双网卡eth0用于客户端的请求,而eth1用于和realserver通信。
客户端通过请求172.16.30.1提供web服务。请根据拓扑配置好网络。
以上是参照,下面是真是环境:
Director这台server为双网卡eth0用于客户端的请求,而eth1用于和realserver通信。
客户端通过请求10.7.35.53提供web服务。请根据拓扑配置好网络。
DIP:192.168.191.132(Directory eth1)
外网IP:10.7.35.53 (Directory eth0)
RIP:192.168.191.129
RIP:192.168.191.130
笔记:安装三台虚拟机,网络适配器的设置为NAT(DR模式下 网络适配器为桥模式)。
1:RealServer的配置
模式为:网络适配器为NAT
realserver的网关要指向DIP
第一种办法:
setup 设置RealServer 的网关为DIP
然后 ifdown eth0
ifup eth0
或者第二种办法:
修改 /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR= 192.168.191.130
NETMASK= 255.255.255.0
vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=esb
GATEWAY=192.168.191.132
然后重启网络
/etc/init.d/network restart
或者service network restart
安装httpd 2.2.20
安装步骤
1.解压出httpd-2.2.20文件夹
tar -zxvf httpd-2.2.20.tar.gz
cd /httpd-2.2.16
2.设置参数及路径
./configure --prefix=/usr/local/apache #
(像以上这样设置编译后apache在modules文件夹将没有一个DSO模块动态加载!使用./configure --help查看帮助!
如下设置:
admin@ubuntu:~httpd-2.2.16$ ./configure --prefix=/home/administrator/program/apache2 --enable-mods-shared=most
enable-mods-shared=most表示加载大多数的模块(动态)
注:使用--enable-mods-shared会自动编译--enable-so)
3.编译
make && make install
4.安装成功后,配置
vi /home/admin/apache/conf/httpd.conf
5.修改文件的所有者和所有组
httpd-2.2.16$ cd /usr/local/apache
把htdocs文件夹所有者设为nobody 群组设为root
sudo chown -R nobody:root htdocs
6.启动apache
/bin/apachectl -k start
可以修改htdos中的index.html
例如:
如果显示不成功 可运行iptables -F
2:Director配置
NAT模式的eth1 为DIP
另外添加桥模式的eth0 10.7.35.53
ipvsadm 的安装:
安装ipvsadm-1.24
1, wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
2,创建一个连接文件:ln -sv /usr/src/kernels/2.6.18-92.el5-i686/ /usr/src/linux
3,解压:tar zxvf ipvsadm-1.24.tar.gz
4,安装:cd ipvsadm-1.24; make; 然后 make install
5,执行ipvsadm,检验ipvsadm 是否被正确安装
打开本机的路由转发功能:
先查看路由转发是否打开:
# cat /proc/sys/net/ipv4/ip_forward
如果显示值为1,则打开,可以跳过此步骤。如果值为0,则开启此功能。
开启路由转发:
# sysctl -w net.ipv4.ip_forward=1 (临时生效)
或者
echo "1">/proc/sys/net/ipv4/ip_forward
可以修改配置文件使其永久生效:
# vim /etc/sysctl.conf
修改net.ipv4.ip_forward = 0此行为net.ipv4.ip_forward = 1即可
使用ipvsadm对ipvs进行配置,由于ipvs的十种算法中,wlc算法是最优算法,也是默认算法,但是我们配置为wrr:
# ipvsadm -A -t 10.7.35.53:80 -s wrr
# ipvsadm -a -t 10.7.35.53:80 -r 192.168.191.129 –m –w 1
# ipvsadm -a -t 10.7.35.53:80 -r 192.168.191.130 –m –w 1
查看配置是否生效:
# ipvsadm -Ln
为了方便起见 写个脚本vip.sh:
#!/bin/bash
#LVS script NAT
DIP=10.7.35.53
RIP1=192.168.191.130
RIP2=192.168.191.129
case "$1" in
start)
echo "1">/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ipvsadm -A -t $DIP:80-s wlc
/sbin/ipvsadm -a -t $DIP:80 -r $RIP1 –m –w 3
/sbin/ipvsadm -a -t $DIP:80 -r $RIP2 –m –w 1
/sbin/ipvsadm -L
touch /var/lock/subsys/ipvsadm >/dev/null 2>&1
echo "ipvsadm started"
;;
stop)
echo "0" >/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ipvsadm -Z
rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1
echo "ipvsadm stoped"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped"
exit 1
else
echo "ipvsadm OK"
fi
;;
*)
echo "Usage:$0{start|stop|status}"
exit 1
esac
exit 0
修改权限 chmod 777 vip.sh
运行:./vip.sh start
ok,我们的LSV-NAT配置好了,下面我们来对其进行测试:
我们可以多刷新页面获取效果或换个浏览器。
为了更好的演示效果,我们可以用另一台server对httpd服务进行压力测试:
# ab -c 100 -n 10000 http://172.16.30.1/index.html (ab工具是apache自带压力测试工具)
在director上查看请求响应结果:
由于我们使用的是wrr算法,且权重比为1:1,故活动连接数的比几乎也为1:1。使用不同的调度算法,显示的结果是不一样的。
参照 http://leejia.blog.51cto.com/4356849/834223