1.基于NAT的LVS模式负载均衡

NAT(Network Address Translation)即网络地址转换,其作用是通过数据报头的修改,使得位于企业内部的私有IP地址可以访问外网,以及外部用用户可以访问位于公司内部的私有IP主机。VS/NAT工作模式拓扑结构如图2所示,LVS负载调度器可以使用两块网卡配置不同的IP地址,eth0设置为私钥IP与内部网络通过交换设备相互连接,eth1设备为外网IP与外部网络联通。

第一步,用户通过互联网DNS服务器解析到公司负载均衡设备上面的外网地址,相对于真实服务器而言,LVS外网IP又称VIP(Virtual IP Address),用户通过访问VIP,即可连接后端的真实服务器(Real Server),而这一切对用户而言都是透明的,用户以为自己访问的就是真实服务器,但他并不知道自己访问的VIP仅仅是一个调度器,也不清楚后端的真实服务器到底在哪里、有多少真实服务器。

第二步,用户将请求发送至124.126.147.168,此时LVS将根据预设的算法选择后端的一台真实服务器(192.168.0.1~192.168.0.3),将数据请求包转发给真实服务器,并且在转发之前LVS会修改数据包中的目标地址以及目标端口,目标地址与目标端口将被修改为选出的真实服务器IP地址以及相应的端口。

第三步,真实的服务器将响应数据包返回给LVS调度器,调度器在得到响应的数据包后会将源地址和源端口修改为VIP及调度器相应的端口,修改完成后,由调度器将响应数据包发送回终端用户,另外,由于LVS调度器有一个连接Hash表,该表中会记录连接请求及转发信息,当同一个连接的下一个数据包发送给调度器时,从该Hash表中可以直接找到之前的连接记录,并根据记录信息选出相同的真实服务器及端口信息。

netty负载均衡设计 负载均衡nat_IP

2.准备:

实验使用的是6.5的虚拟机

server1(双网卡):eth0:172.25.20.1和eth1:172.25.1.1
server2:eth0:172.25.20.2
server3:eth0:172.25.20.3

真机:172.25.20.250,172.25.1.100server1(172.25.1.100)作为调度器,将server2、server3作为后端服务器,真机作为客户端。

3.实现:

1.准备三台虚拟机,server1、server2、server3

[root@foundation20 ~]# cd /var/lib/libvirt/images/
[root@foundation20 images]# qemu-img create -f qcow2 -b westos.qcow2 server1
[root@foundation20 images]# qemu-img create -f qcow2 -b westos.qcow2 server2
[root@foundation20 images]# qemu-img create -f qcow2 -b westos.qcow2 server3

netty负载均衡设计 负载均衡nat_服务器_02


2.给server1(调度器)添加双网卡

netty负载均衡设计 负载均衡nat_服务器_03

netty负载均衡设计 负载均衡nat_服务器_04


3.用真机连接三个虚拟机

[kiosk@foundation20 ~]$ ssh root@172.25.20.1

netty负载均衡设计 负载均衡nat_IP_05

[kiosk@foundation20 ~]$ ssh root@172.25.20.2

netty负载均衡设计 负载均衡nat_服务器_06

[kiosk@foundation20 ~]$ ssh root@172.25.20.3

netty负载均衡设计 负载均衡nat_服务器_07


4.server1配置yum源并安装调度服务

[root@server1 yum.repos.d]# yum clean all
[root@server1 yum.repos.d]# yum repolist

netty负载均衡设计 负载均衡nat_服务器_08

netty负载均衡设计 负载均衡nat_netty负载均衡设计_09


5.在调度器上设置调度策略

[root@server1 ~]# yum list ipvsadm
[root@server1 ~]# yum install -y ipvsadm.x86_64

netty负载均衡设计 负载均衡nat_服务器_10

[root@server1 ~]# ipvsadm -C
[root@server1 ~]# ipvsadm -A -t 172.25.1.1:80 -s rr
[root@server1 ~]# ipvsadm -a -t 172.25.1.1:80 -r 172.25.20.2:80 -m
[root@server1 ~]# ipvsadm -a -t 172.25.1.1:80 -r 172.25.20.3:80 -m
[root@server1 ~]# ipvsadm -l

netty负载均衡设计 负载均衡nat_netty负载均衡设计_11


6.开启路由机制server1、server2、server3

server1收到客户请求后,得到一个公网的IP,跟目的主机server2,server3不在一个网段。

如果想要将客户端来的数据包转发给后段服务器,那么必须对这个数据包进行IP转换,再进行数据包转发。

Linux系统默认禁止数据包转发,需要配置Linux系统的IP转发功能进行转发。

[root@server1 ~]# vim /etc/sysctl.conf

netty负载均衡设计 负载均衡nat_服务器_12


7.设置好客户端的IP和网关

[root@foundation20 ~]# ip addr add 172.25.1.100/24 dev br0
[root@foundation20 ~]# ip addr show br0
[root@foundation20 ~]# route add default gw 172.25.20.1
[root@foundation20 ~]# route -n

netty负载均衡设计 负载均衡nat_IP_13


8.测试

[root@foundation20 ~]# curl 172.25.1.1
[root@foundation20 ~]# curl 172.25.1.1
[root@foundation20 ~]# curl 172.25.1.1
[root@foundation20 ~]# curl 172.25.1.1
[root@foundation20 ~]# curl 172.25.1.1
[root@foundation20 ~]# curl 172.25.1.1

当客户端172.25.1.100访问调度器172.25.1.1的时候,会通过网关调度器的172.25.20.1,从而调度器帮客户端区172.25.20.2172.25.20.3上轮循拿资源

netty负载均衡设计 负载均衡nat_netty负载均衡设计_14

netty负载均衡设计 负载均衡nat_IP_15