Nginx做负载均衡的几种轮询策略
集群环境为了解决单点无法支撑高并发的情况,集群采用多台服务器提供服务,一般在集群中使用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做负载均衡的几种轮询策略的更多相关文章
- Nginx 做负载均衡的几种轮询策略
网上看见nginx的upstream目前支持的5种方式的分配,摘录备忘. 1.轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除.upstream back ...
- 死磕nginx系列--使用nginx做负载均衡
使用nginx做负载均衡的两大模块: upstream 定义负载节点池. location 模块 进行URL匹配. proxy模块 发送请求给upstream定义的节点池. upstream模块解读 ...
- 使用nginx做负载均衡的session共享问题
查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享PHP服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不 ...
- nginx做负载均衡配置文件
nginx做负载均衡是在反向代理的基础上做的,代码如下: ## Basic reverse proxy server ## ## Apache backend for www.baidu.com ## ...
- nginx做负载均衡和tomcat简单集群
Nginx做负载均衡和TOMCAT简单集群 1.下载安装nginx及其依赖包 ...
- K2使用Nginx做负载均衡
K2使用Nginx做负载均衡 K2目前是支持Load Balancing这种方式,来做负载均衡,也可以使用F5来做负载均衡,但这次我使用nginx来实现K2的负载均衡 下载nginx 请下载nginx ...
- 解决docker中使用nginx做负载均衡时并发过高时的一些问题
# 解决docker中使用nginx做负载均衡时并发过高时的一些问题 1.问题产生原因: 由于通过nginx作为负载均衡服务,在访问并发数量达到一定量级时jmeter报错. nginx日志关键信息:a ...
- Nginx的负载均衡的几种方式
Nginx的负载均衡的那点事 本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分 ...
- Nginx实现负载均衡的几种方式
负载均衡的几种常用方式 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. upstream backserver { server 192.168 ...
随机推荐
- QIs for Spread
玩了好几天,看了好多剧,所以这几天的进度稍微有点慢,另外,<一起同过窗>真香! 延展特性涉及解集覆盖的区域.一个具有良好分布的解集应该包含来自PF每个部分的解集,而不遗漏任何区域.然而,大 ...
- python爬虫之浅析验证码
一.什么是验证码? 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”( ...
- 原生js写一个无缝轮播图插件(支持vue)
轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端.因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使 ...
- Python之接口测试(一)
前言 之前我们已经学会了利用JMeter工具进行接口测试,今天我们学习一下如何利用python进行接口测试. 一:发送get请求 import requests,json url = 'http:// ...
- 解决Sprite Atlas打包Asset bundles时重复打包的问题
0x00 前言 在Unity 2018.4.6之前的版本,有一个和SpriteAtlas打AB包有关的常见问题.即当给Sprite Atlas打AB包时,Sprite Atlas Texture可能会 ...
- Markdown For EditPlus插件发布(基于EditPlus快速编辑Markdonw文件,写作爱好的福音来啦)
详细介绍: Markdown For EditPlus插件使用说明 开发缘由 特点好处: 中文版使用说明 相关命令(输入字符敲空格自动输出): EditPlus常用快捷键: 相关教程: English ...
- SpringBoot——学习笔记
关于微服务和SOA 这,仅是我学习过程中记录的笔记.确定了一个待研究的主题,对这个主题进行全方面的剖析.笔记是用来方便我回顾与学习的,欢迎大家与我进行交流沟通,共同成长.不止是技术. 官网教程学习ht ...
- 测试必知必会系列- Linux常用命令 - history
21篇测试必备的Linux常用命令,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1672457.html 查看历 ...
- 玩转控件:重写/重绘Dev中MessageBox弹窗控件
很久没有更新博客了,本想着直接发一篇<手撕ERP>系列,从控件重写.重绘,到框架搭建,再到部分模块实现+业务的.但是每次动手的时候,都觉得难以下手.直接从数据库设计开始吧,模块设计还没定下 ...
- Asp.Net Core 中IdentityServer4 授权原理及刷新Token的应用
一.前言 上面分享了IdentityServer4 两篇系列文章,核心主题主要是密码授权模式及自定义授权模式,但是仅仅是分享了这两种模式的使用,这篇文章进一步来分享IdentityServer4的授权 ...