简介:
基于NAT机制实现。当用户请求到达director之后,director将请求报文的目标地址(即VIP)改成选定的realserver地址,同时将报文的目标端口也改成选定的realserver的相应端口,最后将报文请求发送到指定的realserver;在服务器端得到数据后,realserver将数据返给director,而director将报文的源地址和源端口改成VIP和相应端口,然后把数据发送给用户,完成整个负载调度过程。
Client->VS(两个网卡,一个內网,一个交换机与RS互通,DNAT目标地址转换)->RS(SNAT源地址转换)->VS->Client
特点:
1. LVS-DR模型的特性
特点:保证前端路由将目标地址为VIP报文统统发给负载均衡器,而不是真实服务器
真实服务器可以使用私有地址,也可以是公网地址,如果使用公网地址,此时可以通过互联网对真实服务器IP进行直接访问
真实服务器跟负载均衡器必须在同一个局域网中
所有的请求报文经由负载均衡器,但响应报文必须不能进过负载均衡器
不支持地址转换,也不支持端口映射
真实服务器可以是大多数常见的操作系统
真实服务器的网关绝不允许指向负载均衡IP(因为我们不允许他经过director)
真实服务器上的lo接口配置VIP的IP地址
缺陷:真实服务器和负载均衡器必须在同一机房中
2.LVS-NAT模型的特性
真实服务器应该使用私有地址,且网关必须指向负载均衡IP
负载均衡IP和真实服务器IP必须在同一个网段内
请求和响应报文都需要经过负载均衡器,高负载场景中,负载均衡器容易成为性能瓶颈
支持端口映射
真实服务器可以使用任意操作系统
缺陷:对负载均衡器压力会比较大,请求和响应都需经过负载均衡器
3.LVS-Tun模型特性
真实服务器IP、VIP、负载均衡器IP全是公网地址
真实服务器的网关不会也不可能指向负载均衡器IP
所有的请求报文经由负载均衡器,但响应报文必须不能进过负载均衡器
不支持端口映射
真实服务器的系统必须支持隧道
LVS_NAT实验环境:
rhel6.5
test1(VS): 172.25.1.11 vip: 172.25.254.100
test2(RS): 172.25.1.12 网关:172.25.1.11
test3(RS): 172.25.1.13 网关:172.25.1.11
VS:
给test1添加网卡并添加vip:172.25.254.100
[root@test1 ~]# cd /etc/sysconfig/network-scripts/
[root@test1 network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@test1 network-scripts]# vim ifcfg-eth1 //当临时添加ip时需要执行ip link set up eth1来激活eth1
[root@test1 network-scripts]# /etc/init.d/network restart
[root@test1 ~]# yum install -y ipvsadm
[root@test1 ~]# /etc/init.d/iptables stop
[root@test1 ~]# ipvsadm -C
[root@test1 ~]# ipvsadm -A -t 172.25.254.100:80 -s wrr //wrr加权轮叫调度算法
[root@test1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.1.12 -m -w 1
[root@test1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.1.13 -m -w 1 // -m表示nat模式,-w设置权重
[root@test1 ~]# ipvsadm -ln
[root@test1 ~]# vim /etc/sysctl.conf //永久设置,打开ip转发功能;若临时开启,用sysctl -w net.ipv4.ip_forward=1
sysctl -a |grep ip_forward //查看是否为1
RS:
[root@test2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 //添加网关,指向调度器
GATEWAY=172.25.1.11
//临时添加用route add default gw 172.25.1.11
[root@test2 ~]# cat /var/www/html/index.html
[root@test2 ~]# /etc/init.d/httpd start
test3: 进行相同的步骤添加网关172.25.1.11
[root@test3 ~]# cat /var/www/html/index.html
[root@test3 ~]# /etc/init.d/httpd start
此时进行客户端测试:
实现了轮询,即负载均衡。
但若其中一个RS出现故障,则会出现以下问题:
[root@test2 ~]# /etc/init.d/httpd stop
此时: