Nginx配置三台tomcat集群
nginx的负载均衡,配置上游服务器upstream
模块即可。
当前我们有如下三台服务器已配置好tommcat:
192.168.1.173:8080
192.168.1.174:8080
192.168.1.175:8080
然后去nginx.conf
配置文件中的http
模块中添加如下配置:
upstream tomcats {
server 192.168.1.173:8080;
server 192.168.1.174:8080;
server 192.168.1.175:8080;
}
server {
listen 80;
server_name www.tomcats.com;
location /{
proxy_pass httpd://tomcat;
}
}
其中在upstream
模块添加上游服务器,在server的location 中使用proxy_pass 命令指向此代理转发到upstream模块中的server。
Nginx配置负载均衡权重
在如上第一节中的upstream
模块配置其实就是一个轮询
模式的负载均衡配置。我们可以对server加上权重配置以区分。
upstream tomcats {
server 192.168.1.173:8080 weight = 1;
server 192.168.1.174:8080 weight = 2;
server 192.168.1.175:8080 weight = 5;
}
server {
listen 80;
server_name www.tomcats.com;
location /{
proxy_pass httpd://tomcat;
}
}
Upstream 指令参数
max_conns
限制配置的上游服务器的最大连接量。
默认值为0,即不限制。
upstream tomcats {
server 192.168.1.173:8080 max_conns = 2;
server 192.168.1.174:8080 max_conns = 2;
server 192.168.1.175:8080 max_conns = 4;
}
slow_start
注意,只有商业版的nginx可以使用
使得服务器缓慢加入集群,因为集群缓慢启动,有些服务需要逐步启动,流量接入缓慢增加
# 语法: slow_start = time
upstream tomcats {
server 192.168.1.173:8080 weight = 1;
server 192.168.1.174:8080 weight = 2 slow_start = 60s;
server 192.168.1.175:8080 weight = 5;
}
down
使得此服务器访问不了
upstream tomcats {
server 192.168.1.173:8080 weight = 1 down;
server 192.168.1.174:8080 weight = 2 slow_start = 60s;
server 192.168.1.175:8080 weight = 5;
}
backup
标记此台server为备用的机器,当其他所有的server挂掉之后才会使用此机器
upstream tomcats {
server 192.168.1.173:8080 weight = 1 backup;
server 192.168.1.174:8080 weight = 2 slow_start = 60s;
server 192.168.1.175:8080 weight = 5;
}
max_fails
最大失败的重试次数
fail_timeout
失败后多久再次请求,会按照max_fails循环此重试操作
默认值为10s
upstream tomcats {
server 192.168.1.173:8080 weight = 1 backup;
server 192.168.1.174:8080 weight = 2 slow_start = 60s;
server 192.168.1.175:8080 weight = 5 max_fails = 2 fail_timeout = 8s;
}
keepalive
控制常连接的数量
upstream tomcats {
server 192.168.1.173:8080 weight = 1 backup;
server 192.168.1.174:8080 weight = 2 slow_start = 60s;
server 192.168.1.175:8080 weight = 5 max_fails = 2 fail_timeout = 8s;
keepalive 32;
}
ip_hash
将不同的ip 通过hash到不同的server
upstream tomcats {
ip_hash;
server 192.168.1.173:8080 weight = 1;
server 192.168.1.174:8080 weight = 2;
server 192.168.1.175:8080 weight = 5;
}
算法原理:
将ip地址的前24位进行hash ,如192.168.7.1
, hash会使用192.168.1
计算。
注意:
如果添加了ip_hash,那么就不要轻易的移除server,最好使用down参数,这样ip_hash是不会变化的,用户的缓存等就不会发生变化。
一致性哈希算法:
当有一个服务器down后,其hash计算的参数会变化,为了不影响已哈希映射的连接和服务器上的缓存等,这里引入一致性哈希算法:
- 将哈希的结果当做一个闭环
- 服务器映射到环上的点
- 用户的ip映射到环上点,然后顺时针找到第一个服务器即可
url_hash
原理:将url哈希取模服务器节点数,映射到对应的服务器。
hash(url) % node_counts = index
例子:
upstream tomcats {
hash $request_uri; # 通过访问的uri来哈希
server 192.168.1.173:8080 weight = 1;
server 192.168.1.174:8080 weight = 2;
server 192.168.1.175:8080 weight = 5;
}
least_conn
最少连接数的负载均衡算法:根据谁最少连接数就分配给谁
upstream tomcats {
least_conn;
server 192.168.1.173:8080 weight = 1;
server 192.168.1.174:8080 weight = 2;
server 192.168.1.175:8080 weight = 5;
}