Ignite Cluster Manager

    是基于 Apache Ignite 实现。由于 Vert.x 集群管理的可插拔性,也可轻易切换至其它的集群管理器。

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

    1. 发现并管理集群中的节点
    2. 管理集群端的主题订阅清单(这样就可以轻松得知集群中的那些节点订阅了那些 EventBus 地址)
    3. 分布式 Map 支持
    4. 分布式锁
    5. 分布式计数器

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

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

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

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

    通过 Maven 或 Gradle 构建工具使用

    • Maven(pom.xml)
    • Gradle(gradle.xml)
    1. compile 'io.vertx:vertx-ignite:3.4.1'

    编程形式调用

    vertx-ignite jar 中内嵌了一个默认配置文件 default-ignite.xml
    如果需要覆盖此配置文件,需要在 classpath 路径中添加 ignite.xml

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

    编程配置

    1. ClusterManager clusterManager = new IgniteClusterManager(cfg);
    2. VertxOptions options = new VertxOptions().setClusterManager(clusterManager);
    3. Vertx.clusteredVertx(options, res -> {
    4. if (res.succeeded()) {
    5. Vertx vertx = res.result();
    6. } else {
    7. // failed!
    8. }

    自动发现及网络传输配置

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

    MacOS 默认禁用组播。Google一下启用组播。

    使用错误的网络接口

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

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

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

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

      使用VPN

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

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

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

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

      开启日志