nginx的基础应用(续)

简介: nginx的基础应用(续)一、简介上一篇文章我们介绍了nginx的基础应用,其中讲到了nginx作为代理服务器的使用,但是漏了一个重要的,也是使用非常普遍的特性——负载均衡。

nginx的基础应用(续)

一、简介

上一篇文章我们介绍了nginx的基础应用,其中讲到了nginx作为代理服务器的使用,但是漏了一个重要的,也是使用非常普遍的特性——负载均衡。今天,我们将这段内容补上。

通过多个实例进行负载均衡是一个比较常用的技术,它用来是资源利用最大化、提高通过率、降低延迟响应、确保容灾等。

二、负载均衡的方法

  • 轮询——应用服务器间的请求按照轮询的方式分配;
  • 最小连接数——下一个请求将会分配给当前连接数最小的服务器;
  • ip哈希——以一种哈希的方式决定下一个请求分配到哪个服务器上(基于客户端的ip进行哈希)。

三、默认的负载均衡配置

nginx最简单的负载均衡配置如下:

http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp1;
        }
    }
}

上面的例子中,有3个相同的实例运行在srv1-srv3上。当负载均衡的方法没有特别指定时,它将默认使用轮询的方式。所有的请求都会被代理到服务组myapp1上,nginx将应用HTTP的负载均衡分配请求。

nginx的反向代理实现包含负载均衡的种类:HTTP、HTTPS、FastCGI、uwsgi、SCGI和缓存等。

如果要用HTTPS的负载均衡,只需要使用HTTPS的协议即可。

当为FastCGI、uwsgi、SCGI和缓存设置负载均衡时,使用相应的fastcgi_pass、uwsgi_pass、scgi_pass和memcached_pass的指令集即可,这里不做详细介绍。

四、最小连接负载均衡

另外一个负载连接方式是最小连接。最小连接的方式可以使应用实例间的负载更公平,例如在一些请求需要花费更长时间去完成的情况。

使用最小连接的方式,nginx不会将过多的请求分配到一个比较忙的应用服务上,它将把请求分配到相对不忙的应用服务上。

最小连接的负载均衡方式在nginx中的配置如下,它作为服务组中的一个配置出现:

upstream myapp1 {
        least_conn;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

五、会话保持的方式

在介绍这种方式之前,大家先记住,使用轮询和最小连接的负载均衡方式,同一客户端的下一个请求有可能分配到不同的应用服务上。这两种方式不能保证同一客户端的请求总是分配到同一个服务上。

如果需要将一个客户端绑定到一个特殊的应用服务上,换句话说,使客户端的会话“粘连”或“保持”,就要使用“ip-hash”的负载均衡机制了。

使用ip-hash,客户端的ip用来做哈希的key,决定着选择服务组中的哪个应用服务这个客户端的请求。这种方法决定了相同客户端的请求总是分配给相同的服务,除非这个服务不可用了。

配置ip-hash的负载均衡,只需要将ip-hash指令添加到服务组(upstream)中,如下:

upstream myapp1 {
    ip_hash;
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
}

六、负载均衡的权重

通过使用服务权重,可以进一步影响负载均衡的逻辑。上面的例子中,没有配置权重的意思是,所有指定的服务将被看做有相同的权重。

采用轮询的方式,如果有足够的请求,并且请求通过统一的方式处理并且快速的完成的情况下,它仍然意味着在服务之间或多或少的公平的分配。

当weight参数为一个服务指定时,它将是负载均衡过程中的一部分。

upstream myapp1 {
        server srv1.example.com weight=3;
        server srv2.example.com;
        server srv3.example.com;
    }

上面的配置中,每5个应用请求将分配如下:3个请求分配个srv1,1个请求分配给srv2,另一个请求分配给srv3。在nginx最近的版本中,在最小连接和ip-hash的负载均衡方式中使用权重(weight)也是有可能的。

七、健康检查

nginx的反向代理包括带内(或被动)的健康检查。如果一个服务的响应是失败的,nginx将会标记这个服务是失败的,并且在短暂的时间内,避免为下一个请求选择这个服务。

max_fails指令设置是,在fail_timeout时间内,尝试和这台服务连续通信失败的次数。默认情况下,max_fails设置为1,当设置为0时,这个服务的健康检查将失效。fail_timeout参数定义了这个服务多长时间会被标记为失效,在服务失败的fail_timeout间隔后,nginx使用活的客户端请求优雅的探测服务,如果探测成功了,这个服务将会标记为成功的。

至此,nginx用的最多的,也是最常用的部分——负载均衡 讲完了,欢迎大家拍砖~~

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
11天前
|
Kubernetes 应用服务中间件 nginx
百度搜索:蓝易云【使用Kubernetes部署Nginx应用教程】
现在,你已经成功在Kubernetes集群上部署了Nginx应用。通过访问Service的外部IP地址,你可以访问Nginx服务。
48 4
|
11天前
|
安全 应用服务中间件 nginx
百度搜索:蓝易云【使用Debian、Docker和Nginx部署Web应用教程】
这些是在Debian上使用Docker和Nginx部署Web应用的基本步骤。根据您的需求和具体环境,可能还需要进行其他配置和调整。请确保在进行任何与网络连接和安全相关的操作之前,详细了解您的网络环境和安全需求,并采取适当的安全措施。
49 0
|
6月前
|
应用服务中间件 nginx Windows
windows下DOS命令杀掉Nginx应用进程
windows下DOS命令杀掉Nginx应用进程
|
9月前
|
缓存 前端开发 应用服务中间件
|
3天前
|
Java 关系型数据库 Docker
docker打包部署spring boot应用(mysql+jar+Nginx)
docker打包部署spring boot应用(mysql+jar+Nginx)
|
11天前
|
运维 Serverless 应用服务中间件
Serverless 应用引擎产品使用之在阿里云Serverless中函数计算FC nginx 部署上去之后放置静态页面如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
268 0
|
11天前
|
Java 应用服务中间件 网络安全
Nginx配置静态页面+springboot应用+swagger+SSL的实现
Nginx配置静态页面+springboot应用+swagger+SSL的实现
|
11天前
|
负载均衡 应用服务中间件 nginx
Nginx四层负载均衡在秒杀系统中的应用
Nginx四层负载均衡在秒杀系统中的应用
31 0
|
11天前
|
负载均衡 应用服务中间件 nginx
Nginx负载均衡选择在秒杀系统中的应用
Nginx负载均衡选择在秒杀系统中的应用
52 0
|
11天前
|
NoSQL 关系型数据库 应用服务中间件
redis,memcached,nginx网络组件,网络编程——reactor的应用
目标 明白网络模块要处理那些事情 reactor 是怎么处理这些事情的 reactor 如何封装的 网络模块与业务逻辑的关系 如何优化 reactor 网络编程关注的问题
56 1