Ubuntu 22.04 安装 Apache TinkerPop 3.8.2 指南
Ubuntu 22.04 从零安装 Apache TinkerPop 3.8.2 实测指南:安装 OpenJDK 17、下载校验、Gremlin Server 部署、JVM 堆限制、systemd 自启、Console 远程查询与卸载。
Ubuntu 22.04 安装 Apache TinkerPop 3.8.2 指南
一、环境信息
本文所有命令与回显均在以下环境实测通过,读者可按相同版本对照操作。
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04.5 LTS(x86_64) |
| 组件 | Apache TinkerPop Gremlin Server 3.8.2 |
| 配套客户端 | Gremlin Console 3.8.2 |
| JDK | OpenJDK 17(openjdk-17-jdk-headless) |
| 安装路径 | /opt/gremlin-server(服务端)、/opt/gremlin-console(控制台) |
| 服务端口 | 8182(WebSocket,默认监听 127.0.0.1) |
| 运行方式 | gremlin-server.sh 脚本或 systemd 托管 |
| 日志路径 | /opt/gremlin-server/logs/gremlin.log |
操作系统版本确认命令与实测回显:
cat /etc/os-release | head -3
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
二、前置条件
2.1 基础工具
解压与下载需要 unzip 与 curl,JDK 安装前建议先刷新软件源索引:
apt-get update
apt-get install -y unzip curl
2.2 安装 OpenJDK 17
TinkerPop 3.8.x 官方支持 Java 11 与 Java 17,本文采用长期支持版本 OpenJDK 17:
apt-get install -y openjdk-17-jdk-headless
安装完成后验证版本:
java -version
实测回显:
openjdk version "17.0.20.1" 2026-08-18
OpenJDK Runtime Environment (build 17.0.20.1+1-1-22.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 17.0.20.1+1-1-22.04-Ubuntu, mixed mode, sharing)
Ubuntu 的 headless JDK 包自带 jps 工具(用于后续堆内存验证),无需额外安装。
2.3 网络与磁盘要求
- 服务器需能直连 downloads.apache.org 下载发行包;
- Gremlin Server 发行包约 37 MB,解压后约 300 MB;Gremlin Console 发行包约 566 MB(内置 Hadoop、Spark 扩展依赖),规划磁盘时按解压后大小估算;
- 8182 端口未被占用:
ss -lntp | grep 8182应无输出。
三、版本选型说明
- Apache 官方下载页当前提供 3.7.5、3.7.6、3.7.7、3.8.0、3.8.1、3.8.2 系列包,其中 3.8.2 为最新稳定版本,本文以其为准。
- 自 3.7 起 Gremlin Server 与 Gremlin Console 分开发行,两个包需分别下载;服务端运行不依赖 Console,仅运维查询时需要。
- 版本号与文件名一一对应,更换版本时只需替换下载链接中的版本号。
- sha512 校验文件为"裸哈希"格式(仅一行哈希值、不含文件名),直接执行
sha512sum -c会报 no properly formatted SHA512 checksum lines found,需按下文方式拼接文件名后校验。
四、部署步骤
以下步骤从零开始完成安装、配置、启动、验证全过程,命令均在 /opt 目录层级执行。
4.1 下载发行包并校验
进入临时目录,下载服务端与校验文件:
cd /tmp
curl -fsSL -O https://downloads.apache.org/tinkerpop/3.8.2/apache-tinkerpop-gremlin-server-3.8.2-bin.zip
curl -fsSL -O https://downloads.apache.org/tinkerpop/3.8.2/apache-tinkerpop-gremlin-server-3.8.2-bin.zip.sha512
拼接文件名后做 sha512 校验,实测回显:
echo "$(cat apache-tinkerpop-gremlin-server-3.8.2-bin.zip.sha512) apache-tinkerpop-gremlin-server-3.8.2-bin.zip" | sha512sum -c -
apache-tinkerpop-gremlin-server-3.8.2-bin.zip: OK
4.2 解压到安装目录
unzip -q apache-tinkerpop-gremlin-server-3.8.2-bin.zip -d /opt/
mv /opt/apache-tinkerpop-gremlin-server-3.8.2 /opt/gremlin-server
确认目录结构:
ls /opt/gremlin-server
LICENSE NOTICE bin conf data ext lib licenses scripts
4.3 下载并部署 Gremlin Console(可选但推荐)
Console 用于远程连接服务端执行 Gremlin 查询,是日常运维的主要工具:
cd /tmp
curl -fsSL -O https://downloads.apache.org/tinkerpop/3.8.2/apache-tinkerpop-gremlin-console-3.8.2-bin.zip
echo "$(cat apache-tinkerpop-gremlin-console-3.8.2-bin.zip.sha512) apache-tinkerpop-gremlin-console-3.8.2-bin.zip" | sha512sum -c -
unzip -q apache-tinkerpop-gremlin-console-3.8.2-bin.zip -d /opt/
mv /opt/apache-tinkerpop-gremlin-console-3.8.2 /opt/gremlin-console
注意:3.8.2 的 Console 启动脚本是 bin/gremlin.sh,没有名为 gremlin-console 的脚本文件。
4.4 限制 JVM 堆内存(256-512MB)
gremlin-server.sh 默认 JVM 参数为 -Xms512m -Xmx4096m,脚本约定:环境变量 JAVA_OPTIONS 非空时整体覆盖默认值。为控制内存占用,统一以 JAVA_OPTIONS 方式启动:
export JAVA_OPTIONS="-Xms256m -Xmx512m"
若需要持久化生效,可将该行写入 /etc/profile.d/gremlin-server.sh:
echo 'export JAVA_OPTIONS="-Xms256m -Xmx512m"' > /etc/profile.d/gremlin-server.sh
4.5 启动服务
/opt/gremlin-server/bin/gremlin-server.sh start
实测回显:
Server started 4482.
确认运行状态:
/opt/gremlin-server/bin/gremlin-server.sh status
Server running with PID 4482
如需前台运行观察实时日志(Ctrl+C 退出即停止服务):
/opt/gremlin-server/bin/gremlin-server.sh console
4.6 验证端口与进程
查看端口监听(默认配置 host: localhost,仅绑定回环地址):
ss -lntp | grep 8182
LISTEN 0 4096 [::ffff:127.0.0.1]:8182 *:* users:(("java",pid=4482,fd=86))
用 jps 确认堆参数已生效:
jps -v | grep GremlinServer
4482 GremlinServer -Dlogback.configurationFile=file:/opt/gremlin-server/conf/logback.xml -Xms256m -Xmx512m
查看服务启动日志:
tail -n 8 /opt/gremlin-server/logs/gremlin.log
实测回显(节选):
[INFO] o.a.t.g.s.u.ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
[INFO] o.a.t.g.s.GremlinServer - Gremlin Server configured with worker thread pool of 1, gremlin pool of 12 and boss thread pool of 1.
[INFO] o.a.t.g.s.GremlinServer - Channel started at port 8182.
出现 Channel started at port 8182. 即启动成功。
4.7 Console 连接并执行查询
在另一终端进入 Console 目录启动交互环境:
cd /opt/gremlin-console
bin/gremlin.sh
启动横幅与插件加载回显:
\,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.tinkergraph
连接服务端并执行查询,以下为完整实测回显:
gremlin> :remote connect tinkerpop.server conf/remote.yaml
==>Configured localhost/127.0.0.1:8182
gremlin> :> g.V().count()
==>0
gremlin> :> g.addV("person").property("name","admin").next()
==>v[0]
gremlin> :> g.V().valueMap().toList()
==>{name=[admin]}
gremlin> :> g.V().count()
==>1
验证完成后退出 Console:
gremlin> :q
4.8 配置 systemd 开机自启
创建服务单元文件 /etc/systemd/system/gremlin-server.service:
vi /etc/systemd/system/gremlin-server.service
内容如下(采用前台 console 模式交由 systemd 托管,便于标准化的启动停止管理):
[Unit]
Description=Apache TinkerPop Gremlin Server
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/gremlin-server
Environment=JAVA_OPTIONS=-Xms256m -Xmx512m --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED
Environment=GREMLIN_YAML=/opt/gremlin-server/conf/gremlin-server.yaml
ExecStart=/opt/gremlin-server/bin/gremlin-server.sh console
Restart=on-failure
RestartSec=10
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
三个关键点:JAVA_OPTIONS 中必须包含 --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED(Java 17 模块系统限制所致,缺失会导致认证配置与图持久化功能失效,详见第七节);SuccessExitStatus=143 使 systemctl stop 后状态为 inactive 而非 failed;自定义配置文件通过 GREMLIN_YAML 环境变量传入(start 子命令的路径参数不会生效)。
重载并启用:
systemctl daemon-reload
systemctl enable gremlin-server.service
实测回显:
Created symlink /etc/systemd/system/multi-user.target.wants/gremlin-server.service → /etc/systemd/system/gremlin-server.service.
systemctl start gremlin-server.service
systemctl status gremlin-server.service --no-pager | head -6
实测回显:
● gremlin-server.service - Apache TinkerPop Gremlin Server
Loaded: loaded (/etc/systemd/system/gremlin-server.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2026-10-12 06:55:30 UTC; 14s ago
Main PID: 12022 (java)
Tasks: 35 (limit: 5753)
Memory: 294.9M
五、配置说明
默认配置文件为 /opt/gremlin-server/conf/gremlin-server.yaml,配套空图属性文件 conf/tinkergraph-empty.properties,开箱即可运行内存空图。常用调整项:
| 配置项 | 位置 | 说明 |
|---|---|---|
| 监听地址 | gremlin-server.yaml 的 host | 默认 localhost 仅本机可连,远程访问改为 0.0.0.0 或本机网卡 IP |
| 监听端口 | gremlin-server.yaml 的 port | 默认 8182 |
| 图定义 | gremlin-server.yaml 的 graphs | 默认指向 conf/tinkergraph-empty.properties 内存空图 |
| JVM 堆 | 环境变量 JAVA_OPTIONS | 默认 -Xms512m -Xmx4096m,建议限制为 -Xms256m -Xmx512m |
| 日志级别 | conf/logback.xml | 默认 INFO |
| 认证 | gremlin-server.yaml 的 authentication | 默认关闭,开启方式见注意事项与配置详解文档 |
修改配置后重启服务生效:
/opt/gremlin-server/bin/gremlin-server.sh stop
Server stopped [4482]
/opt/gremlin-server/bin/gremlin-server.sh start
六、注意事项
- Java 17 环境必须为 JVM 追加 --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED 参数。实测缺失该参数时:启用认证的服务端启动即退出(报 Could not create/configure Authenticator null);持久化 TinkerGraph 在停止服务时写盘失败产生 0 字节 graph.kryo 文件导致数据丢失,再次启动时报 Could not load graph at data/graph.kryo with gryo 并退化为"端口在但查询引擎不可用"的半瘫状态。
- gremlin-server.sh start 后面跟的配置文件路径参数不会生效(脚本 start 分支不接收参数),后台方式加载自定义配置必须使用 GREMLIN_YAML 环境变量;前台 console 模式才支持位置参数。
- 默认 host: localhost 只绑定 127.0.0.1,跨机访问必须改 host。该默认 channelizer 为 WebSocket,对普通 HTTP 请求返回 400 Bad Request(Invalid WebSocket handshake method: POST),不能以 HTTP 探测判断服务存活,应使用 ss、nc 等端口级检测。
- 发行包自带 data/credentials.kryo 文件,其中预置 stephen、daniel、marko 三个样例账号(密码为 bcrypt 哈希),启用认证前必须重建该凭据文件,仅保留自建账号。
- SimpleAuthenticator 的密码必须存储为 bcrypt 哈希,存明文会在认证时报 Invalid salt version 拒绝登录。
- TinkerGraph 不支持事务(tx().commit() 抛 UnsupportedOperationException),配置 graphLocation 后数据在服务正常停止(close)时整体落盘,务必通过 stop 命令或 systemd 正常停机,禁止 kill -9。
七、常见问题
Q1:服务进程存在、端口在监听,但所有查询都报 gremlin-groovy is not an available GremlinScriptEngine?
这是典型的启动半瘫:日志中同时存在 Could not load graph at data/graph.kryo with gryo 与 InaccessibleObjectException(java.util.concurrent.atomic 包未被 open)。根因是 JVM 缺少 --add-opens 参数导致持久化图读取失败,图变量未注册进而脚本引擎初始化失败。处理:按 4.8 节在 JAVA_OPTIONS 中补齐 --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED,删除损坏的 0 字节 kryo 文件后重启。
Q2:jps 命令如何验证堆内存确实被限制?
jps -v | grep GremlinServer
回显中的 -Xms256m -Xmx512m 即当前生效的堆参数;若仍显示默认的 -Xmx4096m,说明启动时环境变量 JAVA_OPTIONS 未带上(systemd 方式需写在 unit 文件的 Environment= 行中)。
Q3::remote connect 配置了用户名密码却报 Username and/or password are incorrect?
三步排查:确认服务端 yaml 已加 authentication 块且 credentialsDb 路径正确(注意相对路径以服务端工作目录 /opt/gremlin-server 为基准);确认凭据图文件中只保留自建账号且 password 字段是 bcrypt 哈希而非明文;确认服务端 JVM 带有 --add-opens 参数(凭据图是持久化 TinkerGraph,读取时同样依赖该参数)。
Q4:如何让服务器重启后 Gremlin Server 自动拉起?
按 4.8 节配置 systemd 单元并执行 systemctl enable gremlin-server.service 即可,重启服务器后由 systemd 自动拉起,崩溃时按 on-failure 策略 10 秒后自动重启。
八、卸载方式
先停止服务并移除 systemd 单元:
systemctl stop gremlin-server.service
systemctl disable gremlin-server.service
rm -f /etc/systemd/system/gremlin-server.service
systemctl daemon-reload
删除程序目录与数据:
rm -rf /opt/gremlin-server
rm -rf /opt/gremlin-console
删除环境变量配置文件(如按 4.4 节创建过):
rm -f /etc/profile.d/gremlin-server.sh
如需卸载 JDK:
apt-get remove -y openjdk-17-jdk-headless
九、参考链接
- Apache TinkerPop 官方下载:https://downloads.apache.org/tinkerpop/3.8.2/
- TinkerPop 官方参考文档:https://tinkerpop.apache.org/docs/3.8.2/reference/
- Gremlin Server 官方文档章节:https://tinkerpop.apache.org/docs/3.8.2/reference/#gremlin-server
- TinkerPop 项目主页:https://tinkerpop.apache.org/