LVS介绍
Nginx与LVS区别:
Nginx 7层 反向代理
LVS 4层 数据包的转发
LVS介绍:
LVS是linux Virtual server简写,虚拟服务器
LVS负载均衡调度技术是在LINUX内核中实现的,使用该软件配置LVS时候,不能直接配置内核中的ipvs,而是使用ipvs的管理工具ipvsadm(命令行工具)进行管理,但是keepalived软件可以直接管理ipvs
虚拟IP地址(Virtual ip address) VIP vip为Director用于向客户端计算提供服务的IP地址
真实IP地址(Real Server IP address) RIP 在集群下面节点上使用的IP地址,物理IP地址
Director的IP地址(Director IP address) DIP Director用于连接外网网络的IP地址,物理网卡上的ip地址
客户端主机ip地址(Client IP address) CIP 客户端用户计算机请求集群服务器的IP地址
LVS 集群的4种工作模式介绍以及原理介绍
- NAT(Network Address Translation)
- TUN(Tunneling)
- DR (Direct Routing)最常用的
- FULLNAT(Full Network Address Translation)为阿里巴巴开发的
DR模式:
(仅供参考)
特点
- 通过在调度器LB上修改数据包的目的mac地址实现转发,源IP地址仍然是CIP,目的IP地址仍然是VIP
- 请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此并发访问量大时使用效率很高(和NAT相比)
- 因DR模式是通过MAC地址的改写机制实现的转发,因此所有RS节点和调度器LB只能在一个局域网中
- 需要注意RS节点的VIP的绑定(lo:VIP/32,lo1:vip/32)和arp抑制问题
- RS节点的默认网关不需要是调度器LB的DIP,而直接是IDC机房分配上级路由器的ip(这是RS带有外网ip地址情况),理论上来讲,RS可以出外网即可,不是必须配置外网ip
- 由于DR模式的调度器仅进行了目的MAC地址的改写,因此,调度器LB无法改变请求的报文的目的端口
- 当前调度器LB支持几乎所有unix/linux系统,但是目前不支持windows系统,真是服务器RS节点可以是windows
- DR模式效率很高,配置比较麻烦,访问量不是特别大的时候,可以使用haproxy/nginx取代即可(参考1000-2000pv)
- 直接对外的访问业务,列如web服务做RS节点,RS最好用公网ip地址,如果不直接对外的业务,列如:mysql,存储系统RS节点最好用内部IP
NAT模式:
特点
- nat技术将请求的报文(通过DNAT方式改写)和响应的报文(通过SNAT方式改写),通过调度器地址重写然后在转发给内部的服务器,报文返回时在改写成原来的用户请求的地址
- 只需要在调度器LB上配置wan公网ip即可,调度器也要有私有lan ip和内部RS节点通信
- 每台内部RS节点的网关地址,必须要配成调度器LB的私有LNA内物理网卡地址(LDIP),才能确保数据报文返回时仍然经过调度器LB
- 由于请求与相应的数据报文都经过调度器LB,因此,网站访问量大的时候,LB有瓶颈,一般要求最多10-20台节点
- NAT模式支持对IP及端口的转换,即用户请求10.0.0.1:80 可以通过调度器转换到RS节点的10.0.0.2:8080(DR和TUN模式不具备)
- 所有NAT内部RS节点只需要配置私有LAN IP即可
- 由于数据包来回都需要经过调度器,需要开启内核转发 net.ipv4.ip_forward = 1,也要包括iptables防火墙forward功能
TUNNEL模式
特点
(直接加ip头)
- 负载均衡器通过把请求的报文通过IP隧道的方式
- 由于真是服务器将相应处理后的报文直接返回给客户端用户,因此,最好RS有一个外网ip地址,这样效率会更高
- 由于调度器LB只处理入站请求的报文,,集群系统的吞吐量可以提高10倍以上,但是隧道模式也会带来系统开销,TUN模式适合LAN/WAN
- TUN模式的LAN环境转发不如DR模式效率高,而且还要考虑系统对IP隧道支持问题
- 所有的RS服务器都要绑定VIP,一直ARP,配置复杂
- LAN环境一般采用DR模式,wan环境可以用TUN模式,但是当前在WAN环境下,请求转发更多被haproxy/nginx/DNS调度等代理取代
- 直接对外的访问业务,列如web服务做RS节点,最好用公网ip地址,不直接对外的业务最好内部ip
LVS最常用的几种算法
rr 轮循调度,分配不同的RS节点
wrr 加权轮询调度,根据节点权值分配任务
wlc 加权最小连接数调度
dh 目的地址哈希调度
sh 源地址哈希调度