文档章节

Nginx 手记(九)负载均衡

神奇Sam
 神奇Sam
发布于 2017/08/30 14:47
字数 747
阅读 594
收藏 0
点赞 0
评论 0

实现原理

Nginx使用proxy_pass,把请求转发到后端一组服务池(upstream server)上,根据相关负载均衡规则来指定一台提供服务的服务端进行请求的处理。

一、基本语法配置

#upstream server
语法:upstream name{ ... }
默认值:无
上下文:http

如:
upstream backend {
    server backend1.example.com     weight=5;   #weight轮询权重
    server backend2.example.com:8080;
    server unix:/tmp/backend3;
    
    server backup1.example.com:8080     backup; #备份节点
    server backup2.example.com:8080     backup; #备份节点
}

简单用例
#轮询负载均衡
upstream backend {
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
    server 127.0.0.1:8003;
}
server {
    listen       80;
    server_name  localhost www.sam.com;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        proxy_pass http://backend;
        
        #当命中的服务器出现错误、超时、请求头不完整、500、502、503时,会跳过这一台服务器去访问下一台服务器。
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        
        proxy_redirect default; #一般配置默认即可
        
        #添加头信息
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        
        #配置超时
        proxy_connect_timeout 30;
        proxy_send_timeout 60;
        proxy_read_timeout 60;
        
        #配置缓冲区,
        proxy_buffer_size 32k;
        proxy_buffering on;
        proxy_buffers 4 128k;
        proxy_busy_buffers_size 256k;
        proxy_max_temp_file_size 256k;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    
}

二、后端服务器在负载均衡调度中的状态

down            当前的server暂时不参与负载均衡
backup          预留的备份服务器
max_fails       允许请求失败的次数
fail_timeout    经过max_fails失败后,服务暂停的时间
max_conns       限制最大的接收的连接数
例子
upstream backend {
    server 127.0.0.1:8001 down;     #不提供服务
    server 127.0.0.1:8002 backup;   #备份服务,如果8003挂了 将会提供服务
    server 127.0.0.1:8003 max_fails=1 fail_timeout=10s;
}

三、负载均衡策略 - 调度算法

轮询            按时间顺序逐一分配到不同的后端服务器
加权轮询        weight值越大,分配到的访问几率越高
ip_hash         每个请求按访问IP的hash结果分配,这样来自同一个IP的固定访问同一个后端服务器
url_hash        按照访问的URL的hash结果来分配请求,是每个URL定向到同一个后端服务器,通过hash关键数值实现
least_conn      最少连接数,哪个机器连接数少就分配到哪个机器
hash关键数值    hash自定义的key
1、轮询与加权轮询
#轮询与加权轮询
#理论上:当有7个请求过来的时候,将会有5个请求命中8002机器
upstream backend {
    server 127.0.0.1:8001;
    server 127.0.0.1:8002 weight=5; #5权重
    server 127.0.0.1:8003;
}
2、ip_hash基于ip的hash值实现负载均衡
#每个请求按访问IP的hash结果分配,这样来自同一个IP的固定访问同一个后端服务器
upstream backend {
    ip_hash;
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
    server 127.0.0.1:8003;
}
3、url_hash基于url的hash值实现负载均衡
#按照访问的URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
upstream backend {
    hash $request_uri;      #请求参数,如 http://www.sam.com/index.html 中的 /index.html
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
    server 127.0.0.1:8003;
}

© 著作权归作者所有

共有 人打赏支持
神奇Sam
粉丝 18
博文 41
码字总数 27998
作品 0
广州
程序员
九、参考资料

《实战 Nginx:取代Apache的高性能Web服务器》 《nginx的五种负载均衡算法》 《Nginx服务器优化》 《nginx 解决session共享》 《nginx tomcat session复制》 《UNIX下Apache 简介及基本配置》...

孟飞阳 ⋅ 2016/08/07 ⋅ 0

Ngnix 负载均衡环境搭建

一、NGINX简介 二、NGINX的安装及配置 三、NGINX的配置与优化 四、NGINX与JSP的安装、配置与优化 五、Nginx HTTP负载均衡和反向代理的配置与优化 六、Nginx的Rewrite规则与实例 七、NGINX的非...

孟飞阳 ⋅ 2016/08/07 ⋅ 0

【PDF分享】Nginx 常见应用技术指南[Nginx Tips] 第二版.pdf

文档目录: 一、Nginx 基础知识 二、Nginx 安装及调试 三、Nginx Rewrite 四、Nginx Redirect 五、Nginx 目录自动加斜线: 六、Nginx Location 七、Nginx expires 八、Nginx 防盗链 九、Nginx...

鉴客 ⋅ 2010/09/12 ⋅ 4

19个心得 明明白白说Linux下的负载均衡

19个心得 明明白白说Linux下的负载均衡 http://bbs.uchao.net/thread-32910-1-1.html 一、目前网站架构一般分成负载均衡层、web层和数据库层,我其实一般还会多加一层,即文件服务器层,因为...

浩源社区 ⋅ 2012/03/01 ⋅ 0

Nginx 常见应用技术指南(Nginx Tips)[定期更新]

[align=center]Nginx 常见应用技术指南(Nginx Tips)[定期更新][/align] [align=center]作者:NetSeek [url=http://www.linuxtone.org/]http://www.linuxtone.org(IT运维专家网|集群架构|性能调......

JavaGG ⋅ 2009/05/06 ⋅ 8

负载均衡器技术Nginx和F5的优缺点对比

对于数据流量过大的网络中,往往单一设备无法承担,需要多台设备进行数据分流,而负载均衡器就是用来将数据分流到多台设备的一个转发器。   目前有许多不同的负载均衡技术用以满足不同的应...

Zero零_度 ⋅ 2015/04/17 ⋅ 2

Nginx 配置实践

nginx 一般用作请求转发,用作服务器集群的负载均衡 典型的高并发集群是 nginx+tomcat(多个) nginx可以高效处理对静态文件的请求,tomcat 负责动态请求 配置范例: #user nobody;worker_pr...

HZCoder ⋅ 2016/03/29 ⋅ 0

分布式学习(3) ---- 初识Nginx

Nginx两大作用:1.轻量web容器 2.反向代理服务器。 在Java领域中,Nginx更多的被用作在前端提供负载均衡的反向代理服务。 所以本文仅简要介绍下反向代理概念和负载均衡的实现。 . 反向代理 ...

KKys ⋅ 2017/02/06 ⋅ 0

Nginx 常见应用技术指南[Nginx Tips] 第二版

原文链接:http://bbs.linuxtone.org/thread-1685-1-1.htmlIT运维专家网--"自由平等,互助分享!" 作者:NetSeek http://www.linuxtone.org(IT运维专家网|集群架构|性能调优) 欢迎转载,转载时...

刘赤龙 ⋅ 2010/06/08 ⋅ 0

四层、七层负载均衡的区别

一、简介 所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。 换句换说,二层负载均衡会通过一...

yzy121403725 ⋅ 01/03 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

20.zip压缩 tar打包 打包并压缩

6月25日任务 6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩 6.5 zip压缩工具: zip支持压缩目录 zip压缩完之后原来的文件不删除 不同的文件内容其实压缩的效果不一样 文件内有很多重复的用xz压...

王鑫linux ⋅ 11分钟前 ⋅ 0

double类型数据保留四位小数的另一种思路

来源:透析公式处理,有时候数据有很长的小数位,有的时候由在四位以内,如果用一般的处理方法,那么不足四位的小树会补充0到第四位,这样子有点画蛇添足的感觉,不太好看。所以要根据小数的...

young_chen ⋅ 18分钟前 ⋅ 0

Python 优化 回溯下降算法

使用sympy构造表达式,实现回溯下降算法 画出函数图像,先使用暴力搜索,找到最小值约为2.5左右 然后选定初始点,开始进行回溯搜索,下降方向为负梯度方向 下降的误差与步数大致呈现下面的状...

阿豪boy ⋅ 22分钟前 ⋅ 0

Django配置163邮箱出现 authentication failed(535)错误解决方法

最近用Django写某网站,当配置163邮箱设置完成后,出现535错误即:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') Django初始配置邮箱设置 EMAIL_HOST = "smtp.1...

陈墨轩_CJX ⋅ 24分钟前 ⋅ 0

用接口模拟可伸缩枚举(34)

1、枚举的可伸缩性最后证明都不是什么好点子 扩展类型的元素是基本类型实例,基本类型的实例却不是扩展类型的元素,很混乱 目前还没有很好的方法来枚举基本类型的所有元素,及其扩展 可伸缩性...

职业搬砖20年 ⋅ 27分钟前 ⋅ 0

Ubuntu18.04 IDEA快捷键无法使用

IDEA默认的回退到上一视图的快捷键是Ctrl + Alt + Left,在ubuntu中这个快捷键被占用了,在16.04中可以在界面中取消这个快捷键,但是18.04就看不到了,可以使用以下命令解决 gsettings set ...

Iceberg_XTY ⋅ 32分钟前 ⋅ 0

如何解决s权限位引发postfix及crontab异常

一、问题现象 业务反馈某台应用服务器,普通用户使用mutt程序发送邮件时,提示“postdrop warning: mail_queue_enter: create file maildrop/713410.6065: Permission denied”,而且普通用法...

问题终结者 ⋅ 44分钟前 ⋅ 0

Unable to load database on disk

由于磁盘空间满了以后,导致zookeeper异常退出,清理磁盘空间后,zk启动报错,信息如下: 2018-06-25 17:18:46,904 INFO org.apache.zookeeper.server.quorum.QuorumPeerConfig: Reading co...

刀锋 ⋅ 今天 ⋅ 0

css3 box-sizing:border-box 实现div一行多列

<!DOCTYPE html><html><head><style> div.container{ background:green; padding:10px 10px;}div.box{box-sizing:border-box;-moz-box-sizing:border-box; /* Fir......

qimh ⋅ 今天 ⋅ 0

Homebrew简介和基本使用

一、Homebrew是什么 Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径...

说回答 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部