H2数据库群集恢复

时间:2013-05-09 15:01:39

标签: h2

我有一个SpringMVC应用程序,它运行在Apache Tomcat上并使用H2数据库。 该基础结构包含两个运行自己的Tomcat服务器的应用程序服务器(命名为A& B)。我也有一个H2数据库集群。

在一个系统(A)上,我运行了以下命令

java org.h2.tools.Server -tcp -tcpPort 9101 -tcpAllowOthers -baseDir server1

另一方面(B)我跑了

java org.h2.tools.Server -tcp -tcpPort 9101 -tcpAllowOthers -baseDir server2

我在机器A中启动了群集

java org.h2.tools.CreateCluster
-urlSource jdbc:h2:tcp://IpAddrOfA:9101/~/test
-urlTarget jdbc:h2:tcp://IpAddrOfB:9101/~/test
-user sa
-serverList IpAddrOfA:9101,IpAddrOfB:9101

当任何一台服务器关闭时,已经提到过,必须删除失败的数据库,重新启动服务器并重新运行CreateCluster。

我有以下问题吗?

  1. 如果两个服务器都关闭,我怎样才能确定哪个数据库为 删除,以便我可以重新启动该服务器并重新运行群集?
  2. CreateCluster包含urlSource和urlTarget。我需要吗? 特定的,以给他们与以前给出的相同的价值或我 可以互换它们而没有任何副作用吗?
  3. 我是否需要从两台机器上运行CreateCluster命令? 如果是,我是否需要交换urlSource和urlTarget?
  4. 有没有办法知道服务器中的一个服务器是否同时存在 跑?我想要两个都返回IpAddress 它们是up,一个IpAddress如果只有一个是up,否则都不是 落下了。

1 个答案:

答案 0 :(得分:4)

  1. 如果两个服务器都关闭,我如何确定要删除的数据库

    集群的想法是第二个数据库为系统增加了冗余。假设服务器每100天发生一次故障(硬盘故障,电源故障等)。这是99%的可用性。这对您来说可能不够好,这就是您可能希望使用具有两个服务器的群集的原因。这样,即使其中一个服务器每100天发生故障,两个服务器同时发生故障的可能性也非常低。理想情况下,失败的风险是完全独立的。这意味着两者在同一时间失败的风险是10000(100倍100),为您提供99.99%的可用性。两个服务器都已关闭的风险正是群集功能应该阻止的。

  2. CreateCluster包含urlSource和urlTarget。我是否需要具体为他们提供与以前相同的价值

    这取决于您要使用哪一个作为源,哪一个作为目标。源中的数据库将复制到目标。源是您要复制到目标的数据库。

  3. 我是否需要从这两台机器上运行CreateCluster命令?

    没有

  4. 有没有办法知道服务器中的一个服务器是否都在运行?

    您可以尝试打开与它们的TCP / IP连接,以检查侦听器是否正在运行。我通常做的是在命令行上运行telnet <server> <port>