文章目录
LVS TUN 模式工作原理: 封装IP
virtual server via ip tunneling模式:采用NAT模式时,由于请求和响应的报文必须通过调度器地址重写,当客户请求越来越多时,调度器处理能力将成为瓶颈。为了解决这个问题,调度器把请求的报文通过IP隧道广播转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端。这样调度器就只处理请求入站报文,由于一般网络服务应答数据比请求报文大很多,采用VS/TUN模式后,集群系统的最大吞吐量可以提高10倍。
VS/TUN的工作流程图如下所示,它和NAT模式不同的是,它在LB和RS之间的传输不用改写IP地址。而是把客户请求包封装在一个IP tunnel里面,然后发送给RS节点服务器,节点服务器接收到之后解开IP tunnel后,进行响应处理。并且直接把包通过自己的外网地址发送给客户不用经过LB服务器。
Tunnel原理流程图:
DR方式是通过MAC,规模是一个交换网络。而TUN方式,是通过给数据包加上新的IP头部来实现
部署环境
Redhat7.3版本下实验,关闭防火墙及selinux
别名 | ip | |
---|---|---|
DS lvs调度器服务器 | server1 | eth0:192.168.0.1/24 tunl0:192.168.0.100(VIP) |
RS后端真实主机服务器1 | server2 | 192.168.0.2/24 |
RS后端真实主机服务器2 | server3 | 192.168.0.3/24 |
CS客户端服务器 | client | 192.168.0.10/24 |
1、添加隧道模块
2、添加VIP
3、安装lvs管理工具——ipvsadm服务
4、修改反向过滤规则,防止丢包
5、 RS服务器搭建apache资源
6、 CS客户测试端测试
步骤
server1-DS lvs调度器服务器
#加入隧道模块
modprobe ipip
#tunl0上添加VIP
ip addr add 192.168.0.100/24 dev tunl0
ip link set up tunl0
#下载ipvsadm
yum install ipvsadm -y
#添加策略
ipvsadm -A -t 192.168.0.100:80 -s rr
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.2:80 -i -w 1
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.3:80 -i -w 1
server2-RS后端真实主机服务器1
#加入隧道模块
modprobe ipip
#tunl0上添加VIP
ip addr add 192.168.0.100/24 dev tunl0
ip link set up tunl0
#修改反向过滤规则,防止丢包
#查看过滤表将所有的过滤规则都关闭
sysctl -a | grep rp_filter
#临时添加
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
#设置生效
sysctl -p
#再次查看
sysctl -a | grep rp_filter
#禁用路由转发功能
echo ‘0’>/proc/sys/net/ipv4/ip_forward
server3-RS后端真实主机服务器2
#加入隧道模块
modprobe ipip
#tunl0上添加VIP
ip addr add 192.168.0.100/24 dev tunl0
ip link set up tunl0
#修改反向过滤规则,防止丢包
#查看过滤表将所有的过滤规则都关闭
sysctl -a | grep rp_filter
#临时添加
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
#设置生效
sysctl -p
#再次查看
sysctl -a | grep rp_filter
#禁用路由转发功能
echo ‘0’>/proc/sys/net/ipv4/ip_forward
server2及server3设置apache
server2
#下载apache
yum install httpd -y
#启动
systemctl start httpd
echo server2 > /var/www/html/index.html
systemctl restart httpd
server3
#下载apache
yum install httpd -y
#启动
systemctl start httpd
echo server3 > /var/www/html/index.html
systemctl restart httpd
CS客户测试端
curl 192.168.0.100
server2
curl 192.168.0.100
server3