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 ...
随机推荐
- Natas8 Writeup(常见编码、php函数)
Natas8: 同样给了php源码,审计源码,发现给了一个预设参数encodedSecret,以及一个加密函数encodeSecret, 该函数将secret参数先进行base64编码.然后用strr ...
- 搭建XSS测试平台
XSS测试平台是测试XSS漏洞获取cookie并接收web页面的平台,XSS可以做js能做的所有事情,包括但不限于窃取cookie,后台增删文章.钓鱼.利用xss漏洞进行传播.修改网页代码.网站重定向 ...
- 手把手教大家如何用scrapy爬虫框架爬取王者荣耀官网英雄资料
之前被两个关系很好的朋友拉入了王者荣耀的大坑,奈何技术太差,就想着做一个英雄的随查手册,这样就可以边打边查了.菜归菜,至少得说明咱打王者的态度是没得说的,对吧?大神不喜勿喷!!!感谢!!废话不多说,开 ...
- Element没更新了?Element没更新,基于El的扩展库更新
think-vuele 基于Vue和ElementUI框架进行整合二次开发的一个框架.提供一些elementUI没有的或当时没有的控件.优化了或简化了便于2B软件开发的一些控件 demo:http:/ ...
- 基于 websocket 的多端桥接平台
我们现在的业务是基于新闻客户端实现的,都要经过新闻客户端的环境,进行前后端数据上的交互.但是我们在调试过程中,非常的不方便. 通常使用的工具有:modheader, postman, fiddler ...
- hdu1072 逃离迷宫系列 bfs
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1072/ 题意:逃离迷宫,路中可能有炸弹,总时间是6个单位,在有炸弹的位置,如果到达的时刻时间大于0,则恢复到6时 ...
- 数据库-Mysql语句
Mysql语句 不定时更新 1.数据库相关的语句 /* 数据库操作 */ ------------------ -- 启动MySQL net start mysql -- 接与断开服务器 mysql ...
- C# 获取基类或者接口的所有继承类方法
static class ReflectionHelper { public static IEnumerable<T> CreateAllInstancesOf<T>() { ...
- iOS 图片圆角性能
通常设置圆角方式 imageView.clipsToBounds = YES; imageView.layer.cornerRadius = 50; 这样设置会触发离屏渲染,比较消耗性能.比如当一个页 ...
- 《java编程思想》操作符
1. 自动递增和递减 递增和递减运算是两种相当不错的快捷运算,递减操作符是 "--",意为减少一个单位,递增操作符是 "++",意为增加一个单位.这两个操作符各 ...