Skip to content

嵌入式模式

Ignite 的常规使用场景是使用命令行工具启动和管理集群。但是有时用户也希望通过 Java 程序管理集群,这个模式称为嵌入式模式

本章节介绍如何从 Java 程序启动 Ignite 3。

提示

与 Ignite 2 不同,Ignite 3 中的节点没有分为客户端节点和服务端节点,从嵌入式模式启动的节点默认是要存储数据的。

1.环境要求

本章节介绍运行 Ignite 所必需的软硬件平台要求,根据规划的集群的大小,确定所需的系统规模。

  • JDK:11 或更高版本;
  • OS:Linux(Debian 和 Red Hat 版本)、Windows 10 或 11;
  • 指令集架构:x86 或 x64。

2.将Ignite添加到项目中

首先需要将 Ignite 添加到项目中,最简单的方法是使用 Maven:

xml
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>11</source>
                <target>11</target>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-api</artifactId>
        <version>3.0.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-runner</artifactId>
        <version>3.0.0</version>
    </dependency>
</dependencies>

3.准备Ignite配置

要启动 Ignite 节点,需要一个配置文件用于指定节点的所有配置参数。在本章节中,建议安装 Ignite 3 并使用其中的默认配置文件,该文件位于ignite3-db-3.0.0/etc/ignite-config.conf

4.传递JVM参数

需要将以下 JVM 参数传递给应用程序,才能访问专有的 SDK API:

--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.lang.invoke=ALL-UNNAMED
--add-opens java.base/java.lang.reflect=ALL-UNNAMED
--add-opens java.base/java.io=ALL-UNNAMED
--add-opens java.base/java.nio=ALL-UNNAMED
--add-opens java.base/java.math=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/java.time=ALL-UNNAMED
--add-opens java.base/jdk.internal.misc=ALL-UNNAMED
--add-opens java.base/jdk.internal.access=ALL-UNNAMED
--add-opens java.base/sun.nio.ch=ALL-UNNAMED
-Dio.netty.tryReflectionSetAccessible=true

5.启动Ignite服务端节点

使用下面的接口,可以启动一个Ignite服务端节点:

java
IgniteServer node = IgniteServer.start("node", configFilePath, workDir);

此代码启动一个名为node的 Ignite 节点,该节点使用configFilePath参数指定的配置文件,并使用workDir参数指定的文件夹来存储数据。节点启动之后,该方法返回可用于与集群交互的 IgniteServer实例。

6.初始化集群

启动的节点默认会彼此发现对方,但如果不初始化集群,就不会组成一个可操作的集群,只有初始化集群才能激活这些节点。如果有多个节点,一旦集群被激活,它们将形成一个拓扑并自动在彼此之间分配工作负载。

可以使用以下代码初始化集群:

java
InitParameters initParameters = InitParameters.builder()
    .metaStorageNodeNames("node")
    .clusterName("cluster")
    .clusterConfiguration({config-with-license})
    .build();

node.initCluster(initParameters);

6.获取Ignite实例

集群启动之后,就可以获取Ignite类的实例:

java
Ignite ignite = node.api();

该实例对象可用于与集群进行交互。

在以下示例中,调用了 SQL API 与集群交互:

java
ignite.sql().execute(null, "CREATE TABLE IF NOT EXISTS Person (id int primary key, name varchar, age int);");
ignite.sql().execute(null, "insert into Person (id, name, age) values ('1', 'Person Man', '501'");
try (ResultSet<SqlRow> rs = ignite.sql().execute(null, "SELECT id, name, age from Person")) {
    while (rs.hasNext()) {
        SqlRow row = rs.next();
        System.out.println("    "
                + row.value(1) + ", "
                + row.value(2));
    }
}

提示

Session 是可关闭的,但可以安全地忽略 DDL 和 DML 查询的close()方法,因为它们不会使游标保持打开状态。

有关使用 Ignite 的更多示例,请参见 examples 代码库。

7.下一步

到这里之后,用户可能希望:

18624049226