通过Nginx实现负载均衡

时间:2023-11-14 08:08:44

百度了下负载均衡:英文名称为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,百度即可。

通过Nginx实现负载均衡

下载后,更改下配置文件即可:

通过Nginx实现负载均衡

找到里面server这个节点:设置默认端口的,我这里设置成了82,因为80这么好的端口,不能给它

通过Nginx实现负载均衡

控制台命令开启Nginx服务

通过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负载均衡。