场景:我们在发布springboot项目至生产环境时,常常需要停服并启动,这样会影响客户生产环境上的操作
解决方案:使用Nginx的upstream实现热备,ps:当然也可以用springcloud或实现,这里只讲nginx实现
操作:
1、如现在有一个项目jar包为:project.jar ,放到project目录下,启动端口为4020,将项目启动(配置可自行调整):nohup java -Xms512m -Xmx1024m --server.port=4020 project.jar >log.log 2>&1 &
2、复制一份jar包,命名为project-backup.jar,放到project-backup目录下,启动端口为40209,将项目启动(配置可自行调整):nohup java -Xms512m -Xmx1024m --server.port=40209 project-backup.jar >log.log 2>&1 &
3、编辑Nginx配置文件,增加upstream和修改location:
upstream hotload { server 127.0.0.1:4020 max_fails=3 fail_timeout=10s; # 重试3次,超时10秒 server 127.0.0.1:40209 backup; } server { # 此处server配置省略 location /project/ { proxy_pass http://hotload/project/; proxy_redirect off; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
验证方法:尝试访问项目的某个接口,如curl http://127.0.0.1/project/test,并查看两个服务的日志,当主服务未宕机,会将请求都发到主服务,日志会打印
1、使用命令杀掉主服务ps -ef | grep project.jar | awk '{print $2}' | xargs kill -9
2、尝试访问项目接口,看是否能正常访问,查看服务project-backup的log.log文件是否正常打印
本文为胖虎原创文章,转载无需和我联系,但请注明来自胖虎博客panghucat.cn