我有一个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。
我有以下问题吗?
答案 0 :(得分:4)
如果两个服务器都关闭,我如何确定要删除的数据库
集群的想法是第二个数据库为系统增加了冗余。假设服务器每100天发生一次故障(硬盘故障,电源故障等)。这是99%的可用性。这对您来说可能不够好,这就是您可能希望使用具有两个服务器的群集的原因。这样,即使其中一个服务器每100天发生故障,两个服务器同时发生故障的可能性也非常低。理想情况下,失败的风险是完全独立的。这意味着两者在同一时间失败的风险是10000(100倍100),为您提供99.99%的可用性。两个服务器都已关闭的风险正是群集功能应该阻止的。
CreateCluster包含urlSource和urlTarget。我是否需要具体为他们提供与以前相同的价值
这取决于您要使用哪一个作为源,哪一个作为目标。源中的数据库将复制到目标。源是您要复制到目标的数据库。
我是否需要从这两台机器上运行CreateCluster命令?
没有
有没有办法知道服务器中的一个服务器是否都在运行?
您可以尝试打开与它们的TCP / IP连接,以检查侦听器是否正在运行。我通常做的是在命令行上运行telnet <server> <port>
。