网站架构之负载均衡方案
架构 刘宇帅 6年前 阅读量: 1752
什么负载均衡
当我们单台的服务器无法支持用户请求的时候就需要把机器扩充到几台、几十台甚至几百台,而当用户请求到的时候我们合理的把用户请求分发到各个服务器,这就是负载均衡。负载均衡要理解最重要的一点,我这里用了“合理的分发”而不是平均分发,因为负载均衡并不是简简单单的均分流量,我们需要考虑到不同的服务器硬件配置、网络情况来合理的分配分配流量以达到各个服务器均不超载、合理利用集群资源达到最佳的服务质量。当然当我们用多台服务器做负载均衡时一般会选用相同规格的机器,但是不排除网络延迟、机器突发故障灯引起的单台服务器负载飙升处理能力下降等情况。
网站架构中负载均衡的应用
从图中可以看到网站中对负载均衡应用分一下几个层面:
- 客户端-DNS 层
- LVS 层
- 反向代理-站点层
客户端-DNS 层
当客户端访问站点的时候,会查询 DNS,我们可以通过在 DNS 配置多条解析让 DNS 服务器通过轮询返回 IP 实现负载均衡。
优点:
- 通过 DNS 服务器实现负载均衡,减少自身机器压力
- DNS 服务器本身会根据用户 IP 智能分配里用户最近的 IP
- 动态更新,当服务器 IP 变更时,只需要修改 DNS 记录即可更新
缺点:
- 动态更新时存在延迟,由于延迟引起的问题时更难追查
- 特定用户问题不好追查,不知道用户被 DNS 分配到了那个服务器,当然这是可以通过技术解决的
- 策略单一,无法根据请求类型设置调度策略或者配置权重等,当然阿里云等一些服务商有提供这方面的服务,但是相对也比较单一
总结:
客户端-DNS 层综合来说非常不适合做负载均衡的,但是还是要根据具体业务分析。
LVS 层
首先要知道几个概念,负载均衡分为二层(数据链路层)、三层(网络层)、四层(传输层)、七层(应用层),这里的层对应的是 OSI 七层网络模型。二层负载均衡通过修改报文的目标 MAC 地址为上游服务器 MAC 地址,源 IP 地址和目标 IP 地址是没有变得,负载均衡服务器和真实的服务器共享同一个 VIP。三层负载均衡是基于 IP 地址的负载均衡。四层负载均衡是通过修改 IP 和 端口将报文转发到上游服务器的。七层负载均衡是根据端口号和应用层协议把请求转发到上游服务器的,比如 nginx 把特定端口的请求下特定的域名和 URL 的请求转发到上游服务器。
LVS-DR
LVS-DR 叫做直接路由,直接路由是工作在数据两路层的二层负载均衡方案,LVS 和 上游服务器共享同一个 VIP,直接路由通过修改数据包的 MAC 地址将数据转发到上游服务器上。ipvsadm 可用来配置 LVS-DR,具体可参考其文档。
优点:
- 上游服务器直接响应报文到客户端,响应不经过 LVS 可以避免单一 LVS 带宽及性能限制
缺点:
- LVS 和上游服务器必须在同一子网,这样会限制网站架构,一般会在 LVS-DR 后添加 nginx 等四层或七层负载均衡器解决跨网和性能问题。
总结: LVS-DR 是非常适合搭建可扩展的负载均衡系统。
LVS-NAT
LVS-NAT 叫做 IP 负载均衡,NAT 是工作在传输层的四层负载均衡方案,它通过修改发送过来的 IP 数据包,将数据包的目标 IP 修改为上游服务器 IP。ipvsadm 可用来配置 LVS-DR,具体可参考其文档。
优点:
- 没有 LVS-DR 的子网限制
缺点:
- 所有流量均流经 NAT 服务器,服务器的网络带宽及性能会影响服务能力
总结: 除了 NAT 带宽性能的影响外,LVS-NAT 是比较适合搭建负载均衡系统的。
LVS-TUN
LVS-TUN 叫做 IP 隧道负载均衡,TUN 是工作在网络层的三层负载均衡方案,他通过封装 IP 数据包到一个新的 IP 数据包并转发给上有服务器实现。
优点:
- TUN 服务器和上游服务器不需要再同一个子网
- 上有服务器直接响应报文到客户端,服务能力不会受 TUN 服务器的带宽和性能的影响
- 可以根据需求把服务器部署在不同的区域可以提高服务器响应速度
总结: LVS-TUN 是非常时候做负载均衡系统的。
反向代理-站点层
反向代理负载均衡是比较常见的负载均衡方案,一般的站点都会有反向代理负载均衡,它是工作在应用层的七层负载均衡方案。常见的就是基于 nginx 的实现方案。
优点:
- 丰富的调度策略,可根据后台服务器响应时间、负载情况、流量等做调度
- 可以根据 session 等应用层信息制定转发方案
缺点:
- 承受所有的流量,对带宽和性能要求高
- 工作在应用层处理效率低,需要处理 HTTP 协议层的各种信息包括 HTTP 头部信息,cookie 等
总结:
反向代理是常见的负载均衡方案,一般是必不可少的,一般用于配合 LVS 层负载均衡实现高可用的负载均衡架构。