Ubuntu 22.04 安装 Apache Ignite 2.18.0 指南

在 Ubuntu 22.04 上从零安装 Apache Ignite 2.18.0 高性能分布式内存数据网格并启动单节点、完成缓存/SQL/计算功能实测的完整指南。

Apache IgniteApache Ignite安装部署数据库ApacheUbuntu 22.042026/10/11

Ubuntu 22.04 安装 Apache Ignite 2.18.0 指南

目标:在 Ubuntu 22.04 上从零到一部署 Apache Ignite 2.18.0(高性能、集成式、分布式内存计算/事务平台,In-Memory Data Grid),真实执行官方二进制包下载、解压、JDK 配置、单节点启动、端口与集群状态验证,并完成缓存 CRUD、SQL 查询与分布式计算的功能实测。本文已在 Ubuntu 22.04.5(x86_64,内核 6.8)实测通过,部署路径为 /opt/data/ignite/apache-ignite-2.18.0。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS(内核 6.8.0-generic,x86_64)
  • 架构:amd64
  • JDK:OpenJDK 11.0.32.1(openjdk-11-jdk-headless),JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
  • 部署版本:Apache Ignite 2.18.0(2.18.0#20260423-sha1:d49adada,LTS 发行版)
  • 部署路径:/opt/data/ignite/apache-ignite-2.18.0
  • 配置文件:/opt/data/ignite/apache-ignite-2.18.0/config/ignite-config.xml
  • 网络与端口(监听 127.0.0.1):
    • 10800:瘦客户端 / JDBC
    • 47101:通信端口(TcpCommunication)
    • 47500:发现端口(TcpDiscovery)
    • 11211:Memcached 协议
  • 数据区域(off-heap):默认区域 initCfg=256MB / maxCfg=1024MB
  • JVM 堆:-Xms512m -Xmx512m(此时单测集群的拓扑回显为 heap=0.5GB)
  • 节点:单节点,consistentId=node1,集群状态 ACTIVE

二、前置条件

Apache Ignite 是 Java 应用,安装前必须有 JDK。Ignite 2.x 官方支持 JDK 8 / 11 / 17,本文使用通用性最好、官方推荐范围内的 JDK 11。

2.1 更新 apt 索引并安装 JDK 11

apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y openjdk-11-jdk-headless

安装完成校验版本(真实回显):

$ java -version
openjdk version "11.0.32.1" 2026-08-18
OpenJDK Runtime Environment (build 11.0.32.1+1-post-1ubuntu1-22.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 11.0.32.1+1-post-1ubuntu1-22.04-Ubuntu, mixed mode, sharing)

2.2 配置 JAVA_HOME 到系统 Profile

JDK 安装后 /usr/bin/java 已可全局使用,但为了后续 JVM 参数、jps 等工具行为一致,把 JAVA_HOME 写入 /etc/profile.d/java.sh(新建会话自动加载):

cat > /etc/profile.d/java.sh <<'EOF'
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
EOF
source /etc/profile.d/java.sh
echo $JAVA_HOME

真实回显:

/usr/lib/jvm/java-11-openjdk-amd64

💡 说明:/usr/lib/jvm/java-11-openjdk-amd64 是 Rocky/Debian 系 openjdk-11-jdk-headless 的标准安装目录,可直接用于 JAVA_HOME。

三、版本选型说明

Apache Ignite 的发布线分为 2.x 与 3.x。2.x 是最成熟、生态最完整的稳定线(SQL/Cache/Compute/持久化齐备),本指南选用 2.x 最新稳定版 2.18.0;如需体验基于 Ignite3 的下一代架构可另行评估 3.x(当前仍较新、接口与 2.x 有差异)。

版本系列稳定性说明二进制发行包格式
2.x(2.15.0 等老版本)稳定广泛部署,-bin.tar.gz / -bin.zip早期提供 tar.gz
2.x(2.16.0~2.18.0)稳定最新 2.x;归档渠道主推 -bin.zip现网只提供 zip
3.x(3.0.0~3.1.0)较新Ignite3 新架构,接口与 2.x 不兼容单独发行

⚠️ 注意:实测下载渠道(archive.apache.org)中 2.18.0 的二进制发行包只提供 apache-ignite-2.18.0-bin.zip,-bin.tar.gz 在该版本已不再发布(对上述 URL 请求 tar.gz 返回 404)。因此本指南的在线方案以 .zip 为准;若读者环境要求 tar.gz 或仅有旧版 tar.gz 包,安装步骤大同小异(解压命令换成 tar -xzf)。

四、在线部署步骤(方案 A:官方 zip 下载安装)

4.1 下载官方二进制包

进入安装目录并下载 apache-ignite-2.18.0-bin.zip(约 145MB):

mkdir -p /opt/data/ignite
cd /opt/data/ignite
wget https://archive.apache.org/dist/ignite/2.18.0/apache-ignite-2.18.0-bin.zip

下载结果(真实回显):

--2026-10-11 09:02:13--  https://archive.apache.org/dist/ignite/2.18.0/apache-ignite-2.18.0-bin.zip
Resolving archive.apache.org (archive.apache.org)... 2a01:4f9:1a:a084::2
Connecting to archive.apache.org (archive.apache.org)|2a01:4f9:1a:a084::2|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 152047961 (145M) [application/zip]
Saving to: ‘apache-ignite-2.18.0-bin.zip’

4.2 校验 SHA-512 摘要

使用官方 .sha512 文件核对下载包的完整性:

wget https://archive.apache.org/dist/ignite/2.18.0/apache-ignite-2.18.0-bin.zip.sha512 -O - | tee /dev/stderr
sha512sum apache-ignite-2.18.0-bin.zip

真实回显(两份摘要完全一致):

f1eba2c899e3aa4a3f50f9db9da1342ce6a0009de8e1fb2c9e751cb84346a764fe2385e2753eac1a90e500ff1a7fd531ea1b0251072ba7b57373b63b829a68bd  apache-ignite-2.18.0-bin.zip

4.3 解压安装到部署目录

cd /opt/data/ignite
unzip apache-ignite-2.18.0-bin.zip

解压得到目录 apache-ignite-2.18.0-bin,为统一部署路径将其重命名为 apache-ignite-2.18.0:

mv apache-ignite-2.18.0-bin apache-ignite-2.18.0

确认顶层结构与版本:

cd /opt/data/ignite/apache-ignite-2.18.0 && ls

真实回显:

LICENSE  MIGRATION_GUIDE.txt  NOTICE  README.txt  RELEASE_NOTES.txt
benchmarks  bin  config  docs  examples  libs  platforms

其中关键目录/脚本:

  • bin/:启动脚本(ignite.sh)、运维控制(control.sh)、SQL 客户端(sqlline.sh)等
  • config/:Spring XML 配置文件(默认 default-config.xml)
  • libs/:全部依赖 JAR
  • examples/:官方 Java 示例
  • work/:运行时数据与日志(首次启动自动生成)

4.4 启动端口与模块说明(预先了解)

Ignite 2.18 单节点默认暴露 4 类 TCP 端口:瘦客户端/JDBC 10800、通信 47100、发现 47500、Memcached 11211。REST(8080)/控制中心(49112)需要额外启用 ignite-rest-http / ignite-control-utility 可选模块,默认未启用。本指南按默认模块部署,后续配置篇会展开。

五、离线 / 内网部署步骤(方案 B:已有压缩包内网分发)

内网隔离或无外网环境时,在可联网的机器/跳板机下载 apache-ignite-2.18.0-bin.zip,再拷贝到目标服务器上完成安装,步骤与方案 A 的 4.1~4.3 完全一致,仅“下载”改由本地上传:

# 仅在联网机器执行一次,得到离线包
wget https://archive.apache.org/dist/ignite/2.18.0/apache-ignite-2.18.0-bin.zip
sha512sum apache-ignite-2.18.0-bin.zip
# 将离线包上传到目标服务器后执行
unzip apache-ignite-2.18.0-bin.zip
mv apache-ignite-2.18.0-bin /opt/data/ignite/apache-ignite-2.18.0

💡 说明:内网离线部署无需联网,JDK 同样可沿用“离线 rpm/deb 包 + 上传安装”的方式,安装后 java -version 输出验证方法与前文一致。

六、方案对比与选择建议

对比项方案 A:官方在线下载方案 B:离线 / 内网分发
是否需外网需要不需要(内网内即可)
下载源archive.apache.org任意上传通道(scp/内网源)
包大小约 145MB zip同左
校验官方 .sha512 对照同左
适用场景可联网的测试/生产机隔离网、生产内网

选择建议:可联网环境优先用方案 A(版本与摘要最权威);生产/隔离内网必须用方案 B,并务必保留 -bin 压缩包与摘要文件以便日后再现与校验。

七、JVM 堆内存与启动脚本配置

Ignite 是 Java 进程,堆大小默认偏大(脚本默认 -Xms1g -Xmx1g)。为满足“堆限 256–512MB”的要求,需要修改 bin/ignite.sh 中的 JVM_OPTS。

7.1 定位 JVM 参数所在行

bin/ignite.sh 第 92 行附近是默认内存选项:

grep -n "JVM_OPTS=" /opt/data/ignite/apache-ignite-2.18.0/bin/ignite.sh

真实回显:

92:JVM_OPTS="${JVM_OPTS} -Xms512m -Xmx512m -server -XX:MaxMetaspaceSize=256m"

⚠️ 注意:Ignite 2.18 的 parseargs.sh 会先把 JVM_OPTS 追加 -Dfile.encoding=UTF-8 置为非空,导致 if [ -z "$JVM_OPTS" ] 分支中的默认值不生效。因此正确做法是无条件追加到既有 JVM_OPTS(即上式的 "${JVM_OPTS} -Xms..." 形态),而非放在 if 分支里。

7.2 修改方式

直接编辑 bin/ignite.sh 第 92 行,将其整行替换为:

JVM_OPTS="${JVM_OPTS} -Xms512m -Xmx512m -server -XX:MaxMetaspaceSize=256m"

💡 说明:

  • -Xms512m -Xmx512m:堆初始值=最大值=512MB,处于要求的 256–512MB 区间上沿,避免 Ignite 抛出的“初始堆建议不小于 512MB”告警;
  • 若服务器内存更紧张,可改为 -Xms256m -Xmx256m,但启动时会提示 Initial heap size is 256MB (should be no less than 512MB...),不影响运行;
  • XX:MaxMetaspaceSize=256m 限定元空间最大占用。

7.3 生效验证

启动后可用 jps -v 确认参数真正打入 JVM:

/usr/lib/jvm/java-11-openjdk-amd64/bin/jps -v

真实回显(节选,注意末尾 -Xms512m -Xmx512m):

XXXX CommandLineStartup --add-exports=... --illegal-access=permit -Dfile.encoding=UTF-8 -Xms512m -Xmx512m -XX:MaxMetaspaceSize=256m -DIGNITE_QUIET=true -DIGNITE_SUCCESS_FILE=... -DIGNITE_HOME=... -DIGNITE_PROG_NAME=./bin/ignite.sh

八、配置文件 ignite-config.xml

Ignite 通过 Spring XML 定义节点配置。将官方 config/default-config.xml 复制为 config/ignite-config.xml 作为正式配置:

cd /opt/data/ignite/apache-ignite-2.18.0/config
cp default-config.xml ignite-config.xml

ignite-config.xml 关键内容如下(单机部署,绑定本机、纯内存数据区域、预置缓存、开启对等类加载):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
        <!-- 节点名称,用于日志/日志文件标识 -->
        <property name="igniteInstanceName" value="ignite-server-01"/>
        <!-- 一致性 ID:在集群基线(baseline)/拓扑中稳定标识本节点 -->
        <property name="consistentId" value="node1"/>
        <!-- 绑定本机回环地址(单机部署用本机地址可避免依赖具体网卡 IP) -->
        <property name="localHost" value="127.0.0.1"/>
        <!-- 开启对等类加载,便于向集群广播计算任务(Compute)所部署的类 -->
        <property name="peerClassLoadingEnabled" value="true"/>
        <!-- 持久化与数据区域(off-heap)配置 -->
        <property name="dataStorageConfiguration">
            <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
                <!-- 默认数据区域:不落盘(纯内存),最大 1GiB -->
                <property name="defaultDataRegionConfiguration">
                    <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
                        <property name="name" value="default"/>
                        <property name="initialSize" value="#{256L * 1024 * 1024}"/>
                        <property name="maxSize" value="#{1L * 1024 * 1024 * 1024}"/>
                    </bean>
                </property>
            </bean>
        </property>
        <!-- 预置缓存(也支持运行时 IgniteClient.getOrCreateCache 创建) -->
        <property name="cacheConfiguration">
            <list>
                <bean class="org.apache.ignite.configuration.CacheConfiguration">
                    <property name="name" value="config-cache"/>
                    <property name="backups" value="1"/>
                </bean>
            </list>
        </property>
    </bean>
</beans>

💡 说明:以上配置含义(igniteInstanceName、consistentId、localHost、peerClassLoadingEnabled、dataStorageConfiguration、cacheConfiguration)的详细参数说明与默认值见《Apache Ignite 配置参数详解》篇,此处仅给出可运行形态。

九、启动与验证

9.1 启动单节点

以后台方式启动,并把控制台输出重定向到日志文件:

cd /opt/data/ignite/apache-ignite-2.18.0
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export IGNITE_HOME=/opt/data/ignite/apache-ignite-2.18.0
nohup ./bin/ignite.sh config/ignite-config.xml > /opt/data/ignite/ignite-console.log 2>&1 &

9.2 观察启动日志

tail -40 /opt/data/ignite/ignite-console.log

真实回显(完整):

[09:17:45]    __________  ________________
[09:17:45]   /  _/ ___/ |/ /  _/_  __/ __/
[09:17:45]  _/ // (7 7    // /  / / / _/
[09:17:45] ver. 2.18.0#20260423-sha1:d49adada
[09:17:45] 2026 Copyright(C) Apache Software Foundation
[09:17:45]
[09:17:45] Ignite documentation: https://ignite.apache.org
[09:18:06] Data Regions Started: 3
[09:18:06]     ^--   sysMemPlc region [type=internal, persistence=false, lazyAlloc=false,
[09:18:06]       ...  initCfg=40MB, maxCfg=100MB, usedRam=0MB, freeRam=100%, allocRam=40MB]
[09:18:06]     ^--   default region [type=default, persistence=false, lazyAlloc=true,
[09:18:06]       ...  initCfg=256MB, maxCfg=1024MB, usedRam=0MB, freeRam=100%, allocRam=0MB]
[09:18:06]     ^--   volatileDsMemPlc region [type=user, persistence=false, lazyAlloc=true,
[09:18:06]       ...  initCfg=40MB, maxCfg=100MB, usedRam=0MB, freeRam=100%, allocRam=0MB]
[09:18:07] Security status [authentication=off, sandbox=off, tls/ssl=off]
[09:18:07] Performance suggestions for grid 'ignite-server-01' (fix if possible)
[09:18:07] Ignite node started OK (id=8f23e53c, instance name=ignite-server-01)
[09:18:07] Topology snapshot [ver=1, locNode=8f23e53c, servers=1, clients=0, state=ACTIVE, CPUs=6, offheap=1.0GB, heap=0.5GB]
[09:18:07]   ^-- Baseline [id=0, size=1, online=1, offline=0]

关键判定点:Ignite node started OK、Topology snapshot [ver=1, ..., servers=1, clients=0, state=ACTIVE, ..., offheap=1.0GB, heap=0.5GB](堆确为 0.5GB)、Baseline [id=0, size=1, online=1, offline=0]。

9.3 验证 JVM 堆参数(jps -v)

/usr/lib/jvm/java-11-openjdk-amd64/bin/jps -v | grep CommandLineStartup | grep -oE '\-Xm[sx][0-9a-z]+'

真实回显:

-Xms512m
-Xmx512m

9.4 验证监听端口

ss -tln | grep -E '10800|11211|47101|47500'

真实回显:

LISTEN 0      50     [::ffff:127.0.0.1]:47500     *:*
LISTEN 0      50     [::ffff:127.0.0.1]:47101     *:*
LISTEN 0      50     [::ffff:127.0.0.1]:10800     *:*
LISTEN 0      50     [::ffff:127.0.0.1]:11211     *:*

9.5 验证集群状态(control.sh)

cd /opt/data/ignite/apache-ignite-2.18.0
export IGNITE_HOME=/opt/data/ignite/apache-ignite-2.18.0
./bin/control.sh --baseline

真实回显(节选):

Control utility [ver. 2.18.0#20260423-sha1:d49adada]
2026 Copyright(C) Apache Software Foundation
User: root
Time: 2026-10-11T09:15:13.661
Command [BASELINE] started
Arguments: --baseline
--------------------------------------------------------------------------------
Cluster state: ACTIVE
Current topology version: 1 (Coordinator: ConsistentId=node1, Address=localhost/127.0.0.1, Order=1)
Baseline nodes:
    ConsistentId=node1, Address=localhost/127.0.0.1, State=ONLINE, Order=1
--------------------------------------------------------------------------------
Number of baseline nodes: 1

Other nodes not found.
Command [BASELINE] finished with code: 0
Execution time: 2227 ms

9.6 功能验证(缓存 + SQL)

通过自带 SQL 客户端 sqlline.sh(走 10800 端口的 JDBC 瘦驱动),创建缓存表并写入查询。准备 SQL 脚本 /tmp/ig5.sql:

DROP TABLE IF EXISTS city;
CREATE TABLE city (id INT PRIMARY KEY, name VARCHAR);
INSERT INTO city VALUES (1,'Beijing');
INSERT INTO city VALUES (2,'Shanghai');
INSERT INTO city VALUES (3,'Guangzhou');
SELECT id, name FROM city ORDER BY id;
SELECT COUNT(*) AS cnt FROM city;

执行(用户名/密码为示例演示凭据,认证未开启时会被忽略):

cd /opt/data/ignite/apache-ignite-2.18.0
./bin/sqlline.sh -u "jdbc:ignite:thin://127.0.0.1:10800" -n admin -p q1w2e3r4 --outputformat=csv -f /tmp/ig5.sql

真实回显:

2/7          CREATE TABLE city (id INT PRIMARY KEY, name VARCHAR);
No rows affected (0.124 seconds)
3/7          INSERT INTO city VALUES (1,'Beijing');
1 row affected (0.079 seconds)
4/7          INSERT INTO city VALUES (2,'Shanghai');
1 row affected (0.004 seconds)
5/7          INSERT INTO city VALUES (3,'Guangzhou');
1 row affected (0.004 seconds)
6/7          SELECT id, name FROM city ORDER BY id;
'ID','NAME'
'1','Beijing'
'2','Shanghai'
'3','Guangzhou'
3 rows selected (0.078 seconds)
7/7          SELECT COUNT(*) AS cnt FROM city;
'CNT'
'3'
1 row selected (0.019 seconds)

💡 说明:完整的缓存 API 增删查与集群 Compute 分布式计算实例见《Apache Ignite 常用 CLI 命令与工具详解》篇;sqlline.sh 各参数说明亦见该篇。

十、注意事项

  • JDK 版本:Ignite 2.18 需 JDK 8/11/17;用 JDK 17 时脚本自动追加 --add-opens 等兼容参数,无需手工处理。
  • IPv4 优先:启动日志提示建议加 -Djava.net.preferIPv4Stack=true,混合网络环境下多节点组网建议显式开启,可用 JVM_OPTS="${JVM_OPTS} -Djava.net.preferIPv4Stack=true" 追加到第 92 行。
  • 默认模块:REST/控制中心端口未监听,是因为对应的可选模块未启用,不属于故障。
  • 性能告警:日志中的 “Performance suggestions” 与 “Message queue limit is set to 0” 是功能正常下的建议性提示,不影响运行。
  • 单节点地址:示例绑定 127.0.0.1 便于本机验证;多节点组网时需把 localHost 改为服务器内网地址并按 47500 发现端口组网。
  • 示例凭据:正文中的 admin / q1w2e3r4 仅为文档演示管理凭据,生产应配置独立认证(Authentication)。

十一、常见问题

Q1:启动后看不到 REST / 控制中心端口(8080/49112)? 默认未启用 ignite-rest-http、ignite-control-utility 可选模块。需要时把对应模块 JAR 引入 classpath(如设置 OPTION_LIBS=ignite-rest-http,ignite-control-utility)并重启节点即可看到 8080、控制中心端口。

Q2:日志提示 Initial heap size is 256MB (should be no less than 512MB)? 说明当前 -Xms 为 256MB,低于 Ignite 建议下限。按要求将 bin/ignite.sh 的堆改为 -Xms512m -Xmx512m 可消除该告警;若内存紧张保留 256MB 不阻塞运行。

Q3:jps -v 看不到 -Xms/-Xmx? 多半是修改放在了 if [ -z "$JVM_OPTS" ] 分支内而 parseargs.sh 已把 JVM_OPTS 置为 -Dfile.encoding=UTF-8 导致分支未命中。务必使用无条件追加形态 JVM_OPTS="${JVM_OPTS} -Xms512m -Xmx512m ...",改完重启验证。

Q4:control.sh --baseline 报 “No action was specified”? 部分 control.sh 子命令需要动作参数。查看用 ./bin/control.sh --help;查询基线/集群状态用 --baseline 或 --state。

Q5:SQL 里 CREATE TABLE ... WITH ("CACHE_NAME=City", "KEY_TYPE=...") 报语法错误? Ignite/H2 的 WITH 需写成单个双引号内以逗号分隔的字符串,如 WITH "CACHE_NAME=City,KEY_TYPE=java.lang.Integer",不能给每个参数单独加引号。

十二、卸载方式

停止节点并删除部署目录、运行时数据与全局环境变量:

export IGNITE_HOME=/opt/data/ignite/apache-ignite-2.18.0
# 找到并终止 Java 启动进程
ps -ef | grep CommandLineStartup | grep -v grep
kill <java进程PID>
# 删除部署目录与日志
rm -rf /opt/data/ignite/apache-ignite-2.18.0
rm -rf /opt/data/ignite
# 删除 JAVA_HOME profile(如不再需要)
rm -f /etc/profile.d/java.sh

💡 说明:若希望保留环境变量仅移除 Ignite 程序,可只执行 rm -rf 部署目录两项;work/ 下的日志/持久化数据一并随目录删除。

十三、参考链接