记一次nginx+tomcat集群用户无感知更新程序问题

编程

nginx">upstream    servers{

#server 172.25.67.29:9091 weight=1 max_fails=1 fail_timeout=50;

server 172.25.67.29:9091;

server 172.25.67.27:9091;

server 172.25.67.27:8380;

}

如上图。这样做的话重启其中一台tomcat没啥问题。但是启动的时候由于服务比较大 加载比较快。然后tomcat又是一启动就初始化端口导致项目启动一半时,如果用户访问就可能造成请求等待响应。

这个时候用户一般都是懵逼的情况。然后估计就打电话说系统慢了。。。搞不好一些关键的请求 例如 支付等等会出现问题。

那么怎么做才能在服务启动的时候让nginx把这台服务down呢?

 upstream    servers{

#server 172.25.67.29:9091 weight=1 max_fails=1 fail_timeout=50;

server 172.25.67.29:9091 max_fails=10 fail_timeout=100;

server 172.25.67.27:9091 max_fails=10 fail_timeout=100;

server 172.25.67.27:8380 max_fails=10 fail_timeout=100;

#max_fails 表示访问服务出现多少次错误就然后服务down掉 fail_timeout 时间。 这个就是 出现10次错误 就让服务down掉100秒 不配置 默认是1次

#max_fails 究竟哪些错误会算到max_fails 呢 目前试了一个[error] 26726#0: *130141 connect() failed (111: Connection refused) while connecting to upstream。和upstream timed out (110: Connection timed out) while reading response header from upstrea 就是服务停了或者超时 端口访问不到的情况

}

location ^~ /servers {

proxy_pass http://servers;

proxy_redirect off;

# proxy_redirect http:// https://;

proxy_set_header Host $host:$server_port;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

client_max_body_size 50m;

client_body_buffer_size 256k;

proxy_connect_timeout 300s; #与服务器连接超时。一般内网个的这个都没啥用

proxy_send_timeout 300s; #后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据 这个一般返回大量数据的时候有用。一般也没啥用

proxy_read_timeout 100s; #可以说是后端服务器处理请求的时间。 超过这个时间后端没返回就抛504还是502来着?

proxy_buffer_size 16k;

proxy_buffers 4 32k;

proxy_busy_buffers_size 64k;

proxy_temp_file_write_size 64k;

#proxy_next_upstream error timeout http_504 http_500; 不定义重发错误了。没必要 都出现500了 别的服务器也不好说

}

上面这样做有一个问题 就是 这个重试时间很难定义。 万一服务10s就启动了 那就还得空等90s 。不太好。 还有些请求时间很长超时了 但是服务并没有问题。这样也会将服务down掉。 万一用户瞎搞 不停的点 不停的超时。那就把所有服务都搞挂了。  百度了一堆也没啥解决方案。

自己偷偷想了个方案。 用服务器防火墙来弄。 关闭服务的时候把服务端口用防火墙禁用掉。 等启动完成了再将端口放开。。这个方法也是有够麻烦的。

nginx解决了。tomcat的问题还没解决。 服务里有很多很慢的请求。那么关闭tomcat 这些请求也就中断了。

百度了一下 都说使用 kill -15  进程号   或者  shutdown.sh  但是 测试过并不好使  。确实优雅 但是  也不会等请求处理完毕了才关闭。没一会服务就会关了。但是会触发事务回滚。 短一点的请求还能返回。长一点的基本没戏。

 

以上是 记一次nginx+tomcat集群用户无感知更新程序问题 的全部内容, 来源链接: utcz.com/z/516031.html

回到顶部