• IP Tunnel ,简称TUN模式
• 采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的lnternet连接直接回应客户机,而不再经过负载调度器
• 服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信
原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求报文封装一层IP隧道(T-IP)转发到真实服务器(RS)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量
缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持“IP Tunneling”
下面是大概的架构图,只实验局域网内部的部分
首先我们用一台正常设置的主机156作为路由器
添加一块网卡,记得关机再添加网卡
添加好以后就可以开机了
用ip addr命令查看我们的网卡信息,大家也知道我们centos7的默认网卡是ens33,而lo是本地回环,所以ens37就是我们刚刚添加的网卡,但是现在还没有ip,那是因为我们还没有配置
[root@server156 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:3d:11:ca brd ff:ff:ff:ff:ff:ff
inet 192.168.121.156/24 brd 192.168.121.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fe3d:11ca/64 scope link
valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:50:56:28:ee:ca brd ff:ff:ff:ff:ff:ff
然后查看网卡配置目录里,以ifcfg开头的文件,除了ens33和lo之外的,ens33r就是我们刚添加的网卡了,然后修改里面的配置文件
[root@server156 ~]# ls /etc/sysconfig/network-scripts/
ifcfg-ens33 ifdown-isdn ifup ifup-plusb ifup-wireless
ifcfg-ens33r ifdown-post ifup-aliases ifup-post init.ipv6-global
ifcfg-lo ifdown-ppp ifup-bnep ifup-ppp network-functions
ifdown ifdown-routes ifup-eth ifup-routes network-functions-ipv6
ifdown-bnep ifdown-sit ifup-ippp ifup-sit
ifdown-eth ifdown-Team ifup-ipv6 ifup-Team
ifdown-ippp ifdown-TeamPort ifup-isdn ifup-TeamPort
ifdown-ipv6 ifdown-tunnel ifup-plip ifup-tunnel
[root@server156 ~]#
这里将DEVICE改为刚才添加的网卡名字,刚才看到我们添加的网卡名为ens37,所以我们就改为ens37,不要随便改为其它的,不然可能会出错。
然后添加我们的ip和掩码(IPADDR=192.168.231.50,PREFIX=24),根据架构来做,可以换成自己的地址,网卡就不要了,因为只在内部网络通信,这个网卡不是用来与外网通信的
[root@server156 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33r
# Generated by parse-kickstart
DEVICE="ens37"
IPV6INIT="yes"
BOOTPROTO=static
UUID="4e976e09-2ace-4b18-9309-b9c6e001a3ed"
ONBOOT="yes"
IPADDR=192.168.231.50
PREFIX=24
然后重启网络,就可以看到我们添加的网络了
[root@server156 ~]# systemctl restart network
[root@server156 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:3d:11:ca brd ff:ff:ff:ff:ff:ff
inet 192.168.121.156/24 brd 192.168.121.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fe3d:11ca/64 scope link
valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:28:ee:ca brd ff:ff:ff:ff:ff:ff
inet 192.168.231.50/24 brd 192.168.231.255 scope global ens37
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fe28:eeca/64 scope link
valid_lft forever preferred_lft forever
然后配置我们的防火墙,让防火墙充当一台路由器,实现转发功能
下面这个配置是开启防火墙的转发功能,并将该主机上80端口的请求都转发到192.168.231.66主机上
[root@server156 ~]# systemctl start firewalld.service
[root@server156 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@server156 ~]# firewall-cmd --add-masquerade
success
[root@server156 ~]# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.231.66
success
[root@server156 ~]# firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: yes
forward-ports: port=80:proto=tcp:toport=80:toaddr=192.168.231.66
source-ports:
icmp-blocks:
rich rules:
然后这台主机的配置就完成了
然后配置我们的LVS的DS负载均衡转发服务器
这里我用153主机来当DS服务器,首先让这台主机正常上网
下载一个ipvsadm的软件包
yum install -y ipvsadm
下好了以后就可以关机了
然后修改网络配置
修改好以后开机
修改ens33网卡的ip为192.168.231.0网段,但是不要用192.168.231.66,不然会冲突
改ip和网关就好了 其它的不用管,网关记得设置为刚才的156主机充当的路由器,同网段的192.168.121.50,将对应IP改为自己的就可以了
然后重启动网卡
然后添加我们192.168.231.66的ip
ifconfig tunl0 192.168.231.66 broadcast 192.168.231.66 netmask 255.255.255.255 up
可以尝试ping192.168.231.50看网络是否通
没问题以后就开始配置lvs的负载均衡规则了
由于只能在vm里编辑,没办法复制,你们可以写成脚本
modprobe ipip
lsmod | grep ipip
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
ipvsadm -A -t 192.168.231.66:80 -s rr
ipvsadm -a -t 192.168.231.66:80 -r 192.168.231.100 -i
ipvsadm -a -t 192.168.231.66:80 -r 192.168.231.200 -i
ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl daemon-reload
systemctl restart ipvsadm.service
ipvsadm -Ln
然后设置两台LVS的SR服务器,根据架构配,换成自己规划好的的ip就行
我规划的分别是192.168.231.100和192.168.231.200
跟DS服务器一样,先让机器正常联网,安装http或者nginx来测试
不会的话可以看看我nginx反向代理那一章的方法,做一点简单的内容区分访问的主机就好了
安装好测试的http或者nginx就可以关机,然后也是改为仅主机模式就好了
我只配置一台就好了,另一台配置是一样的,就ip100改为200就可以了
下面开始配置192.168.231.100的SR服务器
开机以后先修改网络,网关一定要改为充当路由器的192.168.231.50
这里要添加一个虚拟ip,为lvs的DS服务器的ip192.168.231.66
然后重启网络,开启ipip模块
在/etc/sysctl.conf 添加一些内容
这些配置主要是让100和200的主机在arp请求192.168.231.66的时候不回应,防止ip冲突
#vim /etc/sysctl.conf
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.tunl0.rp_filter=0
net.ipv4.conf.tunl0.arp_ignore=1
net.ipv4.conf.tunl0.arp_announce=2
net.ipv4.conf.all.arp_ignore =1
net.ipv4.conf.all.arp_announce=2
blog.csdnimg.cn/d293dc6d35404dbca3027d265497d1a0.png)
然后sysctl -p 让配置文件生效,并启动nginx就可以开始测试了
当然是两台都完成了再测试
我用了不是路由器也不是lvs里的主机服务器来访问,看到是可以访问到的
再去浏览器试试
可以看到浏览器也访问成功了,说明我们的LVS的TUN模式负载均衡配置完成了