LVS-NAT模式下的负载均衡
##1.VS/NAT简介##
通过网络地址转换的方法来实现调度。
首先调度器LB接受到客户的请求数据包时,将请求决定发送给后端的真实服务器RS。
然后调度器就把客户发送的请求数据包的目标ip地址及端口改成后端真实服务器的ip地址RIP,
这样真实服务器RS就能够接收到客户的请求数据包了。真实服务器响应完请求后,查看默认路由(LB)
把响应后的数据包发送给LB,LB在接收到响应包后,把包的源地址改成虚拟地址vip,然后发送给客户端。
##2.VS/NAT原理##
1.客户端请求数据,目标ip时vip
2.请求数据包到达LB服务器,LB根据调度算法将数据包的目的地址修改为RIP和其对应的端口,并在连接HASH表中记录下这个连接。
3.数据包从LB服务器到达RS服务器,然后RS对数据包进行响应,RS服务器将响应数据包返回给LB服务器。
4.LB服务器收到响应数据包后,根据HASH表修改源地址为vip,目标地址是cip,和其对应的端口,然后,将响应包从LB返回给客户端。
5.客户端接收到响应包
##3.HASH表##
HASH表时根据关键码值进行访问的数据结构。也就是说,它通过将关键码值映射到表中一个位置来访问记录,以加快查找速度。这个映射函数叫作散列函数,存放记录的数组叫做三列表,也叫HSAH表。
##4.NAT模式优缺点##
1.NAT技术只需要在LB上配置一个公网ip就行。
2.每台RS的网关地址必须是LB调度器的内网地址。
3.NAT模式支持对ip地址和端口进行转换。用户请求的端口和真实服务器的端口可以不一致。
4.NAT技术对请求的数据包和响应的数据包报文都需要通过LB进行地址改写。因此,网站访问量比较大的时候,LB负载均衡调度器有比较大的瓶颈,一般要求最多只能在10-20台之间。
##5.VS/NAT模式下的负载均衡##
(1)
实验环境:
1.sever1中:
server1作为调度器LB
LB双网卡:
eth0:172.25.67.1(对外)
eth1:192.168.67.1(对内)
vip:72.25.67.1
gateway:192.168.67.1
2.server2中:
RS:192.168.67.2
3.server3中:
RS:192.168.67.3
(2)
配置:
1.在server1中:
1)添加网卡并配置ip:
多添加一个网卡
ip link set up eth1 #**网卡
ip addr add 192.168.67.1/24 dev eth1 #配置eth1的ip
2)配置yum仓库:
vim /etc/yum.repos.d/rhel-source.repo
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.67.250/rhel6.5/LoadBalancer
gpgcheck=0
3)安装ipvsadm并设定其策略
yum install ipvsadm -y
/etc/init.d/ipvsadm start #开启服务
ipvsadm -A -t 172.25.67.1:80 -s rr
ipvsadm -a -t 172.25.67.1:80 -r 192.168.67.2:80 -m
ipvsadm -a -t 172.25.67.1:80 -r 192.168.67.3:80 -m
/etc/init.d/ipvsadm save #保存策略
4)开启ip转发
modprobe iptable_nat #载入模块
sysctl -w net.ipv4.ip_forward=1 #将内部路由功能打开
vim /etc/sysctl.conf #永久修改
net.ipv4.ip_forward = 1
2.在server2中:
ip:192.168.67.2
route add default gw 192.168.67.1 #配置网关
yum install httpd -y
/etc/init.d/httpd start #打开httpd服务
vim /var/www/html/index.html
<h1>server2</h1>
/etc/init.d/httpd restart #重启httpd服务
curl localhost #查看发布文件是否生效
3.在server3中:
ip:192.168.67.3
route add default gw 192.168.67.1 #配置网关
yum install httpd -y
/etc/init.d/httpd start #打开httpd服务
vim /var/www/html/index.html
<h1>server3</h1>
/etc/init.d/httpd restart #重启httpd服务
curl localhost #查看发布文件是否生效
(3)
测试:
在客户段进行测试:
#客户段的ip要与vip处于同一网段
for i in {1..10};do curl 172.25.67.1;done