2013-05-09 142 views
3

我有一個在Apache Tomcat上運行並使用H2數據庫的SpringMVC應用程序。 基礎架構包含兩臺運行其自己的Tomcat服務器的應用程序服務器(允許它們命名爲A & B)。我也有一個H2數據庫集羣。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. 有沒有辦法知道這兩個服務器是否都是 正在運行?我希望如果兩個IP地址都是 ,那麼兩個IpAddress都會返回,如果只有一個IP地址,則返回一個IpAddress,否則沒有任何一個全部都是 。

回答

4
  1. 如果兩個服務器都下來了,我怎麼能確定,刪除

    集羣的概念,其數據庫是第二個數據庫增加了系統的冗餘。假設服務器每100天失效一次(硬盤故障,電源故障等)。這是99%的可用性。這對你來說可能不夠好,這就是爲什麼你可能想要使用兩臺服務器的集羣。這樣,即使其中一臺服務器每100天都出現故障,同時出現故障的機率也非常低。理想情況下,失敗的風險是完全獨立的。這意味着同時失敗的風險是1萬分之一(100倍100),給你99.99%的可用性。兩臺服務器都關閉的風險正是集羣功能應該防止的。

  2. CreateCluster包含一個urlSource和urlTarget。我是否需要具體說明給他們與先前相同的價值

    它取決於您想用哪個作爲來源以及哪個作爲目標。來自源的數據庫被複制到目標。源是您想要複製到目標的數據庫。

  3. 我是否需要從兩臺機器上運行CreateCluster命令?

    沒有。

  4. 有沒有辦法知道這兩個服務器中的一個還是沒有運行?

    您可以嘗試打開與它們的TCP/IP連接,以檢查偵聽器是否正在運行。我通常在命令行上運行telnet <server> <port>