准备工作
解压另一个tomcat,并且与上一个命名不同,
打开其中一个修改其端口号
打开/Tomcat/tomcat82/conf/server.xml
改变端口号
改变关闭端口号
然后改变一下首页内容,好分辨
/Tomcat/tomcat82/webapps/ROOT/index.jsp
我这里改变的是8081
前提准备好
如果一个服务由多条服务器提供,需要把负载分配到不同的服务器处理,需要负载均衡。
负载均衡策略:转发特定服务器所遵循规格,nginx 的 upstream目前支持 五种方式的分配
1)、轮询(默认),默认:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 (权重/加权),权重越高分配的请求越多,权重越低,请求越少。默认是都是1
3)、ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4)、fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5)、url_hash(第三方):按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。日常使用轮询或weight
1、轮循
修改/etc/nginx/conf.d/default.conf
upstream mytomcat {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
# root /usr/share/nginx/html;
#index index.html index.htm;
proxy_pass http://mytomcat/;
}
你所配置的 upstream 的 name 是自定义的,但是不要出现 -
号,否则会和 tomcat 有冲突。
你持续访问 http://127.0.0.1
你会发现页面的内容会是交替出现 8080
端口和 8081
端口
2、加权轮循
加权轮循就是在轮循的基础上,为每个单点加上权值。权值越重的单点,承担的访问量自然也就越大。
upstream myServer{//要代理的服务器
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
按照上述配置,8081
端口的服务将承担 2/3 的访问量,而 8080
端口则承担 1/3 的访问量。
将配置改为上述样子并重启 Nginx 后,再持续访问 http://127.0.0.1
你会发现 8080
端口和 9090
端口会以 1-2-1-2-...
的次数交替出现。
除了 weight 外,常见的状态参数还有:
配置方式 | 说明 |
---|---|
max_fails | 允许请求失败次数,默认为 1 。通常和下面的 fail_timeout 连用。 |
fail_timeout | 在经历了 max_fails 次失败后,暂停服务的时长。这段时间内,这台服务器 Nginx 不会请求这台 Server |
backup | 预留的备份机器。它只有在其它非 backup 机器出现故障时或者忙碌的情况下,才会承担负载任务。 |
down | 表示当前的 server 不参与负载均衡。 |
例如
upstream myServer {
server 192.168.78.128 weight=1 max_fails=1 fail_timeout=30s;
server 192.168.78.200 weight=2 max_fails=1 fail_timeout=30s;
server 192.168.78.201 backup;
server 192.168.78.210 down;
}
3.ip_hash 负载
ip_hash 方式的负载均衡,是将每个请求按照访问 IP 的 hash 结果分配,这样就可以使来自同一个 IP 的客户端固定访问一台 Web 服务器,从而就解决了 Session 共享问题。
upstream mytomcat {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
使用上例配置后,你会发现无论你请求多少次 http://127.0.0.1
你所看到的端口始终是 8080
和 8081
中的某一个。
然后启动两个端口的Tomcat,再启动nginx,访问端口号
然后再刷新或者再次访问这个端口,就达到效果了