目录
1. 前言
2. 安装
3. 配置文件详解
4. 工作原理
5.Linux 下托管. NET Core 项目
6.Linux 下. NET Core 项目负载均衡
7. 负载均衡策略详解
8.Linux 下. NET Core 项目 Nginx+Keepalived 高可用(主从模式)
9.Linux 下. NET Core 项目 Nginx+Keepalived 高可用(双主模式)
10.Linux 下. NET Core 项目 LVS+Keepalived+Nginx 高可用集群
11. 构建静态服务器
12. 日志分析
13. 优化策略
14. 总结
在上一篇文章我们已经讲过如何使用 Nginx 托管. NET Core 项目, 那么接下来我们就要介绍如何使用 Nginx 作为负载均衡.
1. 什么是负载均衡?
Load balancing, 即负载均衡, 是一种计算机技术, 用来在多个计算机(计算机集群), 网络连接, CPU, 磁盘驱动器或其他资源中分配负载, 以达到最优化资源使用, 最大化吞吐率, 最小化响应时间, 同时避免过载的目的.
2. 有什么作用?
1, 解决并发压力, 提高应用处理性能(增加吞吐量, 加强网络处理能力);
2, 提供故障转移, 实现高可用;
3, 通过添加或减少服务器数量, 提供网站伸缩性(扩展性);
5, 安全防护;(负载均衡设备上做一些过滤, 黑白名单等处理)
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(这里的 IP 根据具体环境变化), 我们修改 ServerName 为 ".Net Core Nginx Server 1", 发布到 132 这台服务器上. 然后修改 ServerName 为 ".Net Core Nginx Server 2", 发布到 133 这台服务器上. 发布完之后, 我们在 Postman 验证下效果.《.NET Core 项目部署到 Linux(Centos7)(六)发布. NET Core 项目到 Linux》
这样我们单独去访问这两台服务器站点都是正常的, 但是这样我们是无法做负载均衡的, 用户只能访问一个站点, 因为只能公布一个入口, 那么下面我们就部署 Nginx 负载均衡服务器, 用它来把用户的请求转发到这两个站点的其中一个.
我们先新建一个虚拟机, 然后用 yum 安装 Nginx,《Nginx 知多少系列之 (二) 安装》 , 安装后如下图
这一台服务器是 192.168.157.134, 我们按照前面介绍的为 Nginx 开机自启动以及开放对应的防火墙端口.
接下来我们就要做负载均衡配置了.
- # 进入 nginx 目录
- cd /etc/nginx
- # 编辑 nginx.conf
- sudo VIM nginx.conf
- # 按 i 进入插入模式
- # 注释下面的内容
- # server {
- # listen 80 default_server;
- # listen [::]:80 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 {
- listen 80;
- location / {
- proxy_pass http://netCoreDemo;
- }
- }
- # 按 Esc, 然后: wq 保存退出
- # 重启 Nginx
- sudo nginx -s reload
配置负载均衡就是这么简单哦, 当然下面我们还会介绍负载均衡的策略. 不过我们先来验证下效果吧, 有图有真相.
第一次访问:
第二次访问:
哦豁, 看到效果了么, 第一次访问是在 132 的站点, 第二次访问是在 133 的站点, 简单的负载均衡已经实现了. 这里的策略我们没有做更改, 在 Nginx 里默认的方式是轮询, 每个请求按照时间顺序轮流分配到不同的后端服务器.
下一篇文章将会详细的讲解 Nginx 负载均衡的策略, 目前暂不包含商业策略的讲解.
来源: https://www.cnblogs.com/jayjiang/p/12700782.html