有一台服务器,部署了 jar 包,指定了端口,同时 nginx 反向代理提供服务,但是服务更新的时候,需要更新 jar 包,当前是关闭服务,重新启动,会有 5s 左右的间隔是服务停机,有比较好的办法么?
想过双端口,固定双端口,新服务启动后自动检测没使用的端口,不过操作起来比较复杂,nginx 上也需要很多配置改造,有更好的方案么?
1
leogm9408leo 2022-05-13 10:28:04 +08:00
一般企业级服务也就是多机+前置网关,你提的方案单机多端口+nginx 代理的方案已经是成本很低的方案了,把操作写成脚本也可以一键完成,已经挺好的了
|
2
LeegoYih 2022-05-13 10:28:38 +08:00
一般通过集群方式,比如有 1 个服务有 2 个实例,先重新部署 1 个,然后再重新部署另外 1 个,这样可以保证服务一直可用。
|
3
muhuan OP 只有一个服务器
|
4
kaedeair 2022-05-13 10:36:54 +08:00
docker+traefik 配合 healthy 检查
|
5
yazinnnn 2022-05-13 10:43:39 +08:00
nginx -s reload 有什么复杂的....
|
6
stonewu 2022-05-13 10:50:42 +08:00
单机跑两个实例,两个端口,模拟 AB 发布,成本其实不高,写好脚本基本就没什么成本了
|
7
kytrun 2022-05-13 10:51:53 +08:00 2
恰好最近在折腾这个,用几个 shell 脚本搞定,写了篇文章记录,https://kytrun.com/spring-cloud-graceful-update/
昨天完善了自动切换 nginx upstream 的脚本,upstream 需要分离一个单独的配置文件: https://github.com/kytrun/snippets/commit/5ee01ff652508e029c1f4a860f30109623c6aa80 |
8
yc8332 2022-05-13 10:59:34 +08:00
就是跑两个实例 2 个端口啊。nginx 自动 upstream 就好了。
|
9
whx 2022-05-13 11:05:13 +08:00 via iPhone
在另一个端口启动一个临时服务,启动完成后 nginx 指向临时服务端口。
再重启当前主服务,重启完成后 nginx 再指向主服务端口。 最后关闭临时服务。 |
10
rehoni 2022-05-13 11:28:01 +08:00
实际上就是部署同一服务在两个端口,nginx 自动 upstream ,然后逐个替换服务升级版本就可以了。
|
11
rehoni 2022-05-13 11:28:47 +08:00
顺便想问问 war 包想热部署怎么办...弄两个 tomcat 吗? T 。T
|
12
muhuan OP 其实 nginx 切换还有一个问题是登陆态的改造,我目前没有持久化这部分数据,我改造下;
谢谢大佬们,nginx 的 upstream 学习到了; |
13
lipcao 2022-05-13 15:41:23 +08:00
滚动发布的原理不就是先拉起新的服务然后健康检测,通过了再关掉旧的服务 就是周期时间长
|
14
liuzhaowei55 2022-05-13 15:56:25 +08:00 via iPhone
@muhuan 这个需要优先解决
|
15
asuraa 2022-05-13 15:59:25 +08:00
上 docker 不好么 简单弄个 swarm 自动滚动发布
|
16
oneoyn 2022-05-13 16:00:03 +08:00 1
我用的负载均衡 两个节点 每次更新就是 关闭节点 N 更新节点 N 启动节点 N 写好 shell 脚本 一键更新 很快
|
17
sunwei0325 2022-05-13 16:14:13 +08:00
既然是一个实例, 肯定用的人不多, 趁晚上服务器不注意的时候来一下子?
|
19
muhuan OP @sunwei0325 对的,之前是这样子,不过希望周末开发一点就可以随时更新😀
|
20
Huozy 2022-05-13 17:17:48 +08:00
如果你们能接受对客户停机几秒钟 那可以 kill -几来着 是会在所有接口运行完成之后再 kill 掉进程,再更新重启。
完全是理论,不知道会不会有严重问题 |
21
dqzcwxb 2022-05-13 17:20:15 +08:00
蓝绿发布 滚动发布 灰度发布
|
23
keeguai 2022-05-14 09:21:09 +08:00
用 docker ,同时开两个服务,轮流升级就行了
|
25
seepiner 2022-05-15 17:04:06 +08:00
花半天一天学下 docker swarm ,以后每次部署更新节省的时间是千倍百倍的
|