在Linxu上运行.net core项目并用Nginx做负载均衡服务器

负载均衡:英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行。从网站部署的角度来讲,负载均衡就是将请求转发到相应的服务器上,以避免单台服务器的压力过大,运行不流畅或者服务器崩溃。

一.创建.net core项目

dotnet new mvc -n "Hello"    #创建一个名为Test的.net core MVC项目

修改HomeController  

using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

using Microsoft.Extensions.Configuration;
namespace Hello.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        public IConfiguration _configuration { get; }
        public HomeController(ILogger<HomeController> logger,IConfiguration Configuration)
        {
            _configuration = Configuration;
            _logger = logger;
        }

        public IActionResult Index()
        {
            ViewBag.Url= _configuration["port"];    #运行时传递的port参数用于页面输出,查看效果
            return View();
        }
    }
}

二.配置Nginx

vim /usr/local/nginx/conf/nginx.conf (nginx配置文件默认位置)

   upstream website{
                server localhost:5000;
                server localhost:5001;
                server localhost:5002;
        }

    server {
        listen       80;
        server_name  localhost;
        location / {
                proxy_pass http://website;    #跟上面定义upstream名称保持一致
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection keep-alive;
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
        }

1.轮询(默认方式)

//每个请求按时间顺序逐一分配到不同的后端服务器
upstream website{
                server localhost:5000;
                server localhost:5001;
                server localhost:5002;
        }

 2.权重

根据设置的权重,设置被访问的概率。权重和被访问的概率成正比。权重越大被访问的概率也就越大

//三台主机被访问的概率分别为 30%、30%、40%
upstream website{
      server localhost:
5000 weight=3;
      server localhost:5001 weight=3;
      server localhost:5002 weight=4;
    }

3.ip_hash(非自带)

通过客户端请求ip进行hash计算,再通过hash值选择后端server,这种方式可以有效的解决用户的登录失效问题,若是采用轮询的方式,用户第一次登录时在A服务器上进行登录,A服务器会保存用户的登录信息。当用户刷新时,用户可能访问的是B服务器,此时B服务器中没有用户的登录信息,则需要用户重新登录

upstream website{
                ip_hash;
                server localhost:5000;
                server localhost:5001;
                server localhost:5002;
        }    

4.fair(非自带)

按照后端服务器的处理时间来进行分配,处理时间短的会被优先分配

upstream website{
                server localhost:5000;
                server localhost:5001;
                server localhost:5002;
                fair;
        }    

其他标记设置

  weight=number
  //设置服务器的权重,默认情况下为1。
  max_conns=number
  //限制number到代理服务器的最大同时连接数(1.11.5)。默认值为零,表示没有限制。如果服务器组未驻留在共享内存中,则此限制在每个工作进程中均有效。
  max_fails=number
  //设置在fail_timeout 参数设置的持续时间内应与服务器通信失败的尝试次数,以认为服务器在fail_timeout参数设置的持续时间内不可用 。默认情况下,未成功尝试的次数设置为1。零值将禁用对尝试的记帐。在这里,不成功的尝试是与服务器建立连接时出现错误或超时。
  fail_timeout=time
  //在指定次数的不成功尝试与服务器通信的时间范围内,应考虑服务器不可用,以及服务器将不可用的时间段。默认情况下,该参数设置为10秒。
  backup
  //将服务器标记为备份服务器。当主服务器不可用时,将通过与备份服务器的连接。该参数不能与 哈希和随机负载平衡方法一起使用。
  down
  //将服务器标记为永久不可用。

三.运行项目查看效果

1.后台启动.net core项目

dotnet Hello.dll --urls="http://localhost:5000"  --port=5000 &
dotnet Hello.dll --urls="http://localhost:5001"  --port=5001 &
dotnet Hello.dll --urls="http://localhost:5002"  --port=5002 &

2.启动nginx

nginx源码安装的默认位置:/usr/local/nginx/sbin/nginx

nginx        //启动nginx
nginx -t     //检查配置文件
nginx -s reload     //重新载入配置文件
nginx -s reopen    //重启nginx
nginx -s stop        //停止nginx
nginx -c /usr/local/nginx/conf/nginx.conf      //设置指定配置文件,有时nginx启动或关闭报错,可以用这条命令解决

 

posted @ 2020-07-31 11:41  hello-*-world  阅读(192)  评论(0)    收藏  举报