如何在不停机的情况下重新部署springboot应用程序

时间:2018-11-29 09:26:48

标签: spring-boot tomcat downtime hot-reload

我的资源有限,因此无法使用docker&kubernetes设置完整的microservices体系结构,并且我的应用一直在为用户服务。

我必须为每个新版本/修复程序重新部署我的应用程序,您知道如何在最少的停机时间内实现这一目标吗?

有关我的应用的信息:

  • 服务器中的启动时间:80 seconds
  • 端口:8080
  • 应用服务器:embedded tomcat
  • 春季启动版:2.0.1.RELEASE
  • 我落后于公司的nginx反向代理。
  • 包装:jar
  • 阶段:production

我想到了这个解决方案:

  • 设置内部nginx,该端口在端口8080而不是我的应用程序上侦听并转发到新端口。
  • 每次要部署时,我都在一个新的其他端口中启动我的应用程序,并更改nginx conf,然后重新加载它。

有没有人以前遇到过这个问题?或任何想法如何实现它?

谢谢。

1 个答案:

答案 0 :(得分:2)

请运行公司nginx代理的人员在应用程序的两个实例之间进行负载平衡,例如一个在8080上运行,另一个在8081上运行。然后,您可以一次更新一个应用程序。您可能还需要外部化某些内容,例如在单独的主机上运行任何会话管理,而不是依赖于内存中会话处理。

upstream production {
    server 123.456.789:8080;
    server 123.456.789:8081;
}

server {
    listen 80;
    server_name some.host;
    location / {
        proxy_pass http://production;
    }
}

https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

您将需要能够动态configure Spring Boot's server port以使应用程序在单独的端口上进行侦听。另外,您也可以使它们在单独的主机上运行。