7

由于 H2 支持集群,并且该过程非常类似于:

  • 启动服务器
  • 用于java org.h2.tools.CreateCluster在所需集群之间复制数据库

并且知道CreateCluster需要一个目标、一个源和一个集群端点列表,我有以下问题:

  1. 当我说为了启动由 3 个服务器(A、B 和 C)组成的集群时,我是否正确,我需要确切知道集群上的服务器数量,因为每个服务器都需要有数据库服务器列表以用于SET CLUSTER声明org.h2.tools.CreateCluster.process(String, String, String, String, String)方法调用。

    • 启动服务器 A;
    • 启动服务器 B;
    • 启动服务器 C;
    • 在B机器CreateCluster上执行,A为源,B为目标,A,B,C为集群列表;
    • 在C机器CreateCluster上执行,B为源,C为目标,A,B,C为集群列表;
  2. 假设我正在启动服务并启动 A 和 B,应用程序开始在集群上执行一些 SQL。C 没找到,C 会被当作 down 处理吗?

  3. 继续在第二个问题上启动的启动过程,我启动了 C,我准备执行CreateCluster以 B 作为源,A、B、C 作为集群节点列表,此时发生了两件事:

    • B 将被锁定在独占模式 ( SET EXCLUSIVE 2) 由于CreateCluster
    • SQLSET CLUSTER 'A,B,C'将在 B 和 C 上执行

B被锁定时执行的SQL,是在A中执行的吗?如果是这样,他们已经承诺了吗?而当B 被释放时,客户端还会等待吗?之后会通知C这个命令吗?

4

0 回答 0