由于 H2 支持集群,并且该过程非常类似于:
- 启动服务器
- 用于
java org.h2.tools.CreateCluster
在所需集群之间复制数据库
并且知道CreateCluster
需要一个目标、一个源和一个集群端点列表,我有以下问题:
当我说为了启动由 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为集群列表;
假设我正在启动服务并启动 A 和 B,应用程序开始在集群上执行一些 SQL。C 没找到,C 会被当作 down 处理吗?
继续在第二个问题上启动的启动过程,我启动了 C,我准备执行
CreateCluster
以 B 作为源,A、B、C 作为集群节点列表,此时发生了两件事:- B 将被锁定在独占模式 (
SET EXCLUSIVE 2
) 由于CreateCluster
- SQL
SET CLUSTER 'A,B,C'
将在 B 和 C 上执行
- B 将被锁定在独占模式 (
B被锁定时执行的SQL,是在A中执行的吗?如果是这样,他们已经承诺了吗?而当B 被释放时,客户端还会等待吗?之后会通知C这个命令吗?