我有一个由2个服务器节点组成的Ignite集群(v2.9.1(,用作我的Java应用程序的嵌入式数据库(键值(。我正在使用Java设置基线拓扑,它们之间具有持久性—当我启动一个节点时-
ignite.cluster().state(ClusterState.ACTIVE);
ignite.cluster().baselineAutoAdjustEnabled(true);
ignite.cluster().baselineAutoAdjustTimeout(1 * 60 * 1000); // 1min
当其他节点加入时–
ignite.cluster().setBaselineTopology(topVer);
当使用更新两个节点a(1001(和B(1000(的单元程序时,我遇到了如下错误场景——
- 节点A启动-inlighte.cluster((.state(ClusterState.ACTIVE(
- 节点B启动-加入群集。-如上所述设置基线拓扑
- 过了一段时间。节点A已停止
- B仍在更新。"1分钟后的基线-autoAdjustTimeout">
- 现在停止节点B
- 节点A已启动。"ignite.cluster((.state(ClusterState.ACTIVE(。''
- A正在更新
- 启动节点B。它挂起
错误:由以下原因引起:class org.apache.Initure.spi.InitiesPi异常:加入节点(1000(的BaselineTopology与群集中的Baseline拓扑不兼容。加入节点(3(的BlT id小于集群(4(的BlT id,但集群的BaselineHistory不包含加入节点BlT(1000(的分支点哈希。请考虑清理节点的永久存储,然后再次将其添加到集群中。
对于此环境,由于节点数将始终为2-有没有一种方法可以预先创建带有静态节点详细信息的Baseline Topology,并将其传递给javaapi,这样Ignite就可以识别它,并将基线大小保持为2,当前一个在线,另一个离线,直到它加入。对于这些节点,如果其中一个或两个连接、离开或移除,则不会对BlT数产生影响。此外,如何确保这两个节点始终在比较基准历史记录中。如果是这样的话,你能指出正确的方向吗。
或者可能是如何恢复/更新基线历史记录的问题,这样就不会看到这个问题。
恐怕您必须擦除有问题的节点的数据目录,可能在此之前以独立模式(单节点集群(运行它,以从中卸载数据。
如果计划将节点与数据一起带回,请确保不要将其从基线拓扑中排除,当然也不要将分段服务器节点上的基线拓扑调整为仅包括其自身。