我在独立恢复模式下遇到了一个小问题。
假设有一个应用程序A在群集中运行。由于某些问题,整个群集与应用程序A一起关闭。
然后,群集重新上线,然后主人进入“恢复”状态。模式,因为它看到一些应用程序,工作人员和驱动程序已经从Persistence Engine进入集群。在恢复过程中,应用程序重新上线,但现在它将具有不同的ID,让我们说B.
但是,根据主程序,应用程序注册逻辑,此应用程序B将不会添加到“等待应用程序”中。消息""尝试在同一地址"重新注册申请。 [1]
private def registerApplication(app: ApplicationInfo): Unit = {
val appAddress = app.driver.address
if (addressToApp.contains(appAddress)) {
logInfo("Attempted to re-register application at same address: " + appAddress)
return
}
这里的问题是,master正在尝试恢复不再存在的应用程序A.因此,在恢复过程之后,应用程序A将被删除。然而,应用程序A的继任者,应用程序B也被省略了等待应用程序'列表,因为它与之前的App A具有相同的地址。
这会在群集中创建死锁,群集中可以使用app A或app B.
当主服务器处于RECOVERING模式时,不应该首先将所有注册应用程序添加到列表中,然后在完成恢复后(一旦删除不成功的恢复),请部署新的应用程序?
这可以解决IMO这个僵局吗?
期待收到你的来信。最好