Ubuntu 22.04 安装 Apache Ignite 2.18.0 指南
在 Ubuntu 22.04 上从零安装 Apache Ignite 2.18.0 高性能分布式内存数据网格并启动单节点、完成缓存/SQL/计算功能实测的完整指南。
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:瘦客户端 / JDBC47101:通信端口(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/:全部依赖 JARexamples/:官方 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/下的日志/持久化数据一并随目录删除。
十三、参考链接
- Apache Ignite 官网:https://ignite.apache.org
- Ignite 2.18.0 归档下载:https://archive.apache.org/dist/ignite/2.18.0/
- Ignite 内存调优文档:https://ignite.apache.org/docs/latest/perf-and-troubleshooting/memory-tuning
- 官方
bin工具说明(ignite.sh / control.sh / sqlline.sh):https://ignite.apache.org/docs/latest/tools/control-script