Nginx知多少系列之(六)Linux下.NET Core项目负载均衡
目录
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项目负载均衡的更多相关文章
- Nginx知多少系列之(五)Linux下托管.NET Core项目
目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ...
- Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)
目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...
- linux下一个apache+tomcat负载均衡和集群
先说一下我的环境 一个ubuntu虚拟机, 一个apache2.2示例 两tomcat1.7示例 1.安装apacheserver sudo apt-get install apache2 假设要重新 ...
- Nginx知多少系列之(七)负载均衡策略
目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...
- Nginx知多少系列之(一)前言
目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.Linux下.NET Core项目Nginx+ ...
- Nginx知多少系列之(二)安装
目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ...
- Nginx知多少系列之(三)配置文件详解
目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ...
- .Neter玩转Linux系列之六:Linux下MySQL的安装、配置、使用
一.Linux安装MySQL (1)下载安装包:https://dev.mysql.com/downloads/mysql/ (2)解压并安装 命令:tar zxvf 文件名 解压完成之后,重名一下文 ...
- .Neter玩转Linux系列之三:Linux下的分区讲解
基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...
随机推荐
- JVM 常用参数一览表(转)
参数 默认值或限制 说明 参数 默认值 功能 -XX:-AllowUserSignalHandlers 限于Linux和Solaris,默认不启用 允许为java进程安装信号处理器,信号处理参见类:s ...
- defer 链如何被遍历
去年开始写文章的第一篇就是关于 defer,名字比较文艺:<Golang 之轻松化解 defer 的温柔陷阱>,还被吐槽了.因为这篇文章,到<Go 夜读>讲了一期.不过当时纯粹 ...
- iOS包重签名工具,ipa文件重签名,快速签名,SignTool签名工具,好用的签名工具,App重签名
新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 QQ交流群:811715780 进入 Proje ...
- CVE-2019-3396:Confluence未授权模板注入_代码执行
title: Confluence未授权模板注入/代码执行(CVE-2019-3396) tags: [poc,cve] 简介 Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企 ...
- CMDB资产采集方式
一:Agent方式 原理:在每台服务器装上agent客户端程序,定时向数据库发送指定的资产信息. 优点:速度快. 缺点:服务器上需要多装一个软件 import subprocess import re ...
- hdu1686kmp果题
kmp字符串匹配原理参考博客:https://blog.csdn.net/bqw18744018044/article/details/90516750 代码如下:(写一遍模板) #include&l ...
- OpenCV-Python 轮廓分层 | 二十五
目标 这次我们学习轮廓的层次,即轮廓中的父子关系. 理论 在前几篇关于轮廓的文章中,我们已经讨论了与OpenCV提供的轮廓相关的几个函数.但是当我们使用cv.findcontour()函数在图像中找到 ...
- TensorFlow v2.0的基本张量操作
使用TensorFlow v2.0的基本张量操作 from __future__ import print_function import tensorflow as tf # 定义张量常量 a = ...
- TensorFlow系列专题(六):实战项目Mnist手写数据集识别
欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! 目录: 导读 MNIST数据集 数据处理 单层隐藏层神经网络的实现 多层隐藏层神经 ...
- R与金钱游戏:美股与ARIMA模型预测
似乎突如其来,似乎合情合理,我们和巴菲特老先生一起亲见了一次,又一次,双一次,叒一次的美股熔断.身处历史的洪流,渺小的我们会不禁发问:那以后呢?还会有叕一次吗?于是就有了这篇记录:利用ARIMA模型来 ...