• Nginx三大功能及高并发分流


    Nginx三大功能及高并发分流

    一、什么是Nginx

    Nginx(engine x)是一个高性能的HTTP和反向代理服务器,具有内存少,高并发能力的特点。

    1. 处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。
    2. 无缓存的反向代理加速,简单的负载均衡和容错。

    Nginx -- 代理服务器/高性能的负载均衡器

    二、Nginx的三大功能

    1、反向代理功能(核心功能,其他功能的依托,其实就是请求转发)

    根据用户请求Url路径,在nginx的配置文件nginx.conf里配置匹配规则及转发规则,然后将请求转发给具体的微服务(或本地的静态资源、或本地lua脚本)进行处理(根据Url路径请求转发)。
    反向代理

    2、负载均衡功能(分流)

    负载就是问题,高并发问题。均衡就是解决手段。高并发请求对单一微服务造成极大的压力,要使这个高并发请求能够平稳的处理,需要增加节点,直到能处理并发量问题为止。怎么控制节点?使用Nginx的负载均衡策略来控制。在Nginx的核心文件nginx.conf中配置好负载均衡策略,请求压力就下降了,过去压力一直在某一个服务上,现在压力分摊到每一个微服务。负载均衡策略一般常用的有轮询、权重,默认的是轮询,使用最多的是权重。
    负载均衡

    请求转发-->负载均衡(分流)
    简单来说就是分流:使用nginx请求转发到目标服务器(Tomcat),当并发请求量过大,一个Tomcat不足以承担大量请求,可以做横向扩容(copy多个Tomcat服务器,配置不同请求端口),使用nginx进行负载均衡配置。

    nginx的5种负载均衡策略
    • 轮询(默认)
      每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
    upstream backserver { 
    		server 192.168.1.108; 
    		server 192.168.1.109; 
    } 
    
    • 权重(常用)
      指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
    upstream backserver { 
    		server 192.168.1.108 weight=7; 
    		server 192.168.1.109 weight=10; 
    } 
    
    • IP绑定 ip_hash
      每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
    upstream backserver { 
    		ip_hash; 
    		server 192.168.1.108:8080; 
    		server 192.168.1.109:8088; 
    } 
    
    • fair(第三方)
      按后端服务器的响应时间来分配请求,响应时间短的优先分配。
    upstream backserver { 
    		server server1; 
    		server server2; 
    		fair; 
    } 
    
    • url_hash(第三方)
      按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
    upstream backserver { 
    		server squid1:3128; 
    		server squid2:3128; 
    		hash $request_uri; 
    		hash_method crc32; 
    }
    

    3、Nginx动静分离(作为静态资源服务器)

    Nginx不但可以存储静态资源还能运行,把静态资源存放到Nginx中,Nginx不需重启就可以运行静态资源,只要页面不是jsp这种动态刷新的数据,面里改的东西就会立即生效(jsp本质是个Servlet,需要编译)。利用Nginx静态资源服务器的功能运行静态资源,Nginx比tomcat的性能要高很多,本质上是因为Nginx的并发处理能力强(5万-10万之间),另外它做静态资源处理内部也做了一些优化,请求的时候网络方面的优化 比tomcat要做得好。

    动态资源文件:http:-->tomcat-->DB-->json-->浏览器
    静态资源文件:css、js、html、png、jpg ...
    静态资源服务器

    (1)Linux安装Nginx

    很多公司Nginx直接安装在服务器上,因为安装服务器上性能更高(不安装在docker中)。

    nginx启动:进入到nginx的sbin目录,启动nginx./nginx &或者直接usr/local/nginx/sbin/nginx &
    nginx重启:./nginx -s reload
    nginx停止:./nginx -s stop
    查看nginx是否启动成功./nginx -t
    查看nginx进程:ps -ef|grep nginx

    Tomcat启动:
    cd /usr/local/tomcat/tomcat-8081/bin/
    sh startup.sh &

    (2)nginx.conf

    用java的方法讲解nginx.conf:

    动态请求

    在这里插入图片描述

    listen			80 
    server_name		www.congyi.com
    可以理解为java中的Controller上的@RequestMapping拦截80路径 
    
    location / {
    	......
    }
    可以理解为java中的方法上的路径,花括号中的可以理解为代码块
    
    静态资源

    如果是静态资源,比如http://192.168.42.11:80/order.css,那么会访问第二个

    location ~ .*.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
    	......
    }
    

    在这里插入图片描述

    域名映射

    进入到 C:WindowsSystem32driversetchosts 或者直接在运行中搜索 C:WINDOWSsystem32driversetc
    域名映射

    在hosts文件中配置ip与域名映射,例如:127.0.0.1 congyi.com

    三、Nginx高可用

    高可用集群指当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务。高可用集群适用于单个节点发生故障时,能够自动将资源、服务进行切换,这样可以服务一直在线。
    在这个过程中,对于客户端来说是透明的。

    小建议:如果在项目中用到了nginx,那么请尽量把你的服务做成高可用的。
    在这里插入图片描述

    有主nginx和从nginx,当主nginx挂掉了,那么从nginx会启用,但是之前配置的主nginx的域名与ip的映射就失效了,这时候就需要更改hosts的映射配置为从nginx的ip。这时候就用到了keepalived开放虚拟ip,监听nginx,保证nginx24小时不间断运行。

    什么是Keepalived

    Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。

    keepalived+mysql
    keepalived+nginx

    如何使用 keepalived+nginx 实现高可用

    现在假设有主、从两个nginx服务,即在两个不同的ip服务器上,同时每台服务器上安装了keepalived。
    监听软件:keepalived -- 监听 nginx
    keepalived会提供一个虚拟ip映射主从nginx的不同ip。

    现在看一下主服务器上keepalived的配置:
    cd /etc/keepalived/
    vim keepalived.conf
    在这里插入图片描述

    脚本
    在这里插入图片描述

    那么我们来测一下keepalived是否能成功执行这个脚本,首先要在nginx未启动的情况下进行测试,使用命令ps aux|grep nginx查看一下nginx的状态,如果nginx是启动的那么先停掉他usr/local/nginx/sbin/nginx -s stop。之后就可以启动keepalived进行测试了。
    keepalived的启动命令和nginx的相同,进入到安装目录对应sbin目录下启动:./keepalived &
    再次查看nginx状态,验证keepalived是否成功执行脚本重启了nginx。

    以上是主节点master的配置及操作,下面是从节点backup配置:
    在这里插入图片描述

    主从节点的keepalived目录结构、脚本文件、指向的虚拟ip是一样的。

    按上述主节点操作启动从节点的keepalived。
    现在主、从节点都启动了,之后联网访问域名,访问到的是主节点master,然后把主节点的keepalived和nginx干掉,再次访问域名,如果还能成功访问,则验证了nginx的高可用配置是成功的。

    ps:关于查看nginx进程的问题

    在敲命令查看nginx服务进程的时候会发现有两个nginx的进程,一个master、一个worker,master只有一个,worker可以有多个。其中master可以理解为"项目经理",worker理解为我们的程序员(打工人),当有多个请求时,一个worker干不过来,这时候就向master,也就是我们的项目经理申请再招聘一个worker。
    在这里插入图片描述

    我们可以去验证一下:
    进入到vim /usr/local/nginx/conf/nginx.conf,修改worker_prosses为2个:
    在这里插入图片描述

    再次查看nginx进程发现有两个worker:
    在这里插入图片描述

  • 相关阅读:
    微信读书分享组队群
    骚操作!利用百度首页换肤的图片上传 API 做图床
    application/json和application/x-www-form-urlencoded使用选择
    通过类名或者jar名查询所在jar包
    sql中with as测试实例
    BeanUtils.copyProperties的简单示例
    jquery.validate.js的简单示例
    springboot restful接口服务异常处理
    怎样判断某个窗口是否打开
    怎样理解window.name
  • 原文地址:https://www.cnblogs.com/congyiblog/p/14514444.html
Copyright © 2020-2023  润新知