LVS负载均衡————NAT模式

以下实验的实操都是在redhat7.3上


一、LVS/NAT基本原理

1. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
3.IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
4. POSTROUTING链通过选路,将数据包发送给Real Server 5. Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP 6. Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为调度器的vip

在这里插入图片描述

二、NAT模式优缺点

VS/NAT 的优点是服务器可以运行任何支持 TCP/IP 的操作系统,它只需要一个 IP 地址配置在调度器上,服务器组可以用私有的 IP 地址。
缺点是它的伸缩能力有限, 当服务器结点数目升到 20 时,调度器本身有可能成为系统的新瓶颈,因为在 VS/NAT 中请求和响应报文都需要通过负载调度器。

三、LVS/NAT模式工作流程

NAT模型:地址转换类型,主要是做地址转换,类似于iptables的DNAT类型,它通过多目标地址转换,来实现负载均衡, 一个Director最多负载提供10个Real Server主机
1、client发送request到LVS的VIP上,VIP选择一个Real-server,并记录连接信息到hash表中,然后修改client 的request的目的IP地址为Real-server的地址,将请求发给Real-server;
2、 Real-server收到request包后,发现目的IP是自己的IP,于是处理请求,然后发送reply给LVS;
3、LVS收到reply包后,修改reply包的的源地址为VIP,发送给client;
4、从client来的属于本次连接的包,查hash表,然后发给对应的Real-server。
5、 当client发送完毕,此次连接结束或者连接超时,那么LVS自动从hash表中删除此条记录。

四、LVS/NAT(c client ->DS -> RS->DS->client)实验环境

一台调度器server1,两台后端服务器server2和server3,一台客户端172.25.70.250(私有ip)

第一种方法:如果只有一块网卡可用以下方式:
1.调度器(server1)两个ip;

第二种方法:Load Balance(负载均衡) 双网卡 eth0: 172.25.70.1(对内) eth1: 172.25.0.1 (对外)

以下实验采用的是第二种情况:

环境配置
服务名称作用
Load Balance(172.25.0.1) /## 对内:172.25.0.1## / 对外(虚拟ip):172.25.70.1 /网关:172.25.70.250vs调度器
server2(172.25.0.2)/网关:172.25.0.1rs真实后端服务器
server3(172.25.0.2)/网关:172.25.0.1rs真实后端服务器
客户端(172.25.70.250)测试
在server1(调度器)上

添加网卡:
在这里插入图片描述

[root@server1 ~]#cd /etc/sysconfig/network-scripts
[root@server1 ~]#vim ifcfg-eth1   #配置ip和网关
[root@server1 ~]#vim ifcfg-ens3

在这里插入图片描述

[root@server1 ~]# systemctl restart network

在这里插入图片描述

[root@server1 ~]# ip addr show

在这里插入图片描述

[root@server1 ~]# vim /etc/sysctl.conf   #将路由转换功能打开
net.ipv4.ip_forward = 1
[root@server1 ~]# sysctl -p  #生效
net.ipv4.ip_forward = 1

在这里插入图片描述

[root@server1 ~]# modprobe iptable_nat  #加载nat模块
`注`:如果不加载此模块,也可以在第一次访问时成功,但是会在再次访问时出现延迟过长,或访问超时现象

[root@server1 ~]# ipvsadm -A -t 172.25.70.1:80 -s rr  #添加轮询算法
[root@server1 ~]# ipvsadm -a -t 172.25.70.1:80 -r 172.25.0.2:80 -m
[root@server1 ~]# ipvsadm -a -t 172.25.70.1:80 -r 172.25.0.3:80 -m
[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.70.1:80rr
  -> 172.25.0.2:80               Masq    1      0          0         
  -> 172.25.0.3:80              Masq    1      0          0         
[root@server1 ~]# ipvsadm-save services    #保存规则
-A -t server1:http -s rr
-a -t server1:http -r 172.25.0.2:http -m -w 1
-a -t server1:http -r 172.25.0.3:http -m -w 1 

在这里插入图片描述

在server2(后端服务器):
[root@server2 ~]# cd /etc/sysconfig/network-scripts
[root@server2 ~]# vim ifcfg-ens3  #配置ip和网关

在这里插入图片描述

[root@server2 ~]# systemctl restart network  #配置完网络,重启服务
[root@server2 ~]# systemctl restart httpd  #重启httpd
[root@server2 ~]# netstat -tnlp  #查看80端口是否打开

在这里插入图片描述

在server3(后端服务器)上:
[root@server3 ~]# cd /etc/sysconfig/network-scripts
[root@server3 ~]# vim ifcfg-ens3  #配置ip和网关
[root@server3 ~]# systemctl restart network  #配置完网络,重启服务

在这里插入图片描述

[root@server3 ~]# systemctl restart httpd  #重启httpd
[root@server3 ~]# netstat -tnlp  #查看80端口是否打开

在这里插入图片描述

测试
server2和server3进行轮询

[root@foundation70 ~]# curl 172.25.70.1
server3-www-vhost.example.com
[root@foundation70 ~]# curl 172.25.70.1
server2.example.com
[root@foundation70 ~]# curl 172.25.70.1
server3-www-vhost.example.com
[root@foundation70 ~]# curl 172.25.70.1
server2.example.com
[root@foundation70 ~]# 

在这里插入图片描述

在server1上查看:
[root@server1 ~]# ipvsadm -ln  #查看server2和server3都被调用了两次

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值