Nginx双机热备

2023年 10月 11日 39.3k 0

目前所接触的项目还不涉及到分布式,都是单机模式。不过好在至今没出过什么大问题,基本能满足客户的需求。

由于数据量不是很大,单机的性能已经可以满足,按理不应该做加法,毕竟部署的越复杂,维护起来就越麻烦。

性能虽然可以满足,但有一个不得不提的痛点:项目无法随时更新。

目前的解决方式是:白天改bug、测试,等到晚上客户不使用系统时才停机维护,效率相对较低。

有没有可能让项目可以随时更新?
答案肯定是有,相对简单的解决方案是:双机热备(应用双活) 。

什么是双机热备?

这里引用一下百度百科的解释。

双机热备是应用于服务器的一种解决方案,其构造思想是主机和从机通过TCP/IP网络连接,正常情况下主机处于工作状态,从机处于监视状态,一旦从机发现主机异常,从机将会在很短的时间之内代替主机,完全实现主机的功能。

就是同时部署两套系统,一主一备。主节点负责对外提供服务,备用节点默认不提供服务,只有在主节点出问题的情况下,备用节点才顶替主节点,继续对外提供服务。

大哥不行了,二弟替一会儿。

可以解决什么问题?

利用这个思路,是否可以实现同时部署AB两套系统,当系统需要更新维护时,停用A服务,B服务顶替A工作。待A服务更新完毕后,A服务启动提供升级后的服务,B服务停用再更新。实现应用的热插拔?

答案当然也是可以的。

纸上得来终觉浅,绝知此事要躬行。

本人写了个小demo亲测!

实现思路

搭建项目前先简单理一下思路。
要做的分为以下几步:
1、启动两套简单的Web服务
2、服务内就两个简单的方法

  • 保存值到Session
  • 从Session取值

3、Nginx配置负载均衡,PC01主,PC02备
3、保存Session到PC01服务,然后停用PC01
4、从PC02服务取值,看PC02能否正常工作并访问Session
如果服务可以无缝切换,Session也都正常则表示成功。

项目环境

  • 两套SpringBoot服务(双活)
  • Redis(实现Session共享)
  • Nginx(负载均衡-主备模式) (也可使用KeepAlived)

为什么需要Redis?

使用多套系统无法避开的一个问题就是Session,再也不能像以前单机模式下直接从request中getSession了,Session是保存在服务器的,多个服务器之间无法共享Session。关于共享Session有很多实现方案,这里采用的是Redis。

搭建步骤

1、先简单看一下前端

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y2fGhbkz-1570936585972)(/blog/image/getImage/39d12f3d-de93-4786-a732-54fb843400c2)]

由于只讲环境搭建,所以项目竟可能的简单。
只有两个功能,保存值到Session和从Session中取值。

const PATH = '/backend/';
//保存到Session
function saveSession() {
const personName = $('#personName').val();
if (personName.length

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论