Nginx+Tomcat集群的故障迁移实验
经过前面的集群实施,已经将Nginx+Tomcat的集群环境给配置起来了,接着继续进行集群的故障转移实验.
这里的故障转移包括节点关闭情况和节点宕机情况的故障转移.
首先对于节点关闭或加入的情况,比如某一Tomcat节点关闭或重启的情况,在这种情况下,nginx可以快速识别到已停用或新加入的节点,基本上可以做到无延时的故障转移.所以这里主要实验的是tomcat宕机的情况,比如tomcat运行过程中出现内存溢出或长时间不响应的情况.
为了实验的需要,在tomcat7080的启动参数中增加内存的配置,设置其最大可用内存为64m:
?
日志文件中的输出结果为:
??
从日志输出中可以看到,nginx仍然会尝试去请求已经宕机的7080端口,但在等待60秒之后将请求转发给了6080,然后在大约13秒左右的时间内都只会请求6080端口,然后再去尝试请求7080端口,依次循环.
要解释出现这个现象的原因,需要来看一下集群中server的参数以及proxy_connect_timeout, proxy_read_timeout等参数的设置
?
在nginx中,upstream中的server语法如下:
(参考http://nginx.org/en/docs/http/ngx_http_upstream_module.html)
upstream cluster { server localhost:6080 weight=10 fail_timeout=1m; server localhost:7080 weight=10 fail_timeout=1m; } location / { proxy_pass http://cluster; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 2s; proxy_read_timeout 5s; proxy_send_timeout 5s;}?即可承受的请求响应时间为5s,在故障被检测到之后,1m内不再向故障节点发起新请求.(实际生产环境中可按需要适当进行调整)