nginx
本文最后更新于:2 年前
Nginx负载均衡配置
将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 协议 ,转载请注明出处!