nginx

本文最后更新于:2 年前

Nginx负载均衡配置

image-20220724181955601

将java项目打包并启动

这里为了有效果,打包了两份,当访问接口时,控制台打印不同的日志

java -jar .\api-2.0.1-8081.jar --server.port=8081
java -jar .\api-2.0.1-8082.jar --server.port=8082

配置nginx

#user  nobody;
worker_processes 4;

#pid        logs/nginx.pid;
events {
     worker_connections 40960;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    #access_log  logs/access.log  main;
     sendfile  on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
     keepalive_timeout 65;

    #gzip  on;

    upstream myservice {
        server 127.0.0.1:8081;
	    server 127.0.0.1:8083;
	    # server 127.0.0.1:8847;
    }

    server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass http://myservice;
        }
    }

	#include vhosts.conf;
    map $time_iso8601 $logdate {
        '~^(?<ymd>\\d{4}-\\d{2}-\\d{2})' $ymd;
        default                       'date-not-found';
    }
	include vhosts/*.conf;

	 client_max_body_size  50m;
     client_body_buffer_size 60k;
     client_body_timeout 60;
     client_header_buffer_size 64k;
     client_header_timeout 60;
     error_page 400 /error/400.html;
     error_page 403 /error/403.html;
     error_page 404 /error/404.html;
     error_page 500 /error/500.html;
     error_page 501 /error/501.html;
     error_page 502 /error/502.html;
     error_page 503 /error/503.html;
     error_page 504 /error/504.html;
     error_page 505 /error/505.html;
     error_page 506 /error/506.html;
     error_page 507 /error/507.html;
     error_page 509 /error/509.html;
     error_page 510 /error/510.html;
     
     keepalive_requests 100;
     large_client_header_buffers 4 64k;
     reset_timedout_connection on;
     send_timeout 60;
     sendfile_max_chunk 512k;
     server_names_hash_bucket_size 256;
}
     worker_rlimit_nofile 100000;

主要配置内容为

upstream myservice {
    server 127.0.0.1:8081;
 server 127.0.0.1:8083;
 # server 127.0.0.1:8847;
}

server {
listen       80;
server_name  localhost;

location / {
    proxy_pass http://myservice;
    }
}

启动nginx即可

**当启动ngin没反应时,多半是配置文件有问题,可以直接拷贝正确的配置后修改

Nginx负载均衡策略

前端/用户所有对Tomcat(应用服务器)的请求都是通过Nginx转发的:
用户请求发送到nginx,nginx转发的对应的服务器,一个集群中有多个服务器节点,那么Nginx怎么确定转发到哪个服务器节点呢?
Nginx提供了四种负载均衡策略,同时也支持配置第三方的负载均衡策略。

轮询

根据用户的请求交替的发送到每个服务器节点,是nginx默认的负载均衡策略

upstream myservice {
    server 127.0.0.1:8081 max_fails=3 fail_timeout 20s fail_time=100s;
    # 如果在20s内失败了三次 则让该服务器停止100s
 server 127.0.0.1:8082;
 server 127.0.0.1:8083;
 server 127.0.0.1:8084 backup; 
 # 备用机
 server 127.0.0.1:8085 down;
 # 该服务器永远都用不上
}
  • max_fails设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了
  • fail_timeout 与max_fails结合使用
  • fail_time服务器会被认为停机的时间长度,默认为10s
  • backup标记该服务器为备用服务器,当主服务器停止时,请求会被发送到它这里
  • down标记服务器永久停机了

权重

 upstream myservice {
       server 127.0.0.1:8081 weight=2;
    server 127.0.0.1:8082;
    server 127.0.0.1:8083;
}
  • 权重方式,在轮询策略的基础上指定轮询的几率(根据服务器性能和资源情况设置对应权重比)
  • weight参数用于指定轮询几率,weight的默认值为1,weight的数值与访问比率成正比
  • 权重越高分配到需要处理的请求越多
  • 此策略比较适合服务器的硬件配置差别比较大的情况

ip_hash

指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。

 upstream myservice {
 	    ip_hash;  # 保证每个用户固定访问同一个后端服务器
       server 127.0.0.1:8081 weight=2;
    server 127.0.0.1:8082;
    server 127.0.0.1:8083;
}

least _conn

把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least _conn这种方式就可以达到更好的负载均衡效果。

 upstream myservice {
 	    least _conn;  # 把请求转发到连接数较少的fu
       server 127.0.0.1:8081 weight=2;
    server 127.0.0.1:8082;
    server 127.0.0.1:8083;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

 目录

Copyright © 2020 my blog
载入天数... 载入时分秒...