3-2-基于LVS实现4层负载均衡原理讲解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3-2-基于LVS实现4层负载均衡原理讲解相关的知识,希望对你有一定的参考价值。
对负载均衡来讲,最关键的就是调度器了
网络传输层数:下四层由内核来管理及实现,被称为通信子网,最上面三层,叫应用层,在用户空间实现,叫做资源子网
lvs是四层的负载均衡器,而且是真正附着在netfilter(内核通信过滤或操作框架)不需要向内核监听注册某一端口,不再受套接字文件数量的限制,直接修改报文扔给后端,不需要自己扮演任何角色
tcp协议栈有65536个端口,主机只要向外发请求,就会用ip打开一个端口,像nginx这种运行在用户空间的进程,就需要通过自己的套接字(打开端口)向后端服务器的套接字传送信息,而端口数量是固定的,如果调度器工作在用户空间,受限于工作模型,不能提高并发请求的性能
而lvs不用端口,源端口源IP不用改变,提高并发能力,有人做过测试,lvs可以在内核级实现400万并发
lvs大杀器,以后基本不会接触到,因为不能做超出内核的(例如:cookie绑定,url过滤),有可能需要对内核进行二次开发才好用
可以做两级调度,第一级lvs,后边是nginx
lvs可以叫做调度器或director(导演)或分发器,后边的server叫rs(real server)
pv:page view页面浏览量pv一般大于uv一般大于IP
uv:unit view唯一的访问者,两个浏览器浏览同一个站点,也是两个用户
很多站点都是由不同的小集群(一个门户网站的各个频道)来承载,
构建架构,按照最大并发80%来算,最高不能超过95%
lvs:Linux Virtual Server
VS:Virtual Server
RS:Real Server
l4:四层路由器,四层交换机---根据目标端口进行分发
VS:根据请求报文的目标IP和目标协议及端口将其调度转发至某RealServer,根据调度算法来挑选RS;
iptables/netfilter:
iptables:用户空间的管理工具;
netfilter:内核空间上的框架:
流入:PREROUTING-->INPUT-->用户空间
流出:用户空间-->OUTPUT-->POSTROUTING
转发:PREROUTING-->FORWARD-->POSTROUTING
DNAT:目标地址转换;PREROUTING;
SNAT:源地址转换;POSTROUTING;
lvs工作在INPUT上★★★★★★
lvs:ipvsadm/ipvs---监听用户访问的端口是不是集群服务,以规则的方式来定义,如果是,强行扭转流量方向,直接扔给postrouting,注意会跟iptables规则有某些冲突,最好不要同时使用iptables
ipvsadm:用户空间的命令行工具,规则管理器,用于管理集群服务及相关的RealServer
ipvs:工作于内核空间的netfilter的INPUT钩子之上的框架;
lvs集群类型中的术语:
vs:Virtual Server,Director,Dispatcher,Balancer
rs:Real Server,upstream server(上游服务器),backend server(后端服务器)
CIP:Client IP,VIP:Virtual server IP,RIP:Real server IP,DIP:Director IPVS应该有至少两个IP,一个面向客户端,一个面向后端服务器
CIP<-->VIP==DIP<-->RIP
lvs集群的类型:
lvs-nat:修改请求报文的目标IP;多目标IP的DNAT;
lvs-dr:操纵封装新的MAC地址
lvs-tun:在原请求IP报文之外新加一个IP首部;---隧道,tunnel
lvs-fullnat:修改请求报文的源和目标IP和端口---非标准类型
lvs-nat:---根据需要看是否做端口映射
多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发;
(1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP;
(2)请求报文和响应报文都必须经由Director转发;Director易于成为系统瓶颈;
(3)支持端口映射,可修改请求报文的目标PORT;
(4)vs必须是linux系统,rs可以是任意系统;
lvs-dr
Direct Routing,直接路由;
通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC;源IP/PORT以及目标IP/PORT均保持不变;
Director和各RS都得配置使用VIP;
(1)确保前端路由器将目标IP为VIP的请求报文发往Director;
(a)在前端网关做静态绑定;---不适用,容易单点故障
(b)在RS上使用arptables;内核3.0以后实现了iptables和arptables的统一,使用工具还是不方便,内核提供了修改一个参数就可以修改通告不通告
(c)在RS上修改内核参数以限制arp通告及应答级别;
arp_announce---限制通告级别
arp_ignore---限制应答级别
(2)RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director;
(3)RS跟Directory要在同一个物理网络;
(4)请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client;
(5)不支持端口映射;
在路由器出口绑定director的mac地址,(目的是为了不让rs广播响应和广播通告),iptables不能做二层的控制,所以linux内核4.0之后整合了iptables和arptables,叫做nftables
lvs-DR中:RS中把VIP配置在lo接口的别名上(基于内核参数控制)
netfilter工作在内核空间当中,有5个钩子
1、刚刚入站时的prerouting(刚刚进入网卡)
根据报文的流向不同
2、到本机的Input,而后进入用户空间
3、如果是转发的,到达forward
4、forward之后是postrouting,然后离开本机
5、由本机内部的用户空间发出output,然后路由postrouting,离开本机
以上是关于3-2-基于LVS实现4层负载均衡原理讲解的主要内容,如果未能解决你的问题,请参考以下文章