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表中可以直接找到之前的连接记录,并根据记录信息选出相同的真实服务器及端口信息。
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.100
将server1(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
2.给server1(调度器)添加双网卡
3.用真机连接三个虚拟机
[kiosk@foundation20 ~]$ ssh root@172.25.20.1
[kiosk@foundation20 ~]$ ssh root@172.25.20.2
[kiosk@foundation20 ~]$ ssh root@172.25.20.3
4.server1配置yum源并安装调度服务
[root@server1 yum.repos.d]# yum clean all
[root@server1 yum.repos.d]# yum repolist
5.在调度器上设置调度策略
[root@server1 ~]# yum list ipvsadm
[root@server1 ~]# yum install -y ipvsadm.x86_64
[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
6.开启路由机制server1、server2、server3
server1收到客户请求后,得到一个公网的IP,跟目的主机server2,server3不在一个网段。
如果想要将客户端来的数据包转发给后段服务器,那么必须对这个数据包进行IP转换,再进行数据包转发。
Linux系统默认禁止数据包转发,需要配置Linux系统的IP转发功能进行转发。
[root@server1 ~]# vim /etc/sysctl.conf
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
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.2
和172.25.20.3
上轮循拿资源