关于H2数据库中CreateCluster工具的问题

Posted

技术标签:

【中文标题】关于H2数据库中CreateCluster工具的问题【英文标题】:Questions about CreateCluster tool in H2 database 【发布时间】:2011-05-26 21:42:56 【问题描述】:

我对 H2 的创建集群工具的行为有几个问题。

    如果 a 创建一个指定源 A 和目标 B 的集群,H 是否会让 B 与 A 保持同步?也就是说,两者之间是否保持着主从关系?

    假设数据库 A、B 和 C 属于同一个集群。如果两个不同的事务同时在 A 和 B 上执行会发生什么。 H2是否会在集群中选举一个leader来确保集群中所有数据库的执行顺序是唯一的?

    如果H2选举了一个leader,如果这个leader消失了怎么办?是否有自动故障转移机制?新的领导者是自动选出的吗?我还能用吗

    如果我使用源 A -> 目标 B,然后是源 B -> 目标 C,然后是源 C -> 目标 D 创建一个集群,D 会从 C 获取要执行的语句,C 从 B 获取执行语句和 B 得到要为 A 执行的语句? Or will B, C and D get execution statements from A (or the elected leader)?换句话说,我们有连锁机构还是明星机构?

【问题讨论】:

【参考方案1】:

请参阅 H2 网站上的 cluster documentation。

    集群节点之间没有master/slave,没有leader,也没有连接。相反,每个客户端都连接到两个集群节点并在这两个节点上执行语句。

    每个客户端以相同的顺序执行所有个集群节点上的所有语句。每个客户端都有一个集群节点列表,每个集群节点也保存该列表。客户端验证列表是否相同。

    没有领导者。故障转移机制是:如果客户端失去与某个集群节点的连接,它会从其列表中删除该集群节点,并告诉每个集群节点从列表中删除该集群节点。

    这只会展开列表,得到 A、B、C、D。然后每个客户端将在每个集群节点上执行所有更新语句。

【讨论】:

好的,所以没有机制可以控制两个客户端同时向所有集群节点发送各自的查询的情况(在这种情况下可能会产生不一致)。这必须在应用程序级别处理,对吗? JDBC 驱动程序将始终以正确的顺序将语句发送到所有集群节点。所以应用程序不需要做任何事情,JDBC驱动会做。

以上是关于关于H2数据库中CreateCluster工具的问题的主要内容,如果未能解决你的问题,请参考以下文章

即使 IAM 角色具有完整的 Redshift 权限,AWS Lambda 在调用 Redshift 的“CreateCluster”操作时也会出现“拒绝访问”错误

查看test.h2.db(H2数据库)的工具[关闭]

将 H2O.ai POJO/MOJO/API 与流行的 BI 工具一起使用

Redis-trib.rb解析

关于安卓固件升级的问

使用数据库连接工具DBeaver连接H2数据库