Apache ActiveMQ Artemis 提供了两种架构来实现高可用性功能。主代理和备份代理可以使用网络复制或共享存储进行配置。本文档将分享在客户端应用程序连接到代理时,在各种情况下重启代理的序列。
1. 每次重启一个代理
当以定期间隔一次重启一个代理时,不需要遵循任何特定的顺序。我们只需要确保主/备份对中的至少一个代理处于活动状态,以接管来自客户端应用程序的连接。
在客户端应用程序连接的情况下重启代理时,请确保至少有一个代理始终处于活动状态,以服务已连接的客户端。 |
2. 完全关闭代理并启动
如果需要完全关闭代理并重新启动它们,请遵循以下步骤:
-
关闭所有备份代理。
-
关闭所有主代理。
-
启动所有主代理。
-
启动所有备份代理。
此顺序对于网络复制尤其重要,原因如下:如果首先关闭主代理,则备份代理将激活并接受所有客户端连接。然后,当备份代理停止时,客户端将尝试重新连接到最近处于活动状态的代理,即备份代理。现在,当我们启动备份和主代理时,客户端将继续尝试连接到最后一个连接,即备份,并且永远无法连接,直到我们重新启动客户端应用程序。为了避免重新启动客户端应用程序的麻烦,我们必须按照上述顺序操作。
3. 分裂脑情况
以下步骤帮助集群从分裂脑情况中恢复,并使客户端连接自动重新连接到集群。使用此顺序,客户端应用程序不需要重新启动即可与代理建立连接。
在分裂脑情况下,主代理和备份代理都处于活动状态,并且没有从主代理到备份代理的复制。
在这种情况下,可能有一些客户端应用程序连接到主代理,而其他客户端应用程序连接到备份代理。现在,在我们重新启动代理并且集群正确形成之后。
在此,在分裂脑情况下连接到主代理的客户端会自动连接到集群并开始处理消息。但是,连接到备份代理的客户端仍然尝试与该代理建立连接。发生这种情况是因为备份代理已在“备份”模式下重新启动。
因此,并非所有客户端都连接到代理并正常运行。
为避免此类事故,请遵循以下顺序:
-
停止备份代理
-
启动备份代理。观察日志中是否有“等待主代理”消息。
-
停止主代理。
-
启动主代理。观察主代理日志中的“服务器处于活动状态”消息,观察备份代理日志中的“备份已宣布”消息。
-
再次停止主代理。等待备份代理变为活动状态。观察所有客户端是否都连接到备份代理。
-
启动主代理。这次,所有连接将再次切换到主代理。
在分裂脑情况下,消息会在备份代理上生成,因为它处于活动状态。在解决分裂脑情况时,如果备份代理上没有生成一些增量消息。这些消息无法自动恢复。将需要人工干预才能检索这些消息,有时几乎不可能恢复这些消息。上述顺序有助于形成因分裂脑而损坏的集群,并使所有客户端应用程序自动连接到集群,而无需重新启动客户端应用程序。 |