7

H2 はクラスタリングをサポートしているため、プロセスは次のようになります。

  • サーバーを起動する
  • java org.h2.tools.CreateCluster目的のクラスタ間でデータベースを複製するために使用します

そして、1つのターゲット、1 つのソース、およびクラスター エンドポイントのCreateClusterリスト必要であることを知っているので、次の質問があります。

  1. 3 台のサーバー (A、B、および C) のクラスターを開始するには、クラスター上のサーバーの正確な数を知る必要がある、というのは正しいですか。各サーバーにはSET CLUSTERステートメント用の DB サーバーのリストが必要だからです。org.h2.tools.CreateCluster.process(String, String, String, String, String)メソッドの呼び出し。

    • サーバー A を起動します。
    • サーバー B を起動します。
    • サーバー C を起動します。
    • CreateClusterA をソース、B をターゲット、A、B、C をクラスター リストとして、B マシンで実行します。
    • CreateClusterB をソース、C をターゲット、A、B、C をクラスター リストとしてC マシンで実行します。
  2. サービスの開始プロセスでA と Bを開始したとします。アプリケーションはクラスターでいくつかの SQL の実行を開始しました。C が見つからない場合、C はdown として扱われますか?

  3. 2 番目の質問で開始された開始プロセスを続けて、Cを開始し、B をソースとして、A、B、C をクラスター ノード リストとして実行する準備が整いましCreateClusterた。この瞬間に 2 つのことが起こります。

    • B は排他モード ( SET EXCLUSIVE 2)でロックされます。CreateCluster
    • SQLSET CLUSTER 'A,B,C'は B と C で実行されます

Bがロックされている間に実行されたSQLは、Aで実行されますか? もしそうなら、それらはすでにコミットされていますか?そして、B が解放されたとき、クライアントはまだ待機していますか? その後、このコマンドは C に通知されますか?

4

0 に答える 0