目录

1.前言

2.安装

3.配置文件详解

4.工作原理

5.Linux下托管.NET Core项目

6.Linux下.NET Core项目负载均衡

7.负载均衡策略详解

8.加权轮询(round robin)策略剖析

9.IP哈希(ip hash)策略剖析

10.最少连接(least_conn)策略剖析

11.随机(random)策略剖析

12.URL哈希(url hash)策略剖析

13.响应时间(fair)第三方模块详解

14.Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)

15.Linux下.NET Core项目Nginx+Keepalived高可用(双主模式)

16.Linux下.NET Core项目LVS+Keepalived+Nginx高可用集群

17.构建静态服务器

18.日志分析

19.优化策略

20.总结

在上一篇文章我们已经讲过如何使用Nginx托管.NET Core项目,那么接下来我们就要介绍如何使用Nginx作为负载均衡。这里之前是用了两台服务器作为讲解的,后面更新为三台上游服务器,只是内容有所变化,方法是不变的,特此说明下。

1.什么是负载均衡?

Load balancing,即负载均衡,是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。

2.有什么作用?

①、解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力);

②、提供故障转移,实现高可用;

③、通过添加或减少服务器数量,提供网站伸缩性(扩展性);

⑤、安全防护;(负载均衡设备上做一些过滤,黑白名单等处理)

3.为什么使用Nginx来做负载均衡?

在前一篇文章,我们只是单机部署站点,程序猿A很开心的把站点部署上线了,客户使用了一段时间也没有发现什么问题,突然有一天访问不了,程序猿A一看,哦豁,服务器挂了,让我来重启下服务器,重启之后他很开心的告诉客户,系统已经可以访问啦。同时心里庆幸在上班时间出现问题,万一半夜或者在路上,那客户不得急死咯。程序猿A就想了,这可是概率事件啊,我也不知道它什么时候发神经或者经常性的给我来故障,那我不得经常被老板拿去祭天咯。程序猿A到最后也没有解决这个故障问题,当然后面也没有发生故障,随着客户越来越多,突然某天某个点系统突然很卡甚至返回访问不了,程序猿A去看了下,发现服务器并没有故障,但是就是访问不了。这个时候程序猿A不解决问题就不行了,不解决客户就会经常访问不了,久之这个系统就没法用了,即使老板天天拿程序猿A去祭天也无济于事。

上面这个故事其实就是因为单机部署发生的单点故障,导致系统无法访问。还有就是并发鸭梨,导致系统处理能力下降甚至访问不了。那这个时候我们就把系统部署在多台服务器上,当一台挂了,另外一台也可以照常使用,而多台服务器就需要Nginx作为代理服务器,所有的请求先进入Nginx,Nginx在根据具体的规则把请求转发到具体的服务器上。

4.怎么做?

首先我们还是按照上一篇文章介绍的,部署三台.NET Core站点。但是我们要做为这两个.NET Core做一些区分,这样能更好的看出我们访问的是哪台服务器。我们按照《.NET Core项目部署到Linux(Centos7)(三)创建.NET Core API项目》,然后找到WeatherForecastController修改Get方法,增加ServerName区分具体访问的是哪一个站点。如下图

三台服务器的IP分别为192.168.157.132、192.168.157.133、192.168.157.138(这里的IP根据具体环境变化),我们修改ServerName为“.Net Core Nginx Server 1”,发布到132这台服务器上。然后修改ServerName为“.Net Core Nginx Server 2”,发布到133这台服务器上。最后修改ServerName为“.Net Core Nginx Server 3”,发布到138这台服务器上。发布完之后,我们在Postman验证下效果。《.NET Core项目部署到Linux(Centos7)(六)发布.NET Core 项目到Linux》

这样我们单独去访问这三台服务器站点都是正常的,但是这样我们是无法做负载均衡的,用户只能访问一个站点,因为只能公布一个入口,那么下面我们就部署Nginx负载均衡服务器,用它来把用户的请求转发到这两个站点的其中一个。

我们先新建一个虚拟机,然后用yum安装Nginx,《Nginx知多少系列之(二)安装》 ,安装后如下图

#测试Nginx安装是否成功
curl http://localhost

这一台服务器是192.168.157.134,我们按照前面介绍的为Nginx开机自启动以及开放对应的防火墙端口。

接下来我们就要做负载均衡配置了。

#进入nginx目录
cd /etc/nginx #编辑nginx.conf
sudo vim nginx.conf #按i进入插入模式 #注释下面的内容 # server {
# listen default_server;
# listen [::]: default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# } #编辑完后按Esc,然后:wq保存退出

负载均衡需要使用upstream模块,所以我们首先需要在Http块里的全局位置定义一组服务器,我们在使用yum安装的nginx在nginx.conf里会定义了include /etc/nginx/conf.d/*.conf,这里说明了包含了conf.d文件夹下面以.conf为结尾的配置文件。因为include是定义在全局的,所以在conf配置文件里也可以定义全局的内容。

#进入conf.d目录
cd /etc/nginx/conf.d #创建upstream.conf文件
sudo touch upstream.conf #编辑upstream.conf文件
sudo vim upstream.conf #按i进入插入模式 #输入下面的配置内容 upstream netCoreDemo {
server 192.168.157.132;
server 192.168.157.133;
server 192.168.157.138;
} server {
listen ;
location / {
proxy_pass http://netCoreDemo;
}
} #按Esc,然后:wq保存退出 #重启Nginx
sudo nginx -s reload

配置负载均衡就是这么简单哦,当然下面我们还会介绍负载均衡的策略。不过我们先来验证下效果吧,有图有真相。

哦豁,看到效果了么,第一次访问是在132的站点,第二次访问是在133的站点,第三次访问的是在138的站点,以此类推下去。简单的负载均衡已经实现了。这里的策略我们没有做更改,在Nginx里默认的方式是轮询,每个请求按照时间顺序轮流分配到不同的后端服务器。

下一篇文章将会详细的讲解Nginx负载均衡的策略,目前暂不包含商业策略的讲解。

Nginx知多少系列之(六)Linux下.NET Core项目负载均衡的更多相关文章

  1. Nginx知多少系列之(五)Linux下托管.NET Core项目

    目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ...

  2. Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...

  3. linux下一个apache+tomcat负载均衡和集群

    先说一下我的环境 一个ubuntu虚拟机, 一个apache2.2示例 两tomcat1.7示例 1.安装apacheserver sudo apt-get install apache2 假设要重新 ...

  4. Nginx知多少系列之(七)负载均衡策略

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...

  5. Nginx知多少系列之(一)前言

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.Linux下.NET Core项目Nginx+ ...

  6. Nginx知多少系列之(二)安装

    目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ...

  7. Nginx知多少系列之(三)配置文件详解

    目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ...

  8. .Neter玩转Linux系列之六:Linux下MySQL的安装、配置、使用

    一.Linux安装MySQL (1)下载安装包:https://dev.mysql.com/downloads/mysql/ (2)解压并安装 命令:tar zxvf 文件名 解压完成之后,重名一下文 ...

  9. .Neter玩转Linux系列之三:Linux下的分区讲解

    基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...

随机推荐

  1. java-打印流(新手)

    实例:1.直接输出到文件里面. import java.io.*; //打印流->保持数据原样性并且打印.(各种数据类型.) public class Dyl { public static v ...

  2. Android UI性能测试——使用 Systrace 查找问题

    一 官方文档翻译 官文地址:https://developer.android.com/studio/command-line/systrace systrace命令允许您在系统级别上收集和检查所有运 ...

  3. python函数版ATM

    最近系统的学习python函数知识点,感觉在面向对象之前,函数的功能确实强大. 最近使用函数写了ATM项目,虽然需求简单但也有很多知识点需要注意,这个项目把python基础的很多知识点都用上了. 前前 ...

  4. Linux - top命令监控列表的详细解析

    统计信息区(系统资源信息区) 前五行,即列表上方的五行 第一行:输出系统任务队列信息 18:46:38:系统当前时间 up 2days 1:54:系统开机后到现在的总运行时间 1 user:当前登录用 ...

  5. rest_framework序列化,反序列化

    序列化组件 from rest_framework.response import Response1.Response本质也是继承了httpresponse,比httpResponse还强大,传入一 ...

  6. windows常用系统命令

    dir指定要列出的驱动器.目录和/或文件 显示当前路径下的所有文件的绝对路径,包含子文件夹中的内容 dir /b / s /o:n /a:a /b 表示去除摘要信息,且顶格显示完整路径 /s 表示枚举 ...

  7. 「MoreThanJava」当大学选择了计算机之后应该知道的

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  8. 分库分表实践-Sharding-JDBC

    最近一段时间在研究分库分表的一些问题,正好周末有点时间就简单做下总结,也方便自己以后查看. 关于为什么要做分库分表,什么是水平分表,垂直分表等概念,相信大家都知道,这里就不在赘述了. 本文只讲述使用S ...

  9. NatApp 外网映射工具

    外网映射工具 在做微信开发或者是对接第三方支付接口时,回调接口可能需要外网访问,这时候开发者在本地测试的时候,需要用到外网测试工具.常用的外网测试工具有natapp.ngrok NatApp简介服务器 ...

  10. B 蒜头君的树

    时间限制 : - MS   空间限制 : - KB  评测说明 : 2s,256m 问题描述 蒜头君有一棵有根树,树的每一边都有边权,蒜头君想知道任意两点间最短距离之和为多少. 另外,由于各种原因,蒜 ...