ale*_*pro 13 java deployment load-balancing high-availability
我正在尝试构建非常轻量级的解决方案,以便为Java应用程序实现零停机部署.为简单起见,我们认为我们有两台服务器.我的解决方案是使用:
在"前端" - 一些负载均衡器(软件) - 我在这里考虑HAProxy.
在"后面" - 两台服务器,都运行Tomcat和已部署的应用程序.
当我们即将部署新版本时
我们使用HAProxy禁用其中一个服务器,因此只有一个服务器(让我们称之为服务器A,运行旧版本)将可用.
在其他服务器上部署新版本(让我们称之为服务器B),运行生产单元测试(如果我们有它们:-)并使用HAProxy启用服务器B,同时禁用服务器A.
现在我们只有一个服务器活动(服务器B,新版本).在服务器B上部署新版本,然后重新启用它.
任何建议如何改善?怎么自动化?
任何现成的解决方案或我必须最终得到我自己的自定义脚本?
谢谢!
滚动升级确实是一个很好的解决方案,前提是您的负载平衡器支持此选项(服务器饥饿)。另一种解决方案是使用支持 OSGi 的应用程序服务器来热替换部分或整个应用程序。
我会推荐第一个。SpringSource 的 AMS 监控控制台可以关闭一个 tcServer 集群(类固醇上的自定义 tomcat),IIRC 自动进行滚动升级(但请查看文档)。
我发现这从一些有趣的解决方案文章关于零停机时间.我想在该文章中仅强调几个解决方案.
1. A/B开关:(滚动升级+回退机构)
我们应该有一组待机模式的节点.我们将新版本部署到这些节点,并立即将流量切换到它们.如果我们将旧节点保持在原始状态,我们也可以进行即时回滚.负载均衡器面向应用程序,并根据请求负责此交换机.
缺点:如果您需要X服务器来运行您的应用程序,那么使用这种方法需要2X服务器.
2.零停机时间
通过这种方法,我们不会保留一组机器; 相反,我们延迟端口绑定.共享资源获取被延迟,直到应用程序启动.应用程序启动后会切换端口,旧版本也会继续运行(没有访问点),以便在需要时立即回滚.
3.并行部署 - Apache Tomcat :(仅适用于Web应用程序)
Apache Tomcat已将并行部署功能添加到其第7版.他们让两个版本的应用程序同时运行,并将最新版本作为默认版本.
4.延迟端口绑定:
我们在这里建议能够启动服务器而不绑定端口,基本上没有启动连接器.稍后,将启动单独的命令并绑定连接器.在版本1运行且已绑定时,可以部署该软件的版本2.当稍后启动版本2时,我们可以取消绑定版本1并绑定版本2.使用此方法,节点仅在几秒钟内有效脱机.
5.高级端口绑定:
通过打破神话:' Address already in use',*旧进程和新进程将绑定到同一端口.ON模式下的SO_REUSEPORT选项允许两个(或更多)进程绑定到同一端口.一旦新进程绑定到端口,就终止旧进程.
该SO_REUSEPORT选项解决两个问题:
应用程序版本切换之间的小故障:节点可以始终为流量提供服务,有效地为我们提供零停机时间.
改进调度:
综上所述:
通过结合后期绑定和端口重用,我们可以有效地实现零停机.如果我们保持备用过程,我们也可以立即进行回滚.
| 归档时间: |
|
| 查看次数: |
6102 次 |
| 最近记录: |