集群环境为了解决单点无法支撑高并发的情况,集群采用多台服务器提供服务,一般在集群中使用nginx 将来自客户端的请求转发给服务器端

nginx负载均衡可用提高网站的吞吐量,缓解单台服务器的压力。

一. Nginx是什么

Nginx是一个开源且高性能、可靠的HTTP中间件、代理服务

1. IO多路复用epoll(IO复用)

如何理解呢?举个例子吧!
有A、B、C三个老师,他们都遇到一个难题,要帮助一个班级的学生解决课堂作业。
老师A采用从第一排开始一个学生一个学生轮流解答的方式去回答问题,老师A浪费了很多时间,并且有的学生作业还没有完成呢,老师就来了,反反复复效率极慢。
老师B是一个忍者,他发现老师A的方法行不通,于是他使用了影分身术,分身出好几个自己同一时间去帮好几个同学回答问题,最后还没回答完,老师B消耗光了能量累倒了。
老师C比较精明,他告诉学生,谁完成了作业举手,有举手的同学他才去指导问题,他让学生主动发声,分开了“并发”。
这个老师C就是Nginx。

2. 轻量级

  • 功能模块少 - Nginx仅保留了HTTP需要的模块,其他都用插件的方式,后天添加
  • 代码模块化 - 更适合二次开发,如阿里巴巴Tengine

3. CPU亲和

把CPU核心和Nginx工作进程绑定,把每个worker进程固定在一个CPU上执行,减少切换CPU的cache miss,从而提高性能。

二.Nginx安装和启动

windos环境下安装,下载地址http://nginx.org/en/download.html

通过cmd定位到Nginx所在目录

开启:start nginx.exe

快速停止:nginx.exe -s stop

重新加载配置: nginx.exe -s reload

完整停止:nginx.exe -s quit

三. Nginx提供的5种策略

  • 轮询 (每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除)
  • 权重 (weight权重,权重越大,表示访问几率越大,用于后端服务器性能不均的情况)
  • ip_hash(每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题)
  • fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。
    upstream backend {
    server server1.linuxany.com;
    server server2.linuxany.com;
    fair;
    }
  • url_hash(第三方)
    upstream backend {
    server squid1:;
    server squid2:;
    hash $request_uri;
    hash_method crc32;
    }
    upstream web {
    server 192.168.1.116: down;
    server 192.168.1.118: weight=;
    server 192.168.1.113:;
    server 192.168.1.112: backup;
    }

    配置详解:

    down 表示当前的Web Server暂时不参与负载 
             weight  默认为1.weight越大,负载的权重就越大。 
             backup: 其它所有的非backup Server down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

    配置文件nginx.conf:

    #定义nginx运行的用户和用户组
    user  www www;
     
    #设置nginx进程数,一般设置为cpu核心数,auto为自动检测
    worker_processes  auto;
     
    #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
    error_log  logs/error.log;
    #error_log  logs/error.log  warn;
    #error_log  logs/error.log  info;
    #error_log  logs/error.log  debug;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  crit;
     
    #守护进程pid文件
    pid        logs/nginx.pid;
     
    #events模块中包含nginx中所有处理连接的设置
    events {
        #单个进程最大连接数(最大连接数=连接数*进程数)
        worker_connections  ;
        #设置nginx收到一个新链接通知后接受尽可能多的链接
        multi_accept on;
        #设置用于复用客户端线程的轮训方法
        use epoll;       
    }
     
     
    #http模块控制着nginx http处理的所有核心特性
    http {
     
        #文件扩展名与文件类型映射表
        include       mime.types;
     
        #默认文件类型
        default_type  application/octet-stream;
     
        #打开或关闭错误页面中的nginx版本号deng
        server_tokens on;
     
        #客户请求头缓冲大小
        large_client_header_buffers 64k;
     
        #设定通过nginx上传文件的大小
        client_max_body_size 1024M;
     
        
        client_body_buffer_size 2048k;
     
        #开启高效文件传输模式,优化磁盘IO设置
        sendfile        on;
     
        gzip  on;
     
        #允许或禁止压缩基于请求和相应的响应流,any代表压缩所有请求
        gzip_proxied any;
     
        #==设置数据压缩等级,-9之间,9最慢压缩比最大
        gzip_comp_level ;
     
        #设置需要压缩的数据格式
        gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss;
        
        #服务器分发池列表(注意server只填IP+端口,要写入http里面,名字可以随便取,分发配置对应上即可)
        upstream web{
            server 192.168.2.6: weight=; #服务器1  weight权重(权重越大,表示访问几率越大)
            server 192.168.2.6: weight=;#服务器2
        }
        
        #负载均衡请求分发
        server {
            listen ;
            #多域名用空格隔开baidu.com baidu2.com baidu3.com
            server_name 192.168.2.6;
     
            #设置默认访问首页
            index index.html index.php;
     
            location / {
                #所有请求反向代理到服务器池中的服务器 proxy_pass 配置的名称是 upstream 定义的名称 如 web 则这里就是 http://web
                proxy_pass  http://web;
                proxy_set_header Host      $host;
                proxy_set_header X-Real-IP $remote_addr;
            }
       #服务器分发池可以不用写到nginx.conf文件,可以另起一个conf文件,然后用下列代码引入即可       include /etc/nginx/conf.d/*.conf;
        }
    }

    nginx支持同时设置多组的负载均衡,用来给不用的server来使用。

    client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
    client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
    location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡

Nginx做负载均衡的几种轮询策略的更多相关文章

  1. Nginx 做负载均衡的几种轮询策略

    网上看见nginx的upstream目前支持的5种方式的分配,摘录备忘. 1.轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除.upstream back ...

  2. 死磕nginx系列--使用nginx做负载均衡

    使用nginx做负载均衡的两大模块: upstream 定义负载节点池. location 模块 进行URL匹配. proxy模块 发送请求给upstream定义的节点池. upstream模块解读 ...

  3. 使用nginx做负载均衡的session共享问题

    查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享PHP服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不 ...

  4. nginx做负载均衡配置文件

    nginx做负载均衡是在反向代理的基础上做的,代码如下: ## Basic reverse proxy server ## ## Apache backend for www.baidu.com ## ...

  5. nginx做负载均衡和tomcat简单集群

    Nginx做负载均衡和TOMCAT简单集群                1.下载安装nginx及其依赖包                                               ...

  6. K2使用Nginx做负载均衡

    K2使用Nginx做负载均衡 K2目前是支持Load Balancing这种方式,来做负载均衡,也可以使用F5来做负载均衡,但这次我使用nginx来实现K2的负载均衡 下载nginx 请下载nginx ...

  7. 解决docker中使用nginx做负载均衡时并发过高时的一些问题

    # 解决docker中使用nginx做负载均衡时并发过高时的一些问题 1.问题产生原因: 由于通过nginx作为负载均衡服务,在访问并发数量达到一定量级时jmeter报错. nginx日志关键信息:a ...

  8. Nginx的负载均衡的几种方式

    Nginx的负载均衡的那点事 本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分 ...

  9. Nginx实现负载均衡的几种方式

    负载均衡的几种常用方式 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. upstream backserver { server 192.168 ...

随机推荐

  1. JavaScript之三 - 语法

    1.block 一般就是{}包括起来的代码块,注意的是,js没有块作用域,但是有函数作用域,全局作用域. 2.var 1 var a = b = 1; 如: 123456 function () { ...

  2. python数组和字符串互相转换

    字符串转数组 str = '1,2,3' arr = str.split(',') 数组转字符串 arr = ['a','b'] str = ','.join(arr) arr = [1,2,3] s ...

  3. 这些Zepto中实用的方法集

    前言 时间过得可真快,转眼间2017年已去大半有余,你就说吓不吓人,这一年你成长了多少,是否荒度了很多时光,亦或者天天向上,收获满满.今天主要写一些看Zepto基础模块时,比较实用的部分内部方法,在我 ...

  4. 个人理解TCP中SYN Cookie

    说起SYN Cookie还是得从TCP3次握手开始说起,先给出计网的体系结构图 然后解释一下SYN,seq,ack,ACK的相关名词 SYN(建立连接) ACK(确认后全部为1) PSH(传送) FI ...

  5. GitOps入门与实践:如何集成Git和K8S?

    也许你之前听说过GitOps,但是对其并不了解.在本文中,我将对其进行简单介绍,它其实是一个应用程序开发和管理中的一个术语,其核心思想是将应用系统的声明性基础架构和应用程序存放在Git的版本控制库中. ...

  6. 微信小程序转化为uni-app项目

    前言: 之前自己做一个uni-app的项目的时候前端需要实现一个比较复杂的功能,但是由于自己前端抠脚的原因没有写出来,然后自己在网上搜索的时候发现了有个微信小程序里面的页面及其的符合我的需求.那么问题 ...

  7. 什么是phpMyAdmin

    phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库.借由此Web接口可以成为一个简易方式输入繁杂 ...

  8. node打开本地应用程序

    1.打开浏览器 最简单的方法: const cp = require('child_process') cp.exec('start http://127.0.0.1:8889/'); // 自动打开 ...

  9. NLP(二十六)限定领域的三元组抽取的一次尝试

      本文将会介绍笔者在2019语言与智能技术竞赛的三元组抽取比赛方面的一次尝试.由于该比赛早已结束,笔者当时也没有参加这个比赛,因此没有测评成绩,我们也只能拿到训练集和验证集.但是,这并不耽误我们在这 ...

  10. selenium中js定位

    学习selenium的时候经常用扫的定位方式WebDriver定位方式,但是一些Windows的窗口就无力了,这时候可以用js定位 使用js定位的时候是用DOM树定位方式 eg: document.g ...