Ngixn搭建集群负载均衡

什么是集群?

集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。

                                                                                                                                 ——摘自百度百科

集群的好处 

提高性能

一些计算密集型应用,如:天气预报、核试验模拟等,需要计算机要有很强的运算处理能力,现有的技术,即使普通的大型机器计算也很难胜任。这时,一般都使用计算机集群技术,集中几十台甚至上百台计算机的运算能力来满足要求。提高处理性能一直是集群技术研究的一个重要目标之一。

降低成本

通常一套较好的集群配置,其软硬件开销要超过100000美元。但与价值上百万美元的专用超级计算机相比已属相当便宜。在达到同样性能的条件下,采用计算机集群比采用同等运算能力的大型计算机具有更高的性价比。

提高可扩展性

用户若想扩展系统能力,不得不购买更高性能的服务器,才能获得额外所需的CPU 和存储器。如果采用集群技术,则只需要将新的服务器加入集群中即可,对于客户来看,服务无论从连续性还是性能上都几乎没有变化,好像系统在不知不觉中完成了升级。

增强可靠性

集群技术使系统在故障发生时仍可以继续工作,将系统停运时间减到最小。集群系统在提高系统的可靠性的同时,也大大减小了故障损失。

集群架构图

那么问题来了,我们的集群由N太服务器组成,那么客户端怎么知道有这么多服务器,又该访问哪一台服务器呢?今天的主角Nginx就是用来干这个事情的。

Nginx概述

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。 

  加入Nginx后,我们上面的架构图就变成

 

 准备程序,这次建一个.NetCore WebApi项目做演示

 private IConfiguration _configuration;
        public WeatherForecastController(ILogger<WeatherForecastController> logger,IConfiguration configuration)
        {
            _logger = logger;
            _configuration = configuration;
        }

        [HttpGet]
        public IEnumerable<string> Get()
        {
            //dotnet Cluster.dll --urls="http://*:6666" --ip="127.0.0.1" --port=6666
            return new string[] { _configuration["port"] };//获取命令行参数
            
        }

新建项目使用原始的WeatherForecastController即可,并且注入IConfiguration以便等下命令行启动程序时获取端口和ip参数,Get方法中返回获得的端口参数。

dotnet Cluster.dll --urls="http://*:6666" --ip="127.0.0.1" --port=6666
dotnet Cluster.dll --urls="http://*:7777" --ip="127.0.0.1" --port=7777
dotnet Cluster.dll --urls="http://*:8888" --ip="127.0.0.1" --port=8888

找到项目所在文件目录cmd,通过命令行启动多个程序,分别为6666端口、7777端口、8888端口

分别访问localhost:6666/WeatherForecast、localhost:7777/WeatherForecast、localhost:8888/WeatherForecast、localhost:9999/WeatherForecast

 6666端口、7777端口、8888端口都可以正常访问并且返回了对应的端口号,因为我们并没有启动9999端口号,所以访问失败了。

我们启动了3个不同端口的服务,想要访问的话必须得手动输入端口号。但是实际中,用户是通过域名或者固定ip访问的,不能要求用户手动端口访问。那么久需要Nginx进反向代理并且完成负载均衡。

下载Nginx

下载地址:http://nginx.org/en/download.html

配置Nginx

打开conf文件夹下的nginx.conf文件

添加如下配置

启动Nginx

可以看到我们的URL的8089端口没有变  但是每次访问的服务都是不一样的。成功完成了Nginx的分发。

Nginx的各种策略

1、轮询

我们上面用到的策略就是轮询策略,也是Nginx的默认策略。轮询模式会依次给每个服务器进行分发,相对平均。

2、weight(权重)

我们的服务器配置和各因素会存在性能上的差异,肯定希望把更多的请求分发给性能较高的服务器。那么久可以使用权重策略。

我们只需在原来的配置加上 weight=权重比例  即可。

3、ip_hash

ip_hash 的作用是,根据访问者的ip计算hash值 进行转发,这样就保证了同一个ip的访问者永远经过负载均衡后访问的是同一个服务器。

4、url_hash

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值