检测和恢复故障的 H2 集群节点

Detecting and recovering failed H2 cluster nodes

在阅读了 H2 开发人员指南后,我仍然不明白如何找出哪个集群节点 was/were 发生故障以及在发生临时网络故障时需要恢复哪个数据库。

让我们考虑以下场景:

在这一点之后,不清楚如何找出哪些节点出现故障? 显然,我可以做一些基本的检查,比如比较数据库大小,但它不可靠。

  1. 找出集群中缺少哪个节点的推荐程序是什么,尤其是。如果上面的查询以空字符串响应?

  2. 另一个问题 - 为什么 urlTarget 不支持多个参数? 如果集群中的多个节点发生故障并且我想恢复多个节点,我应该如何使用 CreateCluster 工具?

  3. 另外,如果我不得不停止集群并且我不想实际恢复任何节点,我不明白 CreateCluster 是如何工作的?我不清楚的是,如果我实际上不需要复制数据库,我需要将什么传递给 CreateCluster 工具。

部分正确SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME='CLUSTER',在标准模式下查询时return将是一个空字符串。

不过,您也可以使用 Connection.getClientInfo() 获取服务器列表,但这是一个两步过程。转述自 h2database.com

getClientInfo() 编辑的属性列表 return 包括一个 numServers 属性 return 连接列表中的服务器数量. getClientInfo() 还具有属性 server0..serverN,其中 N 是服务器数量 - 1。因此,要从列表中获取第二台服务器,请使用 getClientInfo('server1')。

Note: The serverX property only returns IP addresses and ports and not hostnames.

在你说简单复制之前,是的,这是默认操作,但你可以在集群 H2 中做你的问题范围之外的更高级的事情。

这是你所说内容的引述:

Clustering can only be used in the server mode (the embedded mode does not support clustering). The cluster can be re-created using the CreateCluster tool without stopping the remaining server. Applications that are still connected are automatically disconnected, however when appending ;AUTO_RECONNECT=TRUE, they will recover from that.

所以是的,如果集群停止,auto_reconnect 未启用,并且您坚持使用基本查询,您将被卡住并且很难找到信息。虽然大多数人会告诉您通读 API 和/或手册,但他们不必通读这本手册,所以,我表示同情。

我发现跟踪错误代码更有用,因为当您看到故障是如何计划的... here you go.