Nginx+tomcat 负载均衡发布应用新版本

本文记录在 Nginx+tomcat 负载均衡环境 下,当需要发布新版的tomcat应用时采取的几种方法。

Nginx + tomcat 负载均衡环境下,我们一般会将 tomcat 应用设计为 无状态的,这样无论是对于整个环境的横向扩展,还是发布新应用都是有帮助的。 在开始之前,我们先了解一下几点:

  • nginx 重启很快,但也需要时间
  • nginx 可以实现配置的平滑重新加载
  • tomcat 应用部署需要重新启动

1,逐个 tomcat 节点发布应用

tomcat 发布应用新版本是需要重启,在重启的过程中,nginx 会自动剔除无响应的节点,等重启完成后,nginx 又会将该 tomcat 节点自动添加进来。

这种方式优点就是操作比较简单,缺点是影响用户操作。如果某个用户的操作刚好落在正在发布重启的 tomcat 节点上,必然会受到影响,虽然是短暂的。而在其他 tomcat 继续发布的时候,又会扩大这种影响。

这种方式需要选择用户量最少的时间进行,一般是午夜过后。

2,基于第一种方案的缺点,又结合 nginx 可以对配置平滑加载。可以在发布某个 tomcat 节点前修改 nginx 配置,将该节点剔除,然后重新平滑 reload nginx 的配置文件,发布完成后,再修改回来,再重新 reload nginx 的配置文件。 然后继续发布另外一个 tomcat 节点。

这样的好处就是将对用户的影响减少到最低,缺点就是给运维人员带来很大的工作量,试想一下 tomcat 节点较多的场景。

3,如何减少工作量?

一般我们生产环境下,会有两组 tomcat , 一组用于线上服务(线上组),一组作为备份(备份组)。我们可以先将备份组所有 tomcat 节点部署好,然后修改 nginx 配置文件,切换到备份组,然后操作 nginx 平滑 reload 配置文件。最后再将 线上组 所有 tomcat 节点部署好。 此时 备份组转为线上组,而线上组转为备份组。

这样只修改一次配置文件,相比第二种减少了很多工作量,也就减少了很多出错的机会。