1 简要说明
本文档主要目的是在Redhat6.5Linux上测试LVS实现Apache的负载均衡测试。系统配置信息如下:
| RealServer1 | RealServer2 | Director |
IP | 192.168.2.101 | 192.168.2.102 | 192.168.2.101 |
机器名 | lvs1 | lvs2 | lvs3 |
VIP(lvs-vip) | 192.168.2.100 | 192.168.2.100 | 192.168.2.100 |
操作系统 | RHEL 6.5 (Santiago) | RHEL 6.5 (Santiago) | RHEL 6.5 (Santiago) |
2 软件安装
三台机器都需要安装ipvsadm包,RealServer需要安装arptables包。安装arptables的包的目的是通过arptables可以改变RealServer对vip的网络包的处理策略。
另外,需要提前准备好三个节点的hosts文件:
[root@lvs1 heartbeat-3.0.4]#cat /etc/hosts
127.0.0.1 localhost
192.168.2.101 lvs1
192.168.2.102 lvs2
192.168.2.103 lvs3
192.168.2.100 lvs-vip
由于ipvsadm在RHEL6.5的安装包中自带,建议配置一个本地的yum源,我的配置文件如下:
[root@lvs1 soft]# cat/etc/yum.repos.d/local.repo
[Server]
name=Server
baseurl=file:///mnt/Server
enabled=1
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=file:///mnt/HighAvailability
enabled=1
gpgcheck=0
[LoadBalancer]
name=LoadBalancer
baseurl=file:///mnt/LoadBalancer
enabled=1
gpgcheck=0
这些准备工作都做好了,就是软件的安装,在三个节点上安装ipvsadm包,安装命令如下:
[root@lvs1 ~]# yum installipvsadm -y
Loaded plugins: product-id,refresh-packagekit, security, subscription-manager
This system is not registeredto Red Hat Subscription Management. You can use subscription-manager toregister.
Setting up Install Process
Resolving Dependencies
--> Running transactioncheck
---> Package ipvsadm.x86_640:1.26-2.el6 will be installed
--> Finished DependencyResolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
ipvsadm x86_64 1.26-2.el6 LoadBalancer 41 k
Transaction Summary
================================================================================
Install 1 Package(s)
Total download size: 41 k
Installed size: 78 k
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : ipvsadm-1.26-2.el6.x86_64 1/1
Verifying : ipvsadm-1.26-2.el6.x86_64 1/1
Installed:
ipvsadm.x86_64 0:1.26-2.el6
Complete!
[root@lvs1 ~]#
另外两个节点输出类似,安装完成后,ipvsadm命令就可用。执行ipvsadm-l测试,输出如下:
[root@lvs1 ~]# ipvsadm -l
IP Virtual Server version 1.2.1(size=4096)
Prot LocalAddress:PortScheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
由上可知,当前没有任何的调度策略。
3 添加vip
在三个节点添加vip(以lvs3为例):
ifconfig eth0:0 192.168.2.100netmask 255.255.255.0 up
ifconfig -a
[root@lvs3 ~]# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:0C:29:8C:6E:DD
inet addr:192.168.2.103 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr:fe80::20c:29ff:fe8c:6edd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8148 errors:0 dropped:0overruns:0 frame:0
TX packets:184 errors:0 dropped:0overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1690078 (1.6 MiB) TX bytes:19593 (19.1 KiB)
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:8C:6E:DD
inet addr:192.168.2.100 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8 errors:0 dropped:0overruns:0 frame:0
TX packets:8 errors:0 dropped:0overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:584 (584.0 b) TX bytes:584 (584.0 b)
pan0 Link encap:Ethernet HWaddr 4A:1C:A2:F0:98:ED
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0frame:0
TX packets:0 errors:0 dropped:0overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
4 RealServer安装arptables
现在Director和RealServer的节点都能够识别VIP(192.168.2.100),接下来我们要在提供服务的节点(RealServer)上添加策略,要安装一个额外的软件arptables,该软件在RHEL6.5的系统盘中自带,安装命令如下(以lvs1为例,lvs2输出类似):
[root@lvs1 ~]# yum installarptable* -y
......
--> Running transactioncheck
---> Packagearptables_jf.x86_64 0:0.0.8-23.el6 will be installed
--> Finished DependencyResolution
......
Installing :arptables_jf-0.0.8-23.el6.x86_64 1/1
Verifying : arptables_jf-0.0.8-23.el6.x86_64 1/1
Installed:
arptables_jf.x86_64 0:0.0.8-23.el6
Complete!
[root@lvs1 ~]#
5 网络策略配置
5.1 Director配置
添加vip的httpd服务的端口,并且采用了轮叫的算法(RR:RoundRobin),命令如下:
[root@lvs3 ~]# ipvsadm -A -t192.168.2.100:80 -s rr
[root@lvs3 ~]# ipvsadm -l
IP Virtual Server version 1.2.1(size=4096)
Prot LocalAddress:PortScheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP lvs-vip:http rr
接着允许lvs1和lvs2的httpd服务作为轮叫的节点.
[root@lvs3 ~]# ipvsadm -a -t192.168.2.100:80 -r 192.168.2.101:80 -g
[root@lvs3 ~]# ipvsadm -a -t192.168.2.100:80 -r 192.168.2.102:80 -g
[root@lvs3 ~]# ipvsadm -l
IP Virtual Server version 1.2.1(size=4096)
Prot LocalAddress:PortScheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP lvs-vip:http rr
-> lvs1:http Route 1 0 0
-> lvs2:http Route 1 0 0
[root@lvs3 ~]#
5.2 RealServer配置
RealServer配置的目的是添加策略,把直接进来访问192.168.2.100的包全部丢弃,让从192.168.2.100出去的包从192.168.2.101(lvs1)和192.168.2.102(lvs2)出去。
#lvs1
[root@lvs1 ~]# arptables -A IN-d 192.168.2.100 -j DROP
[root@lvs1 ~]# arptables -A OUT-s 192.168.2.100 -j mangle --mangle-ip-s 192.168.2.101
[root@lvs1 ~]#/etc/init.d/arptables_jf save
Saving current rules to/etc/sysconfig/arptables: [ OK ]
#lvs2
[root@lvs2 ~]# arptables -A IN-d 192.168.2.100 -j DROP
[root@lvs2 ~]# arptables -A OUT-s 192.168.2.100 -j mangle --mangle-ip-s 192.168.2.102
[root@lvs2 ~]#/etc/init.d/arptables_jf save
Saving current rules to/etc/sysconfig/arptables: [ OK ]
[root@lvs2 ~]#
6 测试
6.1 启动apache
为了测试分别为lvs1和lvs2写了一个index.html页面,将对应的文件放到/var/www/html目录下。对应内容如下:
[root@lvs1 /]# cat/var/www/html/index.html
<html>
<head>lvs1</head>
<body>
welcome from lvs1 by cdshrewd
</body>
</html>
[root@lvs2 /]# cat/var/www/html/index.html
<html>
<head>lvs2</head>
<body>
welcome from lvs2 by cdshrewd
</body>
</html>
测试步骤:
1. 启动apache
启动两个节点的servicehttpd start
2. 访问测试
打开浏览器访问:http://192.168.2.100/index.html
刷新页面http://192.168.2.100/index.html
多次刷新,可以看到轮流显示lvs1和lvs2的页面,说明轮询方式的负载均衡器测试正常。
3. 查看后台数据
[root@lvs3 ~]# ipvsadm -l
IP Virtual Server version 1.2.1(size=4096)
Prot LocalAddress:PortScheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP lvs-vip:http rr
-> lvs1:http Route 1 0 18
-> lvs2:http Route 1 0 19
[root@lvs3 ~]# date
Tue Nov 15 21:00:36 CST 2016
[root@lvs3 ~]# ipvsadm -l
IP Virtual Server version 1.2.1(size=4096)
Prot LocalAddress:PortScheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP lvs-vip:http rr
-> lvs1:http Route 1 0 33
-> lvs2:http Route 1 0 33
[root@lvs3 ~]#
从后台的统计数据,可以看到负载均衡器的负载很均衡。至此,LVS和apache的负载均衡测试结束。