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 ...
随机推荐
- 6. concat_ws用法
select CONCAT_WS('-', e.audit_one_name, e.audit_second_name) from t_audit_item_name e where e.id= ...
- Swift5.2 新特性
Print 函数传参新格式 let param = "参数" print(#"这是一个\#(param) xxxxx"#) 允许在模块中定义和标准库中名称一样的 ...
- Swift 4.0 中的错误处理及抛出错误
在Swift的标准库,很多方法名后都带有'throws'这个关键词, 'throws'表示该方法在执行过程中遇到错误则抛出,但不会crash. 下面是Swift标准库中的一个构造方法,String.D ...
- mysql存储过程简单用法
show procedure status 查看所有存储过程 <!-- 简单存储过程 --> 先将结束符改成// delimiter // create procedure query ...
- PHP之从反向删除单链表元素的问题谈起
在完成一个单链表的删除指定元素的题目中,我发现了一件神奇的事情,php对象赋值给另外一个变量后,可以如同引用传值一般继续利用新的变量来实现链表的链接. 后面经过查证后发现: PHP7.0版本除了对象, ...
- Python 趣题
如何优雅判断list为空 list_temp = [] if list_temp: # 存在值即为真 else: # list_temp是空的 在Python中,False,0,'',[],{},() ...
- Building Applications with Force.com and VisualForce (DEV401) (二三):Visualforce Componets (Tags) Library Part III
Dev401-024:Visualforce Pages: Visualforce Componets (Tags) Library Part IIIStatic Resources1.Static ...
- OpenCV-Python 如何使用背景分离方法 | 四十六
目标 背景分离(BS)是一种通过使用静态相机来生成前景掩码(即包含属于场景中的移动对象像素的二进制图像)的常用技术. 顾名思义,BS计算前景掩码,在当前帧与背景模型之间执行减法运算,其中包含场景的静态 ...
- Centos7 中打开和关闭防火墙及端口
1.firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status f ...
- VLAN基础
VLAN(Virtual Local Area Network)的中文名为"虚拟局域网".是将一个物理的局域网在逻辑上划分成多个广播域,从而实现二层隔离的技术. 一.VLAN的优点 ...