由于IPv4中IP地址空间的日益紧张和安全方面的原因,很多网络使用保留IP地址(10.0.0.0/255.0.0.0、172.16.0.0 /255.128.0.0和192.168.0.0/255.255.0.0)[64, 65, 66]。这些地址不在Internet上使用,而是专门为内部网络预留的。当内部网络中的主机要访问Internet或被Internet访问时,就需要 采用网络地址转换(Network Address Translation, 以下简称NAT),将内部地址转化为Internets上可用的外部地址。NAT的工作原理是报文头(目标地址、源地址和端口等)被正确改写后,客户相信 它们连接一个IP地址,而不同IP地址的服务器组也认为它们是与客户直接相连的。由此,可以用NAT方法将不同IP地址的并行网络服务变成在一个IP地址 上的一个虚拟服务。
VS/NAT的体系结构如图所示。在一组服务器前有一个调度器,它们是通过Switch/HUB相连接的。这些服务器提供相同的网络服务、相同的内 容,即不管请求被发送到哪一台服务器,执行结果是一样的。服务的内容可以复制到每台服务器的本地硬盘上,可以通过网络文件系统(如NFS)共享,也可以通 过一个分布式文件系统来提供。
VS/NAT的配置如下表所示,所有到IP地址为202.103.106.5和端口为80的流量都被负载均衡地调度的真实服务器 172.16.0.2:80和172.16.0.3:8000上。目标地址为202.103.106.5:21的报文被转移到172.16.0.3:21 上。而到其他端口的报文将被拒绝。
下面,举个例子来进一步说明VS/NAT
因为实验需求 笔者将CIP:server1(虚拟机)设置了两块网卡,分别模拟内外网
两台RS :server2 server3 ip设置为于server1 模拟内网ip的同网段ip
[root@server1 ~]# ip link set up eth1 #激活网卡eth1
[root@server1 ~]# ip addr add 192.168.0.1/24 dev eth1 #为网卡设置临时内网ip
上图可以看到ip设置成功,eth0 的ip 与笔者真机ip处于同一网段,作为外网ip使用
配置yum源仓库,加入HighAvailability和LoadBalancer 否则ipvsadm无法安装
然后打开ip转换功能
[root@server1 ~]# vim /etc/sysctl.conf
将参数修改为1
sysctl -p 刷新修改内容
添加ipvsadm策略
[root@server1 ~]# ipvsadm -A -t 172.25.254.1:80 -s rr #rr表示轮询
[root@server1 ~]# ipvsadm -a -t 172.25.254.1:80 -r 192.168.0.2:80 -m #设置nat模式
[root@server1 ~]# ipvsadm -a -t 172.25.254.1:80 -r 192.168.0.3:80 -m #添加rip
[root@server1 ~]# ipvsadm -ln #查看策略
为server2和server3配置临时网关,安装http服务,在http默认发布目录编写发布页
yum install httpd -y
vim /var/www/html/index.html
server3默认发布页写为:
到此设置完毕,接下来可以进行测试
(记得真机ip不可与RS在同一网段)
实验完成,成功达成NAT负载均衡。
在VS/NAT的集群系统中,请求和响应的数据报文都需要通过负载调度器,当真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的新 瓶颈。大多数Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即在负载调度器中只负责调度 请求而响应直接返回给客户,将极大地提高整个集群系统的吞吐量。
VS/TUN的工作流程如图所示:它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地 选择一台服务器,将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为VIP 的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。
接下来开始LVS—TUN的负载均衡实验
VS为server1 IP为172.25.254.1
VIP为172.25.254.100
RS为server2 server3 IP分别为172.25.254.2 172.25.254.3
modprobe ipip 加载隧道模块,ip addr可以看到tunl0网卡
[root@server1 ~]# ip link set up tunl0 #启用网卡
[root@server1 ~]# ip addr add 172.25.254.100/24 dev tunl0 #添加虚拟ip
配置yum源仓库,加入HighAvailability和LoadBalancer 否则ipvsadm无法安装(这部上面做过了,不再赘述)
[root@server1 ~]# ipvsadm -C #清空策略
[root@server1 ~]# ipvsadm -A -t 172.25.254.100:80 -s rr #指定轮询
[root@server1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.2:80 -i #设定为TUN模式
[root@server1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.3:80 -i
[root@server1 ~]# ipvsadm -ln #查看策略
yum -y install heartbeat-ldirectord heartbeat-pils heartbeat-stonith heartbeat ipvsadm arptables_jf
[root@server2 ~]# arptables -F #清空策略
[root@server2 ~]# arptables -A IN -d 172.25.254.100 -j DROP #不缓存vip的mac地址
[root@server2 ~]# arptables -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.2
[root@server2 ~]# /etc/init.d/arptables_jf save #刷新策略
Saving current rules to /etc/sysconfig/arptables: [ OK ]
[root@server2 ~]# arptables -L #查看策略
与之前步骤相同,不再赘述
yum install httpd -y
vim /var/www/html/index.html
[root@server2 ~]# cat /var/www/html/index.html
www.westos.org-server2
[root@server2 ~]# /etc/init.d/httpd restart #刷新服务
将过滤出来=1的服务全部变更为0 变更命令为sysctl -w 将等于号前后空格去掉,改为=0即可
设置与server2一致,不再赘述
只需记得将
arptables -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.2 改为
arptables -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.3 即可
到此LVS—TUN配置完成。可以开始测试
轮询成功