LVS-NAT
是通过改变数据包中的目的IP地址,来实现调度的。
说明:
Director是调度服务、Real N为真实服务器(这里用四台)。实验用vmware虚拟机和小凡模拟器来完成,为了保证物理上确实是隔离开关的,需要不同的vmnet网卡相连。
l Client与路由器之间用vmnet1连接;
l 路由器与Director之间用vmnet3连接;
l Director的eth1与Real N用vmnet5
所有服务器均为:Centos 5.5 _i386 内核版本为2.6.18-194.el5
步骤:
一、Install software:
1.安装内核源代码(因为安装ipvsadm时需要)
mount /dev/cdrom /media
cd /media/Centos
rpm -ivh kernel-devel-2.6.18-194.el5.i686.rpm
需要给源代码做个软连接,不然一会编译ipvsadm时会报错
ln -s /usr/src/2.6.kernel-devel-2.6.18-194.el5.i686 /usr/src/linux
2.安装ipvsadm
到http://www.linuxvirtualserver.org/software/index.html,下载对应的ipvsadm
我下载的是:ipvsadm-1.24.tar.gz
tar -zxfv ipvsadm-1.24.tar.gz
cd ipvsadm-1.24.tar.gz
make all && make install
安装完成后运行一下ipvsadm命令,然后执行lsmod | grep ip_vs命令,若能显示如下,说明内核已经支持:
二、配置各主机的IP
主机 | IP | 网关 |
Client | 192.168.1.100 | f0/0 |
Route | f0/0:192.168.1.1---vm1 f1/0:192.168.2.1---vm2 | |
Director | eth0:192.168.2.2(VIP)---vm2 eth1:192.168.3.1(DIP)---vm5 | f1/0 |
Real server 1 | eth0:192.168.3.10 | 192.168.3.1(DIP) |
Real server 2 | eth0:192.168.3.20 | 192.168.3.1(DIP) |
Real server 3 | eth0:192.168.3.30 | 192.168.3.1(DIP) |
Real server 4 | eth0:192.168.3.40 | 192.168.3.1(DIP) |
Real server N | eth0:192.168.3.N | 192.168.3.1(DIP) |
由于是用NAT方式做负载均衡,所以Real server N 都要指向Director作为网关。
三、配置Real server N的主页服务
给每台Real server 服务器安装apache,并在每台服务器的/var/www/html/下建立index.html文件,为了看出效果,最好每台服务器上的index.html文件不一样,例如在Real server 1 上的index.html内容如下:
其他几台Real server 服务器的index.html内容,只需要把上面的红色框的部分对应更改一下即可,然后开启httpd服务.
四、配置Director
在Director上面也建立个apache服务,写个与真实服务器不一样的index.html,例如:
建立这个index.html的目的是为验证集群效果。当没有配置集群时,看到的是Director上的index.html,如果配置了集群,再访问VIP,就能看到其他Real server服务器上的index.html.
1.开启路由转发:
vi /etc/sysctl
sysctl -p
此步非常重要!!!
2.增加虚拟服务
ipvsadm -A -t 192.168.2.2:80 -s rr
增加一个指向192.168.2.2:80 的tcp虚拟服务,用轮叫(rr)算法
3.增加真实服务器
ipvsadm -a -t 192.168.2.2:80 -r 192.168.3.10 -m
ipvsadm -a -t 192.168.2.2:80 -r 192.168.3.20 -m
ipvsadm -a -t 192.168.2.2:80 -r 192.168.3.30 -m
ipvsadm -a -t 192.168.2.2:80 -r 192.168.3.40 -m
以NAT的方式,增加指向各真实服务器.
五、测试
在Client上用浏览器打开http://192.168.2.2地址,这时能看到真实服务的主页内容。反复按F5刷新,能看到不同的真实服务器的内容。说明集群已经建立成功。
我们也可以到Director服务器上,通过执行ipvsadm -L -n 来查看调度的状态,如下:
六、wrr算法的应用
上面用的是轮叫(rr)算法,每个Real server被调用的机会是均等的,假设Real server1和Real server2的处理性能远比Real server3和Real server4都强,用rr算法就不是很合理了。因为rr算法不会考虑权重(Weight),也就是优先级,所以需要换成wrr(加权轮叫)算法,此算法会考虑管理员设置的权重,权重高的Real server,会被优先选中,而被选中的频率也会多一些。
由于是接着上面的实验继续研究,所以可以有2种方法:①删除以前的内容重新开始 ②替换以前的内容。如果要删除,可以用ipvsadm -C 来清除所有配置,再按上面的步骤2、3做就可以了。下面采用替换的方法:
1.改变算法:
2.改变Real server1和Real server2的权重高一些
权重值范围从0-65535之间,默认值为1,值越高,优先级就越高。如果值是0表示永远不被选中(在处理真是服务器故障和维护时很有用),如果只是65535表示永远只选中它。
改完后在Client 的浏览器里按F5刷新,在director上可以看到Real server1和Real server2被选中的频率是其他Real server的5倍.倍值可以根据你工作的环境来合理设置。
注意:
当用rr算法时,即使设置了权重值,也不会起作用。只有用到wrr算法时,权重值才会发挥作用。
可见ipvsadm -a 命令加入真实条目的先后顺序,并不能决定Real server 的优先级,而是靠权重来决定的。
七、lc和wlc算法的应用
Lc是最少链接算法,此算法会检查哪台Real server 的链接请求最少,就优先选择它。所以当你的服务器硬件配置相同时,lc是个不错的选择,(个人感觉如果链接的起始数量一样的时候,跟rr算法没有区别)wlc是加权最少链接算法,此算法跟lc类似,只是增加了权重的考虑条件。能让管理员在指定的Real server中,优先应用最少链接算法.跟rr与wrr之间的关系式一种感觉。我们来实验一下:
1.改变算法:
2.改变Real server1和Real server 2的权重高一些
改完后在Client 的浏览器里按F5刷新,在director上可以看到Real server1和Real server2被选中的频率是其他Real server的5倍.倍值可以根据你工作的环境来合理设置。(好像跟wrr的效果差不多-_-!)
注意:
Lvs默认的算法时wlc
当用lc算法时,即便设置了权重值,也不会起作用.只用用到wlc算法时,权重才会发挥作用。
NAT方式小结:
原理比较好理解,配置相对简单些
如果Real server 到20台以上时,Director将会是瓶颈