Ale*_*lex 9 high-availability h2
在浏览了H2开发人员指南之后,我仍然不明白如何在发生临时网络故障时找出哪些集群节点发生故障以及哪些数据库需要恢复.
让我们考虑以下场景:
SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME='CLUSTER'如果群集中的一个节点发生故障,则开始响应空字符串)在此之后,目前还不清楚如何找出哪些节点出现故障?显然,我可以做一些基本的检查,如比较DB大小,但它是不可靠的.
什么是建议的过程来找出群集中缺少的节点,尤其是 如果上面的查询响应空字符串?
另一个问题 - 为什么urlTarget不支持多个参数?如果群集中的多个节点出现故障并且我想恢复多个节点,我应该如何使用CreateCluster工具?
另外我不明白如果我不得不停止群集并且我不想实际恢复任何节点,CreateCluster如何工作?我不清楚的是,如果我实际上不需要复制数据库,我需要传递给CreateCluster工具.
小智 1
这是部分正确的SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME='CLUSTER',在标准模式下查询时将返回空字符串。
但是,您也可以使用以下方法获取服务器列表Connection.getClientInfo(),但这是一个两步过程。转述自h2database.com:
返回的属性列表getClientInfo()包括一个numServers返回连接列表中服务器数量的属性。 getClientInfo()还有属性 server0..serverN,其中 N 是服务器数量 - 1。因此,要从列表中获取第二个服务器,请使用 getClientInfo('server1')。
注意:serverX 属性仅返回 IP 地址和端口,而不返回主机名。
在您说简单复制之前,是的,这是默认操作,但是您可以在集群 H2 中执行超出问题范围的更高级操作。
这是您所谈论内容的引用:
集群只能在服务器模式下使用(嵌入式模式不支持集群)。可以使用 CreateCluster 工具重新创建集群,而无需停止其余服务器。仍然连接的应用程序会自动断开连接,但是当附加 ;AUTO_RECONNECT=TRUE 时,它们将从中恢复。
所以,是的,如果集群停止,auto_reconnect 未启用,并且您坚持使用基本查询,您就会陷入困境并且很难找到信息。虽然大多数人会告诉您查看 API 和/或手册,但他们不必查看这个,所以我表示同情。
我发现跟踪错误代码更有用,因为当您看到故障是如何计划的时,您会真正了解自己可以做什么......就这样吧。