high-availability - 如何使外部应用程序与镜像的系统间实例保持同步
问题描述
我们的应用程序建立在 Intersystems IRIS(以前的缓存)之上,由一个大型核心和数据库组成,该数据库通过连接到核心的几个外部模块进行了增强。
我们将 IRIS 和外部应用程序部署在同一台服务器上(出于多种原因)。当我们使用镜像时,我们有几台具有相同内容(IRIS + 外部模块)的服务器充当高可用性镜像系统,其中只有一个节点是“活动”节点,其余节点正在等待。
理想情况下,我们的外部模块在每个节点上的 IRIS 实例之后使用两个可用回调启动和停止。
在镜像中配置时,它们仅在“活动”节点上启动(通过提供的回调)并最初在所有其他节点上停止。当发生故障转移并且“等待”节点之一被提升为“活动”时,外部应用程序将在该提升节点上启动。在降级节点(从“活动”到等待、崩溃或挂起)我们没有停止这些服务的好方法,因为没有来自系统间的回调。
我们正在分析可能的替代方案,但我们将不胜感激任何其他方案以及评论:
- 实现跟踪 IRIS 实例的附加服务
- 使外部模块“镜像”感知
解决方案
我建议多使用一台服务器,您不需要停止/启动服务。只保留镜像,两台服务器,只为镜像,只有数据,没有运行代码,没有用户。还有一台服务器,通过 VIP 作为 ECP 连接到镜像。在这种情况下,您的所有服务都将在该服务器上运行,并且不应该关心状态更改的位置。镜像切换过程中会有短暂的停电,但没有什么致命的。我在生产中有这样的配置,但是我在镜像后面有10台服务器,其中1台只是出于互操作性的原因。我们已经有了一些开关,没有任何问题。
推荐阅读
- python - 这个 Python 代码有什么问题?权限错误:[Errno 13]
- javascript - 这个 Typescript 语法是什么意思
- laravel - 不同的用户类型表 laravel
- llvm - LLVM 函数提升最佳方法
- sql - 连接两个表,使外键列数据(整数)更改为父表中的文本数据(父表中的相关列不是主键)
- gnuplot - Gnuplot:使用调色板时数据点的透明度
- javascript - 在 wordpress 网站上使用 javascript 添加/修改链接
- amazon-web-services - terraform 在分区方面如何处理安装 AWS Elastic Block Store (EBS)?
- python - SQLite 的 Python 编码未填充数据库
- r - R data.table 键和列名。协调