服务器集群,是经过多个服务器共同处理负荷,实现负载均衡分担压力的一种措施.但是随之而来也有一些问题:根据用户的反向代理的调用.用户不清楚本身到底访问的是哪台服务器.那么应该如何测试负载均衡呢???java
咱们能够经过1个url请求获取访问服务器端口号便可.nginx
如今项目中application.yml文件中修改端口为8081,再经过@value动态赋值为属性,代码以下:浏览器
@RestController public class PortController { /** * 经过Spring容器动态获取YML配置文件中的端口便可 */ @Value("${server.port}") private int port; @RequestMapping("/getPort") public String getPort(){ return "当前访问的端口号为:"+port; } }
这样当咱们访问项目的getPort映射时就会显示对应服务器的端口号,能够依据此端口号来进行测试.tomcat
咱们将项目系统打成3个war包程序. 端口号分别为8081/8082/8083,以后经过java命令(java -jar 808X.war)启动3个cmd窗口也就是3台服务器.服务器
项目打包:
先修改端口号以后,将maven进行clean/install打包操做.app
经过java -jar 808X.war将项目发布后而后依次在浏览器进行访问测试.负载均衡
咱们如今须要经过manage.com的方式访问服务器时,要求经过反向代理的方式实现.要求配置nginx中集群.maven
#配置后台管理系统 server { listen 80; server_name manage.jt.com; location / { #root 表明文件目录 #index 表明默认的访问页面 #proxy_pass 表明发起url请求 proxy_pass http://jtW; } } #配置集群的关键字 经过集群配置tomcat服务器便可 #默认: 1.轮询的机制 upstream jtW { server 127.0.0.1:8081; server 127.0.0.1:8082; server 127.0.0.1:8083; }
根据配置文件的顺序,以后依次访问服务器. 该策略也是默认的机制.测试
#默认: 1.轮询的机制 upstream jtW { server 127.0.0.1:8081; server 127.0.0.1:8082; server 127.0.0.1:8083; }
公司采购服务器都是有时间间隔的. 可是因为服务器新旧不一样,硬件版本不一样,致使服务器处理能力不一样.
若是上述的问题不作处理,依然采用轮询的机制,则会出现严重的负载不均衡的现象.
因此须要经过权重的方式平衡压力,weight值越大.url
#配置集群的关键字 经过集群配置tomcat服务器便可 #默认: 1.轮询的机制 2.权重策略 upstream jtW { server 127.0.0.1:8081 weight=6; server 127.0.0.1:8082 weight=3; server 127.0.0.1:8083 weight=1; }
当某些业务须要用户特定的访问固定的服务器时,就要选用iphash机制.
#默认: 1.轮询的机制 2.权重策略 3.IPHASH upstream jtW { ip_hash; server 127.0.0.1:8081 weight=6; server 127.0.0.1:8082 weight=3; server 127.0.0.1:8083 weight=1; }
能够了解一下iphash是如何选择服务器的:
会经过ip地址的hash值对服务器数量进行取模,而后只访问取模为零的服务器,只有该服务器宕机后才会再访问其余的.
若是tomcat服务器发生了宕机的现象,则经过配置文件标识down的属性,则nginx将不会再次访问故障机.server 127.0.0.1:8081 down;
一般状况下 都会部署一些备用机防止因为主机宕机,剩余的机器不能实现高负责从而致使整个服务宕机的问题.
若是设置了备用机,则正常状况下用户不会访问.可是当主机宕机或者主机遇忙时才会访问.server 127.0.0.1:8083 backup;
1).max_fails=1 配置nginx访问服务器的最大的失败次数.
2).fail_timeout=60s; 理解为一个时间周期. 若是发现服务器宕机,则在60秒内不会再次访问故障机.server 127.0.0.1:8081 max_fails=1 fail_timeout=60s;