LVS(Linux Virtual Server)Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,目的是实现高性能、高可伸缩、高可用的网络服务,目前已加入Linux内核。其原理是,用户访问虚拟服务器(VS),然后访问请求由负载均衡器(LB)调度到后端真实服务器(RS)上,由RS实际处理用户的请求后返回响应。
对比
-
LVS主要工作在网络模型中的第四层(传输层)。
-
Nginx工作在第七层(应用层),主要处理web业务。
-
预算充足的话( ̄▽ ̄),大可直接上硬件负载均衡F5,可同时顶替LVS+Nginx。
内核模块
IPVS(IP Virtual Server)模块是LVS的核心软件模块,目前新版本的Linux内核直接支持IPVS。IPVS的作用是虚拟出一个IP地址和端口对外提供服务。由于IPVS基于netfilter,故需要注意运行LVS的机器上关于netfilter的一些控制规则的使用,避免冲突。
实现工具
ipvsadm作为工作在用户空间的LVS管理工具,它的作用是定义具体的IPVS规则。 现在常用的Keepalived则是针对LVS设计的一个高性能集群软件,直接配置部署keepalived即可实现LVS,不再需要运维编写脚本调用ipvsadm。
注:额外的,keepalived引入了VRRP协议(结合BFD协议快速地探测网络状态),实现了自身节点的高可用性HA(High Avalilability)。
相关名词
CIP:Client IP
VIP:Virtual IP
DIP:Director IP
RIP:Real Server IP
IPVS可以工作在以下4种模式
- NAT
对用户发出的请求包,修改目的IP(VIP)为后端真实IP,发送给真实服务器RS。 真实服务器RS收到数据包后回包给VS,VS再对数据包源IP进行NAT转换为VIP,最终用户看到了自己请求后来自VIP的正常返回包。
特点:RS配置简单,只需要网关指回VS即可,RS和VS需要处于同一网段。但VS主机压力很大,本身的转发能力有可能成为系统的瓶颈。
- TUN(tunneling)
对用户发出的请求包,VS在数据包外面再封装一层指向RS的IP报文头后转发给RS, RS收到数据包后直接回包给用户。
特点:RS配置复杂,需要支持IPIP来识别封装的报文头,RS和VS之间路由可达即可。但VS的转发压力会小很多。
- DR(Direct Routing)
对用户发出的请求包,改写请求报文的目标MAC地址,将请求发给RS(为防止RS解开frame封装后不认VIP,还要把VIP绑在RS的LO接口上,并抑制ARP),RS的响应结果(注,返回的数据量可能很大)不再经过负载均衡器VS,直接返回给用户。
特点:RS配置复杂,VS和RS需要处于相同的二层vlan广播域内。但VS主机压力很小。(该模式业内使用人数多,反正自己参与部署过的都是DR模式,哈~)
- FULLNAT
最新一种加入内核的LVS模式,VS会对经过自己的请求包和响应包都做SNAT+DNAT,是一个完全的代理服务器。
特点:基本没见别人用过。客户端感知不到RS,RS也感知不到客户端,理论上降低了组网要求,只需要保证用户和VS、VS和RS之间网络互通即可,这给运维带来了便利,但自己一般同时就是那个组网的网工,所以可以无视这条~。
另外,需要注意的是,上面4种模式中不涉及NAT技术的模式(TUN和DR)无法改变端口,所以需要注意RS监听的端口需要是用户请求的端口。转发过程中,会涉及到具体的调度方法的选择,比如轮询、加权轮询、哈希、连接数等根据具体需求配置即可。
模式选型建议
-
对于自建小机房的企业,服务器在内网,通过公网IP提供对外网的服务时,NAT和FULLNAT是比较合理的选择
-
上云以后,NAT、FULLNAT或者TUN可能是合适的选择
-
提供视频ts流服务的场景中,推荐通过DR模式使得CDN服务器上的媒体文件可以直接下发给用户
关于keepalived的高可用功能补充说明
VRRP(Virtual Router Redundancy Protocol)中文名为虚拟路由冗余协议。在Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉Backup节点自己还活着,而Backup节点不会发包,只会接收报文来监听Master状态。当主Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主Master节点的心跳了,于是调用自身的接管程序(存在多台Backup时还会根据优先级进行选举),接管主Master节点的 IP资源及服务。 而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。这里需要注意小心探测失败引入脑裂问题,常见于防火墙配置不当阻碍了多播而导致~
评论列表,共 0 条评论
暂无评论