带你玩转.Net+Nginx负载均衡+服务器宕机解决办法

负载均衡的作用

负载均衡:分摊到多个操作单元上进行执行,和它的英文名称很匹配。就是我们需要一个调度者,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡。
负载均衡这里面涉及的东西相对也是比较多的,理论就不说太多了,网上,书上很多,今天我们就利用Nginx服务器来实现一个简单的负载均衡

我们准备好3个以上的.net web的项目并发布。

在nginx.conf中配置upstream,可以实现负载均衡,负载均衡的作用就是利用多台服务器减轻单台服务器的压力

配置4台.net core服务器,ip:192.168.10.150,192.168.10.151,192.168.10.152,192.168.10.153

都默认8080端口

server {
        listen       80;
        server_name  cnbing.net;
    
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        upstream myupstream {
             #weight 值越大,负载权重越大,请求次数越多           
             #max_fails 允许请求失败的次数,超过次数后,转发到下一个服务器,当有max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查   
             #fail_timeout 指定时间内无响应则失败, 在以后的fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器
             #down 表示当前server不参与负载
             #backup 其他非backup server都忙的时候,backup server作为备用服务器,将请求转发到backup服务器
             server 192.168.10.150:8080 weight=1 max_fails=2 fail_timeout=30s;
             server 192.168.10.151:8080 weight=2 max_fails=2 fail_timeout=30s;
             server 192.168.10.152:8080 down;
             #server 192.168.10.153:8080 down;
        }
        location / {
            #反向代理
            proxy_pass http://myupstream;
            index  index.html index.htm;
        }
        ....

这里启动nginx会出现错误,需要在http大括号第一行加上:server_names_hash_bucket_size 64;
然后就访问nginx地址,如果配置了反向代理,请用反向代理地址也可以访问。访问三次时可以发现150服务器处理了一次,151处理了两次,成功实现了负载均衡

应用服务器宕机

解决办法

配置文件nginx.conf

server {
        listen       80;
        server_name  cnbing.net;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
 
        upstream myupstream {
             #weight 值越大,负载权重越大,请求次数越多             
             #max_fails 允许请求失败的次数,超过失败次数后,转发到下一个服务器,当有max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查   
             #fail_timeout 指定时间内无响应则失败, 在以后的fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器
             #down 表示当前server不参与负载
             #backup 其他非backup server都忙的时候,backup server作为备用服务器,将请求转发到backup服务器
             server 192.168.10.150:8080 weight=1 max_fails=2 fail_timeout=30s;
             server 192.168.10.151:8080 weight=2 max_fails=2 fail_timeout=30s;
             server 192.168.10.152:8080 down;
             #server 192.168.10.153:8080 myupstream;
 
        }
 
        location / {
            proxy_pass  http://myupstream;
            index  index.html index.htm;
            #这里配置宕机检测,都设置为1秒,这是有了负载均衡过后配置的,如果访问时挂了一个服务器,1秒不响应就自动切换到另外应用服务器进行访问
            proxy_connect_timeout 1;
            proxy_send_timeout 1;
            proxy_read_timeout 1;
        }
       ....

 

重启关闭其中一个服务器做测试,关闭后访问,当访问到已经宕机的服务器时,很明显的发现浏览器会加载一秒钟(设置的一秒监听)过后重新定向到另外一台服务器,避免了宕机出现不能访问的情况。