Skip to main content
编辑本页

IgniteClusterManager 是基于 Apache Ignite 实现。

Vert.x 集群管理器包含以下几个功能:

  • 发现并管理集群中的节点

  • 管理集群端的主题订阅清单(这样就可以轻松得知集群中的那些节点订阅了那些 EventBus 地址)

  • 分布式 Map 支持

  • 分布式锁

  • 分布式计数器

Vert.x 集群器并不处理节点之间的通信,在 Vert.x 中节点中的通信是直接由 TCP 链接处理的。

Vert.x cluster manager is a pluggable component, so you can pick the one you want, or the one that is the most adapted to your environment. So you can replace default Vert.x cluster manager by this implementation.

使用 Ignite cluster manager

Vert.x 能够从 classpath 路径的 jar 自动检测并使用出 ClusterManager 的实现。不过需要确保在 classpath 没有其他的 ClusterManager 实现。

另外 Vert.x 可以通过设置 -Dvertx.clusterManagerFactory=io.vertx.spi.cluster.ignite.IgniteClusterManager 来使用指定的 集群管理器实现。

通过命令行使用

确保 vertx-ignite-3.6.2.jar 在 Vert.x 的安装路径中的 lib 目录下。

通过 Maven 或 Gradle 构建工具使用

Add a dependency to the artifact.

  • Maven (在 pom.xml 文件中):

<dependency>
 <groupId>io.vertx</groupId>
 <artifactId>vertx-ignite</artifactId>
 <version>3.6.2</version>
</dependency>
  • Gradle (在 build.gradle 文件中):

compile 'io.vertx:vertx-ignite:3.6.2'

编程形式调用

通过编码的形式,设置集群管理器实现,例子:

ClusterManager clusterManager = new IgniteClusterManager();

VertxOptions options = new VertxOptions().setClusterManager(clusterManager);
Vertx.clusteredVertx(options, res -> {
 if (res.succeeded()) {
   Vertx vertx = res.result();
 } else {
   // failed!
 }
});

配置 Ignite cluster manager

Note: Starting with version 2.0, Apache Ignite has introduced a new off-heap memory architecture. All caches use off-heap memory by default. New memory architecture is described in Ignite Virtual Memory article.

使用配置文件

vertx-ignite jar 中内嵌了一个默认配置文件 default-ignite.xml

如果需要覆盖此配置文件,需要在 classpath 路径中添加 ignite.xml

default-ignite.xmlignite.xml 必须是一个 Apache Ignite 配置文件,在 Apache Ignite documentation 的官方中文文档中,可以找到具体的配置描述。

编程配置

您还可以以编程方式指定配置:

IgniteConfiguration cfg = new IgniteConfiguration();
// Configuration code (omitted)

ClusterManager clusterManager = new IgniteClusterManager(cfg);

VertxOptions options = new VertxOptions().setClusterManager(clusterManager);
Vertx.clusteredVertx(options, res -> {
 if (res.succeeded()) {
   Vertx vertx = res.result();
 } else {
   // failed!
 }
});

自动发现及网络传输配置

在默认配置中使用 TcpDiscoveryMulticastIpFinder 实现,这网络发现实现,需要开启组播。 如果组播被禁用,可以采用 TcpDiscoveryVmIpFinder 替代,前提是在 ignite.xml 事先配置好 IP 地址列表。 具体 Ignite 集群配置,可以参考文档 Cluster Configuration

故障排除

If the default multicast configuration is not working here are some common causes:

组播未正常开启

By default the cluster manager is using TcpDiscoveryMulticastIpFinder, so IP multicasting is required, on some systems, multicast route(s) need to be added to the routing table otherwise, the default route will be used.

Note that some systems don’t consult the routing table for IP multicast routing, only for unicast routing

MacOS example:

# Adds a multicast route for 224.0.0.1-231.255.255.254
sudo route add -net 224.0.0.0/5 127.0.0.1

# Adds a multicast route for 232.0.0.1-239.255.255.254
sudo route add -net 232.0.0.0/5 192.168.1.3

Please google for more information.

使用错误的网络接口

如果机器上有多个网络接口(也有可能是在运行 VPN 的情况下),那么 Ignite 很有可能是使用了错误的网络接口。

为了确保 Ignite 使用正确的网络接口,在配置文件中将 IgniteConfiguration 设置为指定IP地址。 例如:

<bean class="org.apache.ignite.configuration.IgniteConfiguration">
 <property name="localHost" value="192.168.1.20"/>
</bean>

当运行集群模式时,需要确保 Vert.x 使用正确的网络接口。 当通过命令行模式时,可以设置 cluster-host 参数:

vertx run myverticle.js -cluster -cluster-host your-ip-address

其中 your-ip-address 必须与 Ignite 中的配置保持一致。

当通过编程模式使用 Vert.x 时,可以调用方法 setClusterHost 来设置参数

使用VPN

VPN 软件通常通过创建不支持组播的虚拟网络接口来进行工作。在 VPN 环境中,如果 Ignite 与 Vert.x 不正确配置的话,VPN 接口将被选择,而不是正确的接口。

所以,如果你的软件运行在 VPN 环境中,参考上述章节,设置正确的网络接口。

组播被禁用

在一些情况下,运行环境中,无法开启组播。在这种情况下,需要配置合适的 IP finder。TCP sockets 发现器 TcpDiscoveryVmIpFinder ,或者 Amazon S3 发现器 TcpDiscoveryS3IpFinder

具体 Ignite 集群配置,可以参考文档 Ignite Clustering

开启日志

在排除故障时,开启 Ignite 日志,将会给予很大的帮助。在 classpath 中添加 vertx-default-jul-logging.properties 文件(默认的JUL记录时),这是一个标准 java.util.loging(JUL) 配置文件。具体配置如下:

org.apache.ignite.level=INFO

或者

java.util.logging.ConsoleHandler.level=INFO
java.util.logging.FileHandler.level=INFO