lvs有三种模式:nat模式(LVS/NAT),直接路由模式( LVS/DR),ip隧道模式(LVS/TUN)
以及二度开发的第四种模式(FULL NAT)
1、DR直接路由模式
原理:负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域,也可以简单的理解为在同一台交换机上。
1、配置环境:
三台redhat6.5版本虚拟机(server1,server2,server3)
server1作为vs
server2和server3作为rs
server1(VS)
1、配置yum源1、因为6.5版本的yum源不能一次性全部加载,所以需要将镜像中的东西,全部设置
这里写图片描述
将需要的东西全部在server1中设置
这里写图片描述
执行 yum repolist命令加载yum源[root@server1 ~]# yum repolist
Loaded plugins: product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
HighAvailability | 3.9 kB 00:00
HighAvailability/primary_db | 43 kB 00:00
LoadBalancer | 3.9 kB 00:00
LoadBalancer/primary_db | 7.0 kB 00:00
ResilientStorage | 3.9 kB 00:00
ResilientStorage/primary_db | 47 kB 00:00
ScalableFileSystem | 3.9 kB 00:00
ScalableFileSystem/primary_db | 6.8 kB 00:00
rhel-source | 3.9 kB 00:00
repo id repo name status
HighAvailability HighAvailability 56
LoadBalancer LoadBalancer 4
ResilientStorage ResilientStorage 62
ScalableFileSystem ScalableFileSystem 7
rhel-source Red Hat Enterprise Linux 6Server - x86_64 - Source 3,690
repolist: 3,8192、安装lvs用户层面的插件ipvsadm
[root@server1 ~]# yum install ipvsadm -y
3、设置虚拟vip
[root@server1 ~]# ip addr add 172.25.254.100/24 dev eth0 #添加一个ip
[root@server1 ~]# ipvsadm -A -t 172.25.254.100:80 -s rr #将这个ip设置成lvs的虚拟ip,rr表示论询算法
[root@server1 ~]# ipvsadm -l ##此时在lvs规则中可以看到添加vip,但没有规则
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.254.100:http rr
[root@server1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.2:80 -g ##添加规则 -g表示DR直接路由模式
[root@server1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.3:80 -g
[root@server1 ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.254.100:http rr
-> server2:http Route 1 0 0
-> server3:http Route 1 0 0
[root@server1 ~]# /etc/init.d/ipvsadm save ##保存规则
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]4、ipvsadm参数含义
-C:清除已有规则。
-A:添加VIP服务,后跟服务的访问地址。
-t:TCP协议,还是UDP协议(-u)。
-s:负载均衡算法,rr表示RoundRobin。
-a:添加RealServer到VIP,后跟虚地址。
-r:添加RealServer到VIP,后跟实地址。
-g:透传模式(-g表示Direct Routing即DR模式,-i表示ipip封装即Tunneling模式,-m表示Network Access Translation即NAT模式)
-p:Session粘连,同一客户端的请求在一段时间内都负载到同一RealServer。server2(RS)
1、安装httpd服务[root@server2 ~]# yum install httpd
[root@server2 ~]# /etc/init.d/httpd start
Starting httpd: httpd: Could not reliably determine the server’s fully qualified domain name, using 172.25.254.2 for ServerName
[ OK ]
[root@server2 ~]# vim /var/www/html/index.html
[root@server2 ~]# curl localhostserver2
2、添加ip
[root@server2 ~]# ip addr add 172.25.254.100/32 dev eth0
[root@server2 ~]# ip addr
1: lo: servr2(RS)
2、添加隧道tunl
[root@server2 ~]# ifconfig tunl0 172.25.62.100 netmask 255.255.255.255.255 up
255.255.255.255.255: Unknown host
[root@server2 ~]# ifconfig tunl0 172.25.62.100 netmask 255.255.255.255 up
[root@server2 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 52:54:00:37:2E:CC
inet addr:172.25.62.2 Bcast:172.25.62.255 Mask:255.255.255.0
inet6 addr: fe80::5054:ff:fe37:2ecc/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2344 errors:0 dropped:0 overruns:0 frame:0
TX packets:833 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4586465 (4.3 MiB) TX bytes:103759 (101.3 KiB)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:10 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1185 (1.1 KiB) TX bytes:1185 (1.1 KiB)tunl0 Link encap:IPIP Tunnel HWaddr
inet addr:172.25.62.100 Mask:255.255.255.255
UP RUNNING NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
[root@server2 ~]# route add -host 172.25.62.100 dev tunl0 ##添加路由接口,确保从隧道进来的包由隧道出去
[root@server2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.25.62.100 0.0.0.0 255.255.255.255 UH 0 0 0 tunl0
172.25.62.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 172.25.62.250 0.0.0.0 UG 0 0 0 eth0server2和server3相同
测试:用和vip网关相同的ip主机访问vip,如果访问到的页面有轮询,则负载均衡搭建成功
[root@oundation62 rhel6.5]# curl 172.25.62.100
server2
[root@oundation62 rhel6.5]# curl 172.25.62.100
server3
[root@oundation62 rhel6.5]# curl 172.25.62.100
server2
[root@oundation62 rhel6.5]# curl 172.25.62.100
server3
[root@oundation62 rhel6.5]# curl 172.25.62.100
server2
[root@oundation62 rhel6.5]# curl 172.25.62.100
server3
1
2
3
4
5
6
7
8
9
10
11
12VS效果
[root@server1 ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.62.100:http rr
-> server2:http Tunnel 1 0 3
-> server3:http Tunnel 1 0 4