nginx负载均衡算法

时间:2024-05-27 13:18:16编辑:小星

Nginx实现负载均衡

实现负载均衡可有以下算法: Nginx实现负载均衡的原理是利用Http重定向实现负载均衡 rpm 安装方式nginx配置文件地址 /etc/nginx/conf.d 目录下面,配置文件内容结构如下: 修改完配置文件以后,还需要输入重新加载配置命令: 我们从官网上面看一下负载均衡配置案例,然后根据案例配置去对每项参数进行解释,案例如下( 注意:以下模块内容必须放在http模块下 ): 从上面这个案例Nginx会作如下执行,默认情况下,请求使用 加权循环平衡法。 在上面的示例中,每 7 个请求将按如下方式分配: 5个请求去 backend1.example.com 向第二台和第三台服务器分别发送一个请求。 如果在与服务器通信过程中发生错误,请求将 被传递到下一个服务器,依此类推,直到所有的功能 服务器将被尝试。 如果无法从任何服务器获得成功的响应, 客户端将收到与最后一个服务器通信的结果。 语法: parameters类别: 商业版本需要付费的其他属性这里就不阐述了 1)轮训策略: upstream模块默认的负载均衡策略是轮训策略,它会依次在服务列表进行分发 2)加权策略: 容器会根据server设置的权重进行请求分配,例如server1 weight=5 ,server2 weight=2 将会使得每 7 个请求将按如下方式分配server1 5个请求,server2两个请求。 3)Ip哈希策略: 其中请求 根据客户端 IP 地址在服务器之间分布,确保来自同一客户端的请求将始终 传递到同一服务器。使用方法是在upstream模块下面添加ip_hash; 4)最少连接数策略(least_conn): 指定组应使用负载平衡方法,其中请求 传递给活动连接数最少的服务器, 考虑到服务器的权重。 如果有多个这样的服务器,它们会依次尝试使用 加权循环平衡法。 5)扩展策略(需要安装插件): 还有一些其他需要付费的策略这里就不进行阐述了,比如:最少时间策略( least_time)、随机策略等。

使用Nginx实现负载均衡

一、负载均衡的作用

1、转发功能

按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。

2、故障移除

通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器。

3、恢复添加

如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。

二、Nginx实现负载均衡

1、源地址哈希法:根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。

2、轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。

3、随机法:通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。

4、加权轮询法:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。

5、加权随机法:与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。

6、最小连接数法:由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。

三、配置说明







四、轮询







五、权重







六、iphash







七、最少链接







八、fair




九、完整代码







十、也可以使用域名


nginx负载均衡策略是什么?

当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,通过负载均衡的方式来分担服务器压力。建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。nginx实现反向代理负载均衡a、本地使用Windows系统,然后使用VirutalBox安装一个虚拟的Linux系统。在本地的Windows系统上分别安装nginx(侦听8080端口)和apache(侦听80端口)。在虚拟的Linux系统上安装apache(侦听80端口)。这样相当于拥有了1台nginx在前端作为反向代理服务器;后面有2台apache作为应用程序服务器(可以看作是小型的server cluster。;-));b、nginx用来作为反向代理服务器,放置到两台apache之前,作为用户访问的入口。以上内容参考:百度百科-反向代理负载均衡

nginx负载均衡原理

        负载均衡(Load Balance),它在网络现有结构之上可以提供一种廉价、有效、透明的方法来扩展 网络设备 和 服务器的带宽 ,并可以在一定程度上 增加吞吐量 、 加强网络数据处理能力 、提高 网络的灵活性 和 可用性 等。用官网的话说,它充当着网络流中“交通指挥官”的角色,“站在”服务器前 处理所有服务器端和客户端之间的请求 ,从而最大程度地 提高响应速率和容量利用率 ,同时 确保任何服务器都没有超负荷工作 。如果单个服务器出现故障, 负载均衡的方法会将流量重定向到其余的集群服务器,以保证服务的稳定性 。当新的服务器添加到服务器组后,也可通过负载均衡的方法使其开始自动处理客户端发来的请求。

负载均衡涉及到以下的基础知识。

a. Round Robin: 对所有的backend轮训发送请求,算是最简单的方式了,也是默认的分配方式;

b. Least Connections(least_conn): 跟踪和backend当前的活跃连接数目,最少的连接数目说明这个backend负载最轻,将请求分配给他,这种方式会考虑到配置中给每个upstream分配的weight权重信息;

c. Least Time(least_time): 请求会分配给响应最快和活跃连接数最少的backend;

d. IP Hash(ip_hash): 对请求来源IP地址计算hash值,IPv4会考虑前3个octet,IPv6会考虑所有的地址位,然后根据得到的hash值通过某种映射分配到backend;

e. Generic Hash(hash): 以用户自定义资源(比如URL)的方式计算hash值完成分配,其可选consistent关键字支持一致性hash特性;

       用户(浏览器)在和服务端交互的时候,通常会在本地保存一些信息,而整个过程叫做一个会话(Session)并用唯一的Session ID进行标识。会话的概念不仅用于购物车这种常见情况,因为HTTP协议是无状态的,所以任何需要逻辑上下文的情形都必须使用会话机制,此外HTTP客户端也会额外缓存一些数据在本地,这样就可以减少请求提高性能了。如果负载均衡可能将这个会话的请求分配到不同的后台服务端上,这肯定是不合适的,必须通过多个backend共享这些数据,效率肯定会很低下,最简单的情况是保证会话一致性——相同的会话每次请求都会被分配到同一个backend上去。

        出问题的backend要能被及时探测并剔除出分配群,而当业务增长的时候可以灵活的添加backend数目。此外当前风靡的Elastic Compute云计算服务,服务商也应当根据当前负载自动添加和减少backend主机。

        通常现代的网络服务者一个域名会关连到多个主机,在进行DNS查询的时候,默认情况下DNS服务器会以round-robin形式以不同的顺序返回IP地址列表,因此天然将客户请求分配到不同的主机上去。不过这种方式含有固有的缺陷:DNS不会检查主机和IP地址的可访问性,所以分配给客户端的IP不确保是可用的(Google 404);DNS的解析结果会在客户端、多个中间DNS服务器不断的缓存,所以backend的分配不会那么的理想。

转自 https://blog.csdn.net/weixin_43694144/java/article/details/84098906


上一篇:正韩高丽参

下一篇:哪里看黄褐斑好