负载均衡概述
早期的网站流量和业务功能都比较简单,单台服务器足以满足基本的需求,但是随着互联网的发展,业务流量越来越大并业务逻辑也跟着越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因次需要多台服务器进行性能的水平扩展及避免单点故障出现。那么如何将不同用户的请求流量分发到不同的服务器上呢
单点机器出现的问题
1、服务端接收请求的时候,超出了最高的并发处理能力,就会出现处理请求的速度非常慢,或者直接把服务器压垮,出现宕机的情况
2、服务端如果宕机了,该如何解决
因此需要多部署几台服务器,来解决以上的问题
负载均衡
1、负载均衡的原理及处理流程
系统的扩展可以分为纵向扩展和横向扩展
纵向扩展是从单机的角度出发,通过增加系统的硬件处理能力来提升服务器的处理能力
横向扩展是统计添加机器来满足大型网站的服务处理能力
负载均衡器,负责的是根据算法把请求分发到不同的服务器上
上图涉及到两个重要的角色分别是 应用集群 和 负载均衡器
应用集群: 将同一应用部署到多台机器上,组织处理集群,接收负载均衡设备分发的请求,进行处理并返回响应的数据
负载均衡器: 将用户访问的请求根据对应的负载均衡算法,分发到集群中的一台服务器进行处理。
负载均衡的作用:
1、解决服务器的高并发压力,提供应用程序的处理性能
2、提供故障转移,实现高可用
3、通过添加或减少服务器数量,增强网站的可扩展性
4、在负载均衡器上进行过滤,可以提高系统的安全性
2、负载均衡常用的处理方式
方式1 用户手动选择:
这种方式比较原始,主要的实现方式就在网站主页上面提供不同线路,不同服务器链接方式,让用户来选择自己访问的具体服务器,来实现负载均衡
方式2 DNS 轮询方式
DNS
域名系统(服务)协议(DNS)是一种分布式网络目录服务,主要用于域名与IP地址的相互转换
大多域名注册商都支持同一个主机名添加多条A记录(一个域名可以绑定多个IP地址),这就是DNS轮询,DNS服务器将解析请求按照 A记录的顺序,随机分配到不同的IP上,这样就能完成简单的负载均衡。DNS轮询的成本非常低,在一些不重要的服务器,经常被使用。
2.1 四/七 层负载均衡
介绍 四/七层负载均衡前,我们先了解一个概念 OSI (open system interconnection), 叫开发式系统互联模型,这个是由国际标准化组织ISO指定的一个不基于具体机型、操作系统或公司的网络体系结构。该模型将网络通信的工作分为七层
所谓 四层负载均衡指的是 OSI 七层模型中的传输层,主要是基于 IP+PORT 的负载均衡
硬件贵
实现四层 负载均衡的方式:
硬件: F5 BIG-IP Radware 等
软件: LVS、Nginx、Hayproxy 等
所谓的七层负载均衡 指的是在应用层,主要是基于虚拟的URL 或主机IP的负载均衡
实现七层负载均衡的方式:
软件:Nginx、Hayproxy等
四层 和 七层负载均衡的区别
四层负载均衡数据包是在底层进行了分发,而七层负载均衡数据包则在最顶端进行分发,所以四层负载均衡的效率比七层负载均衡的要高。
四层负载均衡不识别域名,而七层负载均衡识别域名
2.2 Nginx 七层负载均衡
Nginx要实现7层负载均衡需要用到 proxy_pass代理模块配置。Nginx默认安装支持这个模块,我们不需要再做任何处理。Nginx的负载均衡是在Nginx的反向代理基础上把用户的请求根据指定的算法分到一组【upstream 虚拟服务池】。
Nginx 七层负载均衡的指令
该指令是用来定义一组服务器,它们可以是监听不同端口的服务器,并且也可以是同时监听TCP 和 Unix socket的服务器。服务器可以指定不同的权重,默认为1。
- upstream 指令
语法 upstream name {
....}
默认值 -
位置 http
- server 指令
该指令用来指定后端服务器的名称和一些参数,可以使用 域名、IP、端口或者 unix socket
语法 server name [paramerters]
默认值 -
位置 upstream
负载均衡配置:
backend 为服务器组