使用lvs(linux virtual serevr)做负载均衡
负载均衡:指对系统中的负载情况进行动态调整,以尽量消除或减少系统中各节点负载不均衡的现象。从而提高系统的吞吐量。1
2调度器:srever1.example.com
Real server: server2.example.com	server3.example.com
调度器端的操作(server1)
安装软件
[root@server1 ha.d]# yum install ipvsadm -y
查看已经存在的规则:1
2
3
4[root@server1 ha.d]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
若有规则,则用下面的命令清除:[root@server1 ~]# ipvsadm -C
添加一个浮动的IP
| 1 | [root@server1 ~]# cd /etc/sysconfig/network-scripts/ | 

给ipvsadm添加规则
添加浮动IP和RS:1
2
3[root@server1 ~]# ipvsadm -A -t 172.25.9.100:80 -s rr			#浮动IP
[root@server1 ~]# ipvsadm -a -t 172.25.9.100:80 -r 172.25.9.2:80 -g	#给浮动IP添加real server
[root@server1 ~]# ipvsadm -a -t 172.25.9.100:80 -r 172.25.9.3:80 -g  #给浮动IP添加real server
查看规则:1
2
3
4
5
6
7
8[root@server1 ~]# ipvsadm -l
[root@server1 ~]# ipvsadm -ln				#只查看,不解析
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.9.100:80 rr
  -> 172.25.9.2:80                Route   1      0          0         
  -> 172.25.9.3:80                Route   1      0          0
保存规则:1
2[root@server1 ~]# /etc/init.d/ipvsadm save		#保存规则
[root@server1 ~]# /etc/init.d/ipvsadm restart	#重启服务
RS端的操作(server2和server3)
安装软件
| 1 | [root@server2 ~]# yum install arptables_jf -y | 
添加浮动IP
| 1 | [root@server2 network-scripts]# cat ifcfg-eth1:1 | 
添加ARP规则
| 1 | [root@server2 ~]# arptables -A IN -d 172.25.9.100 -j DROP | 
实验结果
我们用httpd服务做一下简单测试吧!
开启RS端的httpd服务
浏览器访问浮动IP,因为我们使用的调度规则是RR,轮叫机制,所以每在页面刷新一次,出来的就不同


【补充】:
另外一种做法,比第一种简单
调度端(server1)的操作
下载ipvsadm(同上)
加载rule
| 1 | [root@server1 ~]# ipvsadm -C #清空ipvs转发表 | 
保存rule
| 1 | [root@server1 ~]# service ipvsadm save | 
绑定vip
| 1 | ifconfig eth1:0 172.25.9.100 netmask 255.255.255.255 up | 
RS端(server2&server3)
| 1 | [root@server2 ~]# vi /etc/sysctl.conf | 
加入两行:1
2net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
| 1 | [root@server2 ~]# sysctl -p | 
测试
测试效果与第一种效果相同
也可以使用命令测试:1
2
3
4
5
6[root@foundation187 ~]# links -dump 172.25.9.100
   hello server2
[root@foundation187 ~]# links -dump 172.25.9.100
   hello server3
[root@foundation187 ~]# links -dump 172.25.9.100
   hello server2
进一步分析一下:
我的浏览器在物理机上,我看到arp解析到的是调度端server1的MAC地址1
2[root@foundation187 ~]# arp -an | grep 172.25.9.100
? (172.25.9.100) at 52:54:00:9a:d3:95 [ether] on br0