极智开发 | 讲解 Nginx 特性之二:负载均衡

欢迎关注我的公众号 [极智视界],获取我的更多笔记分享

  大家好,我是极智视界,本文讲解一下 Nginx 特性之二:负载均衡。

  Nginx,也即 engine x,是一个高性能的 http 和 反向代理的 web 服务器,同时也提供了 IMAP / POP3 / SMTP 服务。Nginx 有三大特性:反向代理负载均衡动静分离。这里我们分三篇来分别进行讲解,这里是第二篇:负载均衡,要学习 反向代理 的同学可以移步 《极智开发 | 讲解 Nginx 特性之一:反向代理》。

1. Nginx 负载均衡介绍

负载均衡 是应对 网站 Client 端高请求、调整 Server 端计算均衡的解决方案。在如今的电商、互联网场景下,用户数量十分巨大,高并发 无处不在,为了提高系统整体性能,一般都要用 集群 进行分布式部署,即 将同一个应用部署到多个服务器上,织成 计算集群,形成如下架构:

备注:虽然这里只画了 3个 Client & 3 个 Server,但是你完全可以想象成有很多很多 Client,还有不只 3 台 Server。

  这个时候的 代理 (Proxy) 还是个 反向代理中间商,只不过这个 中间商 不只是简单的 请求 / 连接 Server 服务器,还可以 均衡 Server 服务器的计算承载

  Nginx 服务器的负载均衡策略可以分为:内置策略扩展策略 两大类,其中 内置策略主要包含轮询、加权轮询、IP Hash;而 扩展策略主要通过第三方模块实现,如 url hash、fair 等

  拿 加权轮询 来说,这个时候可以引入一个 weight 的概念,对于计算能力富余一些的 Server 服务器可以把负载权重赋大一些,把计算能力捉襟一些的 Server 服务器的负载权重稍微调小一些,这样的架构差不多可以这么表现:

  通过 weight 可以控制 负载均衡

2. Nginx 负载均衡实践

  还是来看 config/nginx.conf

  Nginx 对于用户使用来说,我一直觉得是一个 挺简单的 东西,因为你只要 关注 / 修改 conf/nginx.conf 配置文件,就能满足大部分的应用需求。我们来看:

########################### 全局配置块 #########################
# nginx 服务器全局运行配置
# user  nobody;     # 配置运行 nginx 服务器的用户 (组)
worker_processes  1;    # nginx 服务器并发处理服务的配置,值越大,可以支持的并发处理服务越多


########################### EVENTS配置块 #########################
# 配置 nginx 服务器与用户的网络连接
events {
    worker_connections  1024;     # 配置可以同时支持的最大连接数
}

########################### HTTP配置块 #########################
# 配置代理、缓存、日志等绝大多数功能和第三方模块
http {
	###################### HTTP全局块 #########################
	# 配置包括 文件引入、MIME-TYPE定义、日志定义、连接超时等
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
    # gzip  on;
    
    ###################### HTTP SERVER块 #########################
    # 配置HTTP连接虚拟主机
    # 每个HTTP块可以有多个SERVER块,每个SERVER块就是一个虚拟主机
    server {
        listen       88;     # 自定义端口
        server_name  localhost;

        location / {
            root   ~/nginx/html/dist;       # 实际写成绝对路径
            index  index.html index.htm;
            try_files $uri $uri /index.html;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

  来看 Nginx 反向代理 使用 加权轮询 进行负载均衡 的实例:Client 端访问 www.test.com,使用 Nginx 进行反向代理转发,同一个应用使用 tomcat 部署在三台服务器 (Server) 上,Nginx 需要根据 三台服务器 计算承载能力 赋 不同的权重。这个例子的 nginx.conf 如下:

# 负载均衡 
upstream test{     
  server 192.168.0.110:8081 weight=2;
  server 192.168.0.111:8081 weight=3;
  server 192.168.0.112:8081 weight=1;
}

server {
    listen       80;
    server_name  localhost;
    
    location / {
		root   html;
		index  index.html index.htm;
		proxy_pass  http://www.test.com;    # 代理转发
    }
}

  解释一下,以上给 server 192.168.0.111:8081 赋了 权重3,给 server 192.168.0.110:8081 赋了 权重2 ,给 server 192.168.0.112:8081 赋了 权重1,这样相当于 如 前端来了 6 次请求,则会分配给 server 192.168.0.111:8081 3次,分配给 server 192.168.0.110:8081 2次,分配给 server 192.168.0.112:8081 1次,加起来就是 6 次,这样的话 就不是没做 负载均衡 前的 等概率访问了。

  当然,这里也只是讲了 Nginx 中的 加权轮询 的例子,其他就先不多说了。

  好了,以上分享了 讲解 Nginx 特性之二:负载均衡。希望我的分享能对你的学习有一点帮助。



 【公众号传送】

《极智开发 | 讲解 Nginx 特性之二:负载均衡》


logo_show.gif

猜你喜欢

转载自juejin.im/post/7123187779017637919