烂泥:nginx负载均衡
今天我们来学习下有关nginx的负载均衡配置。nginx的负载均衡是通过nginx的upstream模块和proxy_pass反向代理来实现的。
说明:有三台服务器,前端的A服务器使用nginx进行负载均衡配置。后端是两台配置的相同服务器,以访问a.ilanni.com这个域名为例。结构图,如下:
A服务器对外(公网)开放80端口,B、C服务器就是两台配置相同的服务器。B服务器开放8080端口,C服务器开放8090端口。当客户端访问a.ilanni.com域名时,A服务器根据nginx的upstream模块相应策略进行分配客户端访问到B服务器还是C服务器。
注意B服务器和C服务器内容是相同的。但是在此,我们为了看到实验效果,我在B、C服务器配置了不同的内容。B服务器的默认页面现实的内容为:The Server is web1_192.168.1.249:8080。C服务器的默认页面现实的内容为:The Server is web2_192.168.1.249:8090。如下:
nginx负载均衡的默认是使用轮询方式进行分配的,而且默认的权重为1,并且权重越大被访问的几率越大。
我们先配置A服务器的nginx,如下:
cat /usr/local/nginx/conf/nginx.conf|grep -v ^#|grep -v ^$
upstream a.ilanni.com {
server 192.168.1.248:8080;
server 192.168.1.249:8090;
}
location / {
proxy_pass http://a.ilanni.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
注意上图中,标记出来的第一部分。其中upstream就是做负载均衡使用的。http://a.ilanni.com;就是我们要访问的域名,通过proxy_pass反向代理到upstream下的服务器中。
第二部分就是我们要反向代理的域名,注意在此我们监听的是80端口,而且这个server标签中,我并没有配置server_name。其实配置server_name也是可以的,不过最后的效果是一样的,这个是经过测试的。
第三部分,在此我配置的就是一个虚拟主机。监听的是8080端口,并且在此我也配置了server_name。这个主要是为了做对比使用的。
我们现在先启动A服务器的nginx,并且访问a.ilanni.com:8080。如下:
可以看到目前A服务器的nginx已经可以正常访问了。注意我们在此访问的是http://a.ilanni.com:8080。
现在开始配置B、C服务器的nginx,配置内容如下:
B、C服务器的nginx配置完毕后,我们现在来启动各自的nginx服务并访问,如下:
通过上图,我们可以看到B、C服务器的nginx已经正常访问了。那么我现在来访问http://a.ilanni.com看看能不能达到我们所要的效果。如下:
可以看到我们现在访问http://a.ilanni.com已经反向代理到upstream下的B服务器,并且现在显示的是B服务器的内容。
再次刷新页面,显示如下:
刷新页面后,你会发现这次显示的是C服务器的内容。也说明http://a.ilanni.com已经反向代理到C服务器上。
你可以多次刷新页面,会发现显示的内容是B、C服务器交替出现。
为什么会是这样呢?
其实在文章前面,我已经介绍了nginx的upstream负载均衡,在没有其他配置的情况默认使用的策略是轮询方式的,而且默认的权重为1。
也就是说:upstream a.ilanni.com {
server 192.168.1.248:8080;
server 192.168.1.249:8090;
}
中B、C服务器的默认权重都是一样为1。那么在nginx轮询时,所以B、C服务器会交替出现。
如果我们现在把B服务器的权重设置为5,C服务器还是使用默认看看实际情况。配置如下:
upstream a.ilanni.com {
server 192.168.1.248:8080 weight=5;
server 192.168.1.249:8090;
}
再次访问http://a.ilanni.com,首先显示的还是B服务器的内容。然后刷新,你会发现大约大约刷新了5次左右,才会显示C服务器的内容。这就权重的作用,服务器的权重数值越高,被分配到客户端的请求次数越多。
注意以上实验,我们是在A、B、C服务器是在同一个局域网,对公网来说只是开放了A服务器的80端口。如果这三台服务器全部是公网IP的话,那就是我们下篇文章要介绍的内容了,有关nginx反向代理的使用。
到此,有关nginx的负载均衡我们基本上介绍完毕后。下面在辅助介绍下,nginx的upstream目前支持以下几种方式的分配:
1)、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。设置服务器的权重,权重数值越高,被分配到客户端的请求次数越多,默认值为1。
3)、ip_hash 每个请求按访问IP的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4)、fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5)、url_hash(第三方)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
烂泥:nginx负载均衡的更多相关文章
- 对比Haproxy和Nginx负载均衡效果
为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...
- nginx负载均衡集群
nginx负载均衡集群 0.前言:nginx 负载均衡,属于网络7层模型中的应用层,说白了就是一个代理,要用 upstrem 模块实现,代理则用proxy模块 1.可以针对域名做转发,lvs只能针对 ...
- 手把手教你玩转nginx负载均衡(二)----安装虚拟机操作系统
引言 在上一篇,我们组装好了虚拟机的硬件部分,那么现在我们就要把操作系统装上了,既然是服务器,那么安装linux操作系统是个比较好的选择,如果你喜欢的话,安装windows也是没有任何问题的 我这里选 ...
- nginx负载均衡基于ip_hash的session粘帖
nginx负载均衡基于ip_hash的session粘帖 nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除 ...
- Net分布式系统之二:CentOS系统搭建Nginx负载均衡
一.关于CentOS系统介绍 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat ...
- Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用
上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...
- 配置nginx负载均衡
配置nginx负载均衡 执行命令:vi /usr/local/nginx/sbin/nginx/conf/nginx.conf 修改为: worker_processes 2; events { ...
- nginx负载均衡集群中的session共享说明
在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...
- nginx 负载均衡策略
nginx 负载均衡策略 1. 轮询轮询方式是nginx负载均衡的默认策略,根据每个server的权重值来轮流发送请求,例如:upstream backend {server backend1.e ...
随机推荐
- Jmeter常用函数之__CSVRead使用
__CSVRead函数用于对脚本进行参数话,当脚本中不同变量需要不同参数值时,可以考虑__CSVRead函数. 以登录的用户名.密码为例:实际进行压力测试时,需要模拟使用不同的用户并发访问系统,此时需 ...
- [翻译] Autofac 入门文档
原文链接:http://docs.autofac.org/en/latest/getting-started/index.html 在程序中使用Autofac的基本模式是: 用控制反转(IoC)的思想 ...
- 初识Web 服务(即Web Service)
一.什么是Web服务 简单来说就是在Internet上提供的这种服务,我们称这种服务为Web服务. 二.Web服务的主要目标? 是支持跨平台的可互操作性. 三.Web服务的优势 四.Web服务提供了一 ...
- Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already in use.
遇到这个问题似然重启是个办法,但是真心好累.. 1.在dos下,输入 netstat -ano|findstr 8080 //说明:查看占用8080端口的进程 显示占用端口的进程 2.在任务管 ...
- Java基础学习小记--多态
题外话:总结了多年的学习心得,不得不说,睡眠是一个学习者的必需品!所谓"早起毁一天"不是没有道理哪,特别对Coders来说,有几天不是加班到夜里.好吧,我承认对于初学Java的我, ...
- 微信网页授权(OAuth2.0) PHP 源码简单实现
提要: 1. 建议对OAuth2.0协议做一个学习. 2. 微信官方文档和微信官网工具要得到充分利用. 比较简单,直接帖源代码了.其中“xxxxxxxxxx”部分,是需要依据自己环境做替换的 /** ...
- 在SharePoint 2013中显示“以其他用户身份登录”
在我新建了SharePoint 2013的网站后, 发现界面与2010有一些不同,比如缺少了“以其他用户身份登录”,这给我的测试带来很大不便. 在找了一些国外网站后,终于找到了解决方法 第一步: 找到 ...
- 【IOS】从android角度来实现(理解)IOS的UITableView
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3403124.html 本人从在学校开始到现在上班(13年毕 ...
- webbench 压力测试
原文 webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好用,安装使用也特别方便,并且非常小. 主要是 -t 参数用着比较爽,下面参考了张宴 ...
- 腾讯bugly 的crash 上报和umeng的比较
说到crash上传工具,大家肯定会第一时间想到umeng,不错,umeng 是最早推出 crash 上报的工具之一,在刚推出来的时候,特别受到ios开发人员的喜爱. 因为个时候,内存是手动管理的,很容 ...