13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

分布式--Nginx 负载均衡服务器

分布式--nginx 负载均衡服务器

作者:凌浩雨 2019-03-27 08:43:17

服务器

分布式 ginx是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强。

成都创新互联公司欢迎来电:13518219792,为您提供成都网站建设网页设计及定制高端网站建设服务,成都创新互联公司网页制作领域十多年,包括自上料搅拌车等多个方面拥有丰富的网站制作经验,选择成都创新互联公司,为网站锦上添花。

本文转载自微信公众号凌浩雨。作者已授权。转载本文请联系凌浩雨公众号。

1. Nginx

1). 学习资源

Nginx 中文文档

Nginx 配置

2). Nginx

Nginx是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强。Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 是由俄罗斯人 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor Sysoev 在建立的项目时,使用基于 BSD 许可。

3). Nginx 特点

Nginx 做为 HTTP 服务器,有以下几项基本特性:

Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 。它支持内核 Poll 模型,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。

Nginx 具有很高的稳定性。其它 HTTP 服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。例如当前 apache 一旦上到 200 个以上进程,web响应速度就明显非常缓慢了。而 Nginx 采取了分阶段资源分配技术,使得它的 CPU 与内存占用率非常低。Nginx 官方表示保持 10,000 个没有活动的连接,它只占 2.5M 内存,所以类似 DOS 这样的对 Nginx 来说基本上是毫无用处的。就稳定性而言,Nginx 比 lighthttpd 更胜一筹。

Nginx 支持热部署。它的启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。

Nginx 采用 master-slave 模型,能够充分利用 SMP 的优势,且能够减少工作进程在磁盘 I/O 的阻塞延迟。当采用 select()/poll() 调用时,还可以限制每个进程的连接数。

Nginx 代码质量非常高,代码很规范,手法成熟,模块扩展也很容易。特别值得一提的是强大的 Upstream 与 Filter 链。Upstream 为诸如 reverse proxy,与其他服务器通信模块的编写奠定了很好的基础。而 Filter 链最酷的部分就是各个 filter 不必等待前一个 filter 执行完毕。它可以把前一个 filter 的输出做为当前 filter 的输入,这有点像 Unix 的管线。这意味着,一个模块可以开始压缩从后端服务器发送过来的请求,且可以在模块接收完后端服务器的整个请求之前把压缩流转向客户端。

Nginx 采用了一些 os 提供的新特性如对 sendfile (Linux2.2+),accept-filter (FreeBSD4.1+),TCP_DEFER_ACCEPT (Linux 2.4+)的支持,从而大大提高了性能。

4). 反向代理

代理就是一个代表、一个渠道,此时就设计到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程。

I. 正向代理典型的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。

II. 多个客户端给服务器发送的请求,nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,nginx扮演的就是一个反向代理角色。反向代理,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息!网站中大部分功能也是直接使用nginx进行反向代理实现的,通过封装nginx和其他的组件之后起了个高大上的名字:Tengine

III. 通常情况下,我们在实际项目操作时,正向代理和反向代理很有可能会存在在一个应用场景中,正向代理代理客户端的请求去访问目标服务器,目标服务器是一个反向单利服务器,反向代理了多台真实的业务处理服务器。具体的拓扑图如下:

5). 负载均衡

客户端发送的、nginx反向代理服务器接收到的请求数量(负载量),请求数量按照一定的规则进行分发到不同的服务器处理的规则(均衡规则),将服务器接收到的请求按照规则分发的过程,称为负载均衡。

负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种,硬件负载均衡也称为硬负载,如F5负载均衡,相对造价昂贵成本较高,但是数据的稳定性安全性等等有非常好的保障,如中国移动中国联通这样的公司才会选择硬负载进行操作;更多的公司考虑到成本原因,会选择使用软件负载均衡,软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制。

负载均衡调度算法方式如下:

6). Windows安装

I. Nginx 下载 并解压

II. 双击nginx.exe, 浏览器访问http://localhost/即可

III. 命令行开启

  
 
 
 
  1. nginx 

IV. 命令行关闭

  
 
 
 
  1. # 强制停止nginx服务器,如果有未处理的数据,丢弃 
  2. nginx -s stop 
  3. # 优雅的停止nginx服务器,如果有未处理的数据,等待处理完成之后停止 
  4. nginx -s quit 

7). nginx配置

nginx服务器的配置信息主要集中在nginx.conf这个配置文件中(\nginx-1.14.0\conf\nginx.conf)

  
 
 
 
  1. main                                # 全局配置 
  2.  
  3. events {                            # nginx工作模式配置 
  4.  
  5.  
  6. http {                                # http设置 
  7.     .... 
  8.  
  9.     server {                        # 服务器主机配置 
  10.         .... 
  11.         location {                    # 路由配置 
  12.             .... 
  13.         } 
  14.  
  15.         location path { 
  16.             .... 
  17.         } 
  18.  
  19.         location otherpath { 
  20.             .... 
  21.         } 
  22.     } 
  23.  
  24.     server { 
  25.         .... 
  26.  
  27.         location { 
  28.             .... 
  29.         } 
  30.     } 
  31.  
  32.     upstream name {                    # 负载均衡配置 
  33.         .... 
  34.     } 

I. main模块

  
 
 
 
  1. # user nobody nobody; 
  2. worker_processes 2; 
  3. # error_log logs/error.log 
  4. # error_log logs/error.log notice 
  5. # error_log logs/error.log info 
  6. # pid logs/nginx.pid 
  7. worker_rlimit_nofile 1024; 

II. event 模块

  
 
 
 
  1. event { 
  2.     worker_connections 1024; 
  3.     multi_accept on; 
  4.     use epoll; 

worker_connections 指定可以同时接收的连接数量的上限,这里一定要注意,上限连接数量是和worker processes共同决定的。

multi_accept 配置指定nginx在收到一个新连接通知后尽可能多的接受更多的连接

use epoll 配置指定了线程轮询的方法,如果是linux2.6+,使用epoll;如果是BSD如Mac请使用Kqueue

III. http模块

作为web服务器,http模块是nginx最核心的一个模块,配置项也是比较多的,项目中会设置到很多的实际业务场景,需要根据硬件信息进行适当的配置,常规情况下,使用默认配置即可!

  
 
 
 
  1. http { 
  2.     ## 
  3.     # 基础配置 
  4.     ## 
  5.  
  6.     sendfile on; 
  7.     tcp_nopush on; 
  8.     tcp_nodelay on; 
  9.     keepalive_timeout 65; 
  10.     types_hash_max_size 2048; 
  11.     # server_tokens off; 
  12.  
  13.     # server_names_hash_bucket_size 64; 
  14.     # server_name_in_redirect off; 
  15.  
  16.     include /etc/nginx/mime.types; 
  17.     default_type application/octet-stream; 
  18.  
  19.     ## 
  20.     # SSL证书配置 
  21.     ## 
  22.  
  23.     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE 
  24.     ssl_prefer_server_ciphers on; 
  25.  
  26.     ## 
  27.     # 日志配置 
  28.     ## 
  29.  
  30.     access_log /var/log/nginx/access.log; 
  31.     error_log /var/log/nginx/error.log; 
  32.  
  33.     ## 
  34.     # Gzip 压缩配置 
  35.     ## 
  36.  
  37.     gzip on; 
  38.     gzip_disable "msie6"; 
  39.  
  40.     # gzip_vary on; 
  41.     # gzip_proxied any; 
  42.     # gzip_comp_level 6; 
  43.     # gzip_buffers 16 8k; 
  44.     # gzip_http_version 1.1; 
  45.     # gzip_types text/plain text/css application/json application/javascript 
  46.     text/xml application/xml application/xml+rss text/javascript; 
  47.  
  48.     ## 
  49.     # 虚拟主机配置 
  50.     ## 
  51.  
  52.     include /etc/nginx/conf.d/*.conf; 
  53.     include /etc/nginx/sites-enabled/*; 

=> 基础配置

=> 日志配置

=> SSL证书加密

=> 压缩配置

=> 文件缓存配置

IV. server模块

srever模块配置是http模块中的一个子模块,用来定义一个虚拟访问主机,也就是一个虚拟服务器的配置信息

  
 
 
 
  1. server { 
  2.     listen 80; 
  3.     server_name localhost 192.168.1.100; 
  4.     root /nginx/www; 
  5.     index        index.php index.html index.html; 
  6.     charset        utf-8; 
  7.     access_log    logs/access.log; 
  8.     error_log    logs/error.log; 
  9.     ...... 

V. location模块

location模块是nginx配置中出现最多的一个配置,主要用于配置路由访问信息。在路由访问信息配置中关联到反向代理、负载均衡等等各项功能,所以location模块也是一个非常重要的配置模块

=> 基本配置

  
 
 
 
  1. location / { 
  2.     root    /nginx/www; 
  3.     index    index.php index.html index.htm; 

=> 反向代理配置方式

通过反向代理代理服务器访问模式,通过proxy_set配置让客户端访问透明化

  
 
 
 
  1. location / { 
  2.     proxy_pass http://localhost:8888; 
  3.     proxy_set_header X-real-ip $remote_addr; 
  4.     proxy_set_header Host $http_host; 

=> uwsgi配置

wsgi模式下的服务器配置访问方式

  
 
 
 
  1. location / { 
  2.     include uwsgi_params; 
  3.     uwsgi_pass localhost:8888 

VI. upstream模块

upstream模块主要负责负载均衡的配置,通过默认的轮询调度方式来分发请求到后端服务器。简单的配置方式如下:

  
 
 
 
  1. upstream name { 
  2.     ip_hash; 
  3.     server 192.168.1.100:8000; 
  4.     server 192.168.1.100:8001 down; 
  5.     server 192.168.1.100:8002 max_fails=3; 
  6.     server 192.168.1.100:8003 fail_timeout=20s; 
  7.     server 192.168.1.100:8004 max_fails=3 fail_timeout=20s; 

名称栏目:分布式--Nginx 负载均衡服务器
网站网址:http://cdbrznjsb.com/article/dhgesde.html

其他资讯

让你的专属顾问为你服务