因为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地址 上的一个虚拟服务。html
VS/NAT的体系结构如图所示。在一组服务器前有一个调度器,它们是经过Switch/HUB相链接的。这些服务器提供相同的网络服务、相同的内 容,即无论请求被发送到哪一台服务器,执行结果是同样的。服务的内容能够复制到每台服务器的本地硬盘上,能够经过网络文件系统(如NFS)共享,也能够通 过一个分布式文件系统来提供。vim
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转换功能3d
[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配置完成。能够开始测试
轮询成功