分布式系统系列--(二)使用Nginx实现负载均衡

Nginx负载均衡

Nginx是一款轻量级的web服务器/反向代理服务器以及电子邮件代理服务器,并在BSD协议下发行,可以在Unit、GNU/Linux、BSD、macos x、windows等操作系统中运行。其特点是占有内存少,高性能,并发能力强(10k并发),并且还能够提供强大的反向代理功能,它的并发能力在同类型的网络服务器中表现很好。
基于反向代理的功能,Nginx作为负载均衡主要有以下几点理由:

  • 高并发连接
  • 内存消耗少
  • 配置文件非常简单
  • 支持Rewrite重写规则
  • 内置的健康监测功能
  • 节省带宽
  • 稳定性高

正向代理和反向代理

正向代理
正向代理类似一个跳板机,代理访问外部资源。(客户端->正向代理服务器->互联网->正向代理服务器->客户端)
反向代理
实际运行方式是指代理服务器来接受Internet互联网上的连接请求,然后将请求转发给内部网络上的服务器(也就是说反向代理服务器与内网的服务器在同一个内网中,它是客户端访问内网的入口),并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。(客户端->反向代理服务器->内网服务器->反向代理服务器->客户端)
反向代理的作用:

  • 保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击。大型网站,通常将反向代理作为公网范文地址,web服务器是内网。
  • 负载均衡,通过反向代理服务器来优化网站的负载。

Nginx负载均衡的4种方案配置

  1. 轮询
    轮询即Round Robin,这是Nginx默认的配置策略。根据Nginx配置文件中的顺序,依次把客户端的web请求分发到不同的后端服务器上。
    它的配置文件如下:
user www-data;
worker_processes auto;
pid/run/nginx.pid;

events{
        #epoll是Linux上的事件模型,如果是其他系统,请注释掉
	use epoll;
	worker_connections 65535;
}

http{
        # 指定被反向代理转发的网址以及负载均衡后的IP+port
	upstream www.young.com {
		server 127.0.0.1:8881;
		server 127.0.0.1:8882;
		server 127.0.0.1:8883;
	}

	server{
		listen 80;
                 #指定虚拟主机的地址,通常是用户访问的网址
		server_name www.young.com;

		location / {
                         # 指定反向代理的网址
			proxy_pass http://www.young.com;
			proxy_set_header Host $host;
			proxy_set_header X-Real-Ip $remote_addr;
		}
	}
}

注意:需要在本机的hosts中添加"127.0.0.1 www.young.com"的网址映射。

注意事项

  • 在http的配置项中配置负载均衡策略,如果不写,默认为轮询模式
  • Nginx负载均衡支持http和https协议,只需要修改proxy_pass后协议即可。
  • Nginx支持FastCGI,SCGI,uwsgi,memcached的负载均衡,只需将proxy_pass改为fastcgi_pass,uwsgi_pass,scgi_pass,memcached_pass即可。
  • 轮询策略适合服务器配置相当,无状态且短平快的服务使用
  1. 最少连接least_conn
    web请求会被转发到连接数最少的服务器上。它适合请求处理时间长短不一造成服务器过载的情况。配置时需要在upstream中添加least_conn;即开启此策略。

  2. IP地址哈希
    上边的两种负载均衡方案中,同一客户端连接的web请求可能会被分发到不同的后端服务器进行处理,因此会涉及到会话session,因为不同服务器的会话session是不一样的,所以要想识别当前请求是否与上次会话为同一用户,那么需要将session会话保存在Redis、memcached、MySQL等缓存服务器上去。而另外一种解决session一致的方法就是使用IP地址哈希的分发方案,使同一用户的请求一直被分发到同一服务器。
    配置文件中,在upstream中添加ip_hash的配置参数即开启了此策略。
    注意事项

  • 它使用ip_hash指令定义
  • Nginx使用客户端的ip地址进行哈希计算,确保使用同一个服务器响应请求。
  • 此策略适合有状态服务,比如session。
  1. 基于权重的分发
    对不同的服务器设置不同的权重,权重越高接收到的请求数量越多。配置文件中,在upstream的每个server后边添加weight=权重值即可。
    注意事项
  • 权重越高分配到需要处理的请求越多。
  • 它可以与最少连接负载和ip哈希策略结合使用。
  • 它适合服务器硬件配置差别比较大的情况。

关于Nginx具体的配置文件的参数说明,请看下一节分布式系统系列--(三)Nginx配置文件的相关参数说明

posted @ 2020-09-23 17:47  爪哇洋  阅读(480)  评论(0编辑  收藏  举报