通过Nginx实现负载均衡
百度了下负载均衡:英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务
嗯,跟我理解差不多:如果你的网站请求很多(是“很多”),造成什么结果呢?响应速度变慢(每个请求都是要创建线程去执行的,而一台服务器能同时开辟的线程数是有限的),严重的服务器崩掉。
如何解决呢?
办法一:更换服务器,换台牛逼点的呗,4核换8核,8核换16核,16核....额,那这样是不是很贵啊? 这是肯定的,所以呢
办法二:不换服务器,加服务器,多弄几天价廉的服务器,这也是一种解决办法。将请求分散到不同的服务器上,这样一来,压力平摊了,多好。 老板说:这个好,这个好。
针对办法二,最关键的一点就是如何将请求分散到不同的服务器上,这需要一种算法,最最简单的可以弄个随机算法,我之前在分布式存储图片中提到过:
var list = db.ImageServerInfo.Where<ImageServerInfo>(c=>c.State==).ToList();
int serverCount = list.Count();
Random r = new Random();
int i = r.Next();
int j = i%r;
//获取状态为1(normal)的图片服务器总数,随机数去对其取余。得到的就是我们的随机索引,于是就可通过list[j]去获取ServerId,然后再去获取ServerIP
但上面这段代码有下面几个问题:
1、语言限制,如果是前端请求,得写段同样的JS代码。
2、算法太low,效率低。
那么有没有一个通用的玩意儿可以实现这个呢。答案就是我们的Nginx——反向代理服务器
请求流程:
我们不直接请求我们的服务地址,而是请求Nginx地址,由Nginx作为一个中转站,将请求经过处理后发送到服务地址。这个处理就是经过Nginx的算法然后将请求导向到确定的某个服务地址,也就是上面说到的具体某台服务器地址。
如何做的,很简单,首先下载Nginx,百度即可。
下载后,更改下配置文件即可:
找到里面server这个节点:设置默认端口的,我这里设置成了82,因为80这么好的端口,不能给它
控制台命令开启Nginx服务
或者直接双击Nginx.exe开启也可。
浏览器输入:localhost:82,即可看到我们的Nginx开启成功
然后剩下就是配置的事情了,添加节点 取名为 zjgistdt.com,#为注释,所以我们这里就两个服务地址。即对应我们的两台服务器地址
upstream zjgistdt.com{ #服务器集群名字
#server 192.168.1.186: weight=;#服务器配置 weight是权重的意思,权重越大,分配的
#天地图后台局域网测试
server 192.168.0.202: weight=;
server 192.168.0.38: weight=;
}
然后在server节点处进行关联:
server {
listen 82; #监听82端口,80被占用
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #location / {
# root html;
# index index.html index.htm;
#} location / {
proxy_pass http://zjgistdt.com;#请求转向zjgistdt.com定义的服务器列表
proxy_redirect default;
}
}
至此,你请求Nginx服务器即转向zjgistdt.com定义的服务器列表。
配置完成...简单爆炸。
部署Nginx的这台机子ip为:192.168.0.30,而我们设置的端口号为82,
所以一切基于192.168.0.30:82/.....的请求都将转向我们真实的两台服务器地址。
至此,所谓的负载均衡也就”完事儿“了,当然,我们的Nginx能做的远不止于此,如Nginx直接返回静态资源等等,就是你有需要再去拓展的东西,操作都是配置节点即可。
拓展:其实Nginx算是一种节约成本的方式,如果有钱可以部署多个Nginx,然后用企业级的负载均衡服务器来在Nginx上再加一层。如f5负载均衡器
负载均衡是一种技术,指通过某种算法实现负载分担的方法。通俗的讲就是统一分配请求的设备,负载均衡会统一接收全部请求,然后按照设定好的算法将这些请求分配给这个负载均衡组中的所有成员,以此来实现请求(负载)的均衡分配。
F5是负载均衡产品的一个品牌,其地位类似于诺基亚在手机品牌中的位置。除了F5以外,Radware、Array、A10、Cisco、深信服和华夏创新都是负载均衡的牌子,因为F5在这类产品中影响最大,所以经常说F5负载均衡。
通过Nginx实现负载均衡的更多相关文章
- nginx+tomcat负载均衡
最近练习nginx+tomcat负载均衡.根据一些资料整理了大体思路,最终实现了1个nginx+2个tomcat负载均衡. 安装JDK 1>进入安装目录,给所有用户添加可执行的权限 #chmod ...
- 使用Nginx实现负载均衡
使用Nginx实现负载均衡 一.nginx简介 nginx是一个高性能的HTTP服务器和反向代理服务器.它起初是俄罗斯人Igor Sysoev开发的,至今支撑者俄罗斯的很多大型的网站. 二.nginx ...
- nginx作为负载均衡服务器——测试
i. 需求 nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转发至 tomcat服务器. nginx负载均衡服务器:192.168.101.3 tomcat1服 ...
- windows配置nginx实现负载均衡集群
windows配置nginx实现负载均衡集群2014-08-20 09:44:40 来源:www.abcde.cn 评论:0 点击:617 网上大部分关于nginx负载均衡集群的教程都是lin ...
- 使用nginx做负载均衡的session共享问题
查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享PHP服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不 ...
- 【Nginx】配置Nginx的负载均衡
参考的优秀文章 tomcat配置文件server.xml详解 AJP协议总结与分析 Using nginx as HTTP load balancer 在本机运行2个Tomcat 现需要运行两个Tom ...
- Nginx的负载均衡 - 整体架构
Nginx的负载均衡 - 整体架构 Nginx版本:1.9.1 我的博客:http://blog.csdn.net/zhangskd Nginx目前提供的负载均衡模块: ngx_http_upstre ...
- Nginx作为负载均衡服务器(Windows环境)
一个最简单的负载均衡测试,不涉及到session复制,只是将请求分配到不同的服务器上去而已. 1.创建一个简单的web应用.只有一个index.jsp页面,,内容如下. <%@ page lan ...
- [转载] nginx的负载均衡
原文:http://www.srhang.me/blog/2014/08/27/nginx-loabbalance/ Nginx负载均衡 一.特点 1.1 应用情况 Nginx做为一个强大的Web服务 ...
- Nginx之负载均衡
转自:http://www.360doc.com/content/13/1114/12/7694408_329125489.shtml 注,大家可以看到,由于我们网站是发展初期,nginx只代理了后端 ...
随机推荐
- td 自动换行
Two solutions for cell width:1. Omit words: <td style="width:60px;"><div style=&q ...
- windows 2012 试用180天
windows server 2012 官方下载,可以使用180天, 快到期的时候执行以下命令 slmgr.vbs -rearm
- 扩展ViewFlow避免和ViewPager滑动冲突,同时支持无限循环,并完美和CircleFlowIndicator结合
首先,为了避免滑动冲突,我们要继承ViewFlow,重写onInterceptTouchEvent public class MyViewFlow extends ViewFlow { private ...
- 轻松搞定面试中的二叉树题目(java&python)
树是一种比较重要的数据结构,尤其是二叉树.二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒.二叉 ...
- asp.net core 之静态文件目录的操作
文章前言 之前写了一篇关于模拟登录的文章,自我感觉内容不太丰富,今天的这篇文章,希望在内容上能丰富些.本人缺少写文章的经验,技术上也是新手,但我会努力的,希望大家多多支持小弟. asp.net cor ...
- 理解 python metaclass使用技巧与应用场景分析
理解python metaclass使用技巧与应用场景分析 参考: decorator与metaclass:http://jfine-python-classes.readthedocs. ...
- Linux之date
近期学习需要根据不同的日期的数据,做同样的操作,如果一遍遍的手动操作,太笨重了,有些愚公的味道.所以就想着在shell下,将时间当做变量,然后重复其他的操作. 这里的需求是得到从某天(例如:2014- ...
- WPF快速精通版
命名空间: xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:U ...
- LCLFramework框架 1.1 Pre-Alpha 源码公布
使用开发框架的好处:1.框架在技术上为软件系统提供了完整的模式实践2.框架为团队提供了合理可行的软件开发过程模式3.框架的应用大大提高了团队的开发效率,团队只需要关注与领域相关的业务实现,而无需关注具 ...
- Why restTemplate.put() throws “HttpClientErrorException: 404 Not Found”
I make a put request RestTemplate restTemplate = new RestTemplate(); restTemplate.put(new URI(&quo ...