LVS——企业级负载均衡集群(基于IP-TUN的LVS负载均衡)

IP-TUN(隧道模式)工作原理

在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)
不修改请求报文的ip首部(cip—vip),而是通过在原有的ip首部(dip–rip),再封装一个ip首部

  1. rip dip vip 全是公网地址
  2. rs的网关不能指向dip
  3. 请求报文必须经由director调度,但响应报文必须不能经由director
  4. rs的os必须支持隧道功能

在这里插入图片描述
如上图:
a. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
b. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
c. IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
d. POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
e. RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
f. 响应报文最终送达至客户端

主机环境:rhel6.5 selinux and iptables disabled

主机名ip服务
lvs1172.25.254.1ipvsadm
lvs2172.25.254.2apache
lvs3172.25.254.3apache
  • Load Balance: 172.25.254.1(lvs1)
  • Virtual IP:172.25.254.100
  • Real Server1:172.25.254.2 (lvs2)
  • Real Server2:172.25.254.3(lvs3)
  • 物理机内网 : 172.25.254.250
搭建步骤:

前提:

[root@lvs1 html]# /etc/init.d/ldirectord stop
[root@lvs1 html]# ipvsadm -l
[root@lvs1 html]# ipvsadm -C

在这里插入图片描述

  • lvs1:172.25.254.1
    a. 加载隧道模块
    b. 给隧道上添加对外暴露的VIP
    c. 激活隧道
[root@lvs1 html]# modprobe ipip
[root@lvs1 html]# ip addr show	#会出现tunl0
[root@lvs1 html]# ip addr del 172.25.254.100/24 dev eth0
[root@lvs1 html]# ip addr add 172.25.254.100/24 dev tunl0
[root@lvs1 html]# ip addr show
[root@lvs1 html]# ip link set up tunl0

在这里插入图片描述

  • lvs2:172.25.254.2
    a. 加载隧道模块
    b. 给隧道上添加对外暴露的VIP
    c. 激活隧道
[root@lvs2 html]# modprobe ipip
[root@lvs2 html]# ip addr show	#会出现tunl0
[root@lvs2 html]# ip addr del 172.25.254.100/32 dev eth0
[root@lvs2 html]# ip addr add 172.25.254.100/32 dev tunl0
[root@lvs2 html]# ip addr show
[root@lvs2 html]# ip link set up tunl0

在这里插入图片描述

  • lvs3:172.25.254.3
    a. 加载隧道模块
    b. 给隧道上添加对外暴露的VIP
    c. 激活隧道
[root@lvs3 html]# modprobe ipip
[root@lvs3 html]# ip addr show	#会出现tunl0
[root@lvs3 html]# ip addr del 172.25.254.100/32 dev eth0
[root@lvs3 html]# ip addr add 172.25.254.100/32 dev tunl0
[root@lvs3 html]# ip addr show
[root@lvs3 html]# ip link set up tunl0

在这里插入图片描述
1.在lvs1上编辑新的策略

[root@lvs1 ~]# ipvsadm -A -t 172.25.254.100:80 -s rr #添加vip,对后端服务器采用rr算法 
[root@lvs1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.2:80 -i #添加后端真实服务器lvs2 
[root@lvs1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.3:80 -i #添加后端真实服务器lvs3 
[root@lvs1 ~]# /etc/init.d/ipvsadm save ##保存策略 

在这里插入图片描述
2.在lvs2上修改内核反向过滤策略

[root@lvs2 html]# sysctl -a | grep rp_filter	#查看参数状态
[root@lvs2 html]# sysctl -w net.ipv4.conf.default.rp_filter=0
[root@lvs2 html]# sysctl -w net.ipv4.conf.lo.rp_filter=0
[root@lvs2 html]# sysctl -w net.ipv4.conf.eth0.rp_filter=0
[root@lvs2 html]# sysctl -w net.ipv4.conf.tunl0.rp_filter=0
[root@lvs2 html]# sysctl -a | grep rp_filter
[root@lvs2 html]# sysctl -p		#重新加载

注意:重新加载后有些参数会变为1,需要在文件中进行修改
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@lvs2 ~]# vim /etc/sysctl.conf
[root@lvs2 ~]# sysctl -p

在这里插入图片描述
3.在lvs3上修改内核反向过滤策略
操作与lvs2相同,不再赘述

为什么要修改rp_filter这个参数呢?

rp_filter参数用于控制系统是否开启对数据包源地址的校验。

有三个值,0、1、2,具体含义:

0:不开启源地址校验。
1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。
2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包。

测试:

在客户端进行curl 172.25.254.100,并在调度器上查看状态
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值