Elasticsearch 9 安装验证实战:start-local 一键部署 + Docker 手动安装踩坑指南

Elasticsearch 9 安装验证实战:start-local 一键部署 + Docker 手动安装踩坑指南

ES 8 用得好好的,要不要升 9?升级前总得先跑起来摸一摸。本文记录一次 Elasticsearch 9 的完整验证过程:官方 start-local 脚本一键拉起 ES+Kibana、手动 Docker 安装的 GPG 密钥坑、Kibana 的 enrollment token 接入,附验证清单和踩坑表。十几分钟就能在测试机拥有一个 9.x 环境。
🔗 相关阅读:环境跑起来之后,用《esrally 压测全流程》摸性能基线;升级生产前先看《快照备份到 NAS》/《备份到 HDFS》------升级的第一原则是先有退路。

一、ES 9 带来了什么

评估一个新版本值不值得折腾,先看核心变化(细节以官方 release notes 为准):

  • 底座升级到 Lucene 10:索引与检索性能持续优化,这是 9 系列所有收益的根基
  • ES|QL 持续增强:日志分析场景的查询语言越来越能打
  • 向量检索与 AI 生态:语义检索相关能力继续加码
  • 安全默认更严格:从 8 系延续的默认开启安全、自动生成凭证的思路进一步固化------本文的 enrollment token 就是这套机制的一环

对新版本的正确姿势:先在测试机验证兼容性,再评估升级窗口。下面两条部署路线都能快速起步。

二、最速路线:start-local 一键拉起 ES + Kibana

Elastic 官方的 start-local 脚本是最省事的验证方式,一条命令拉起 ES + Kibana 两个容器(含安全配置):

bash 复制代码
sudo curl -fsSL https://www.elastic.co/start-local | sudo sh

跑完的输出大致长这样(凭证每台机器随机生成,以下为示意):

text 复制代码
🎉 Congrats, Elasticsearch and Kibana are installed and running in Docker!
🌐 Open your browser at http://localhost:5601
   Username: elastic
   Password: <自动生成的随机密码>
🔌 Elasticsearch API endpoint: http://localhost:9200
🔑 API key: <自动生成的 API key>

脚本默认把 8/9 的当前 GA 版本拉起来,容器名、网络、数据卷都自动编排好,凭证务必当场存下来(输出只打印一次)。

三、手动路线:Docker 安装踩坑实录

要精细控制版本和参数时用手动方式。装 Docker 时踩了本次最有意思的一个坑:

3.1 GPG 密钥的管道坑

按官方文档安装 Docker,添加 GPG 密钥这步报错:

bash 复制代码
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# gpg: no valid OpenPGP data found.

根因 :管道右侧加了 sudo 后,gpg 以 root 运行,而管道里的数据流经的是当前用户的 shell------某些环境下重定向和 sudo 的组合会读到空流,gpg 拿到空输入就报 no valid OpenPGP data。

解法:两步走,先把文件落盘,再解包:

bash 复制代码
sudo apt install -y ca-certificates curl gnupg lsb-release

# 1. 下载密钥文件到当前目录
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o docker-gpg
cat docker-gpg   # 正常应显示二进制乱码,空文件说明下载就没成功

# 2. 再解包到 keyrings
sudo gpg --dearmor docker-gpg -o /usr/share/keyrings/docker-archive-keyring.gpg

之后正常走完:

bash 复制代码
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

3.2 内核参数:vm.max_map_count

ES 容器最常见的起不来原因,宿主机必须调:

bash 复制代码
sudo sysctl -w vm.max_map_count=262144
# 持久化
echo 'vm.max_map_count=262144' | sudo tee /etc/sysctl.d/99-es.conf

3.3 启动 ES9 容器

bash 复制代码
docker run -d --name es9 \
  -p 9200:9200 \
  -e discovery.type=single-node \
  -e xpack.security.enabled=true \
  -e ES_JAVA_OPTS="-Xms2g -Xmx2g" \
  -m 4g \
  docker.elastic.co/elasticsearch/elasticsearch:9.2.2

安全开启状态下,容器日志里会打印 elastic 用户的初始密码(docker logs es9 | grep password 可找回)。

四、Kibana 接入:enrollment token

ES 8.2+ 安全自动配置后,Kibana 首次接入需要 enrollment token(一次性令牌,30 分钟有效)。在 ES 容器里生成:

bash 复制代码
docker exec -it es9 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
# 输出一段 base64 的 token,复制

浏览器打开 http://localhost:5601,粘贴 token,再用 elastic 用户密码登录即完成配对。Kibana 容器方式启动时,也可以把 token 作为环境变量传入。

五、验证清单

检查项 命令/位置 预期
ES 版本号 curl -u elastic:<密码> localhost:9200 "number" : "9.x.x"
集群健康 GET _cluster/health status 为 green(单节点为 yellow 属正常,无副本可分配)
Kibana 可用 浏览器 5601 端口 能登录进控制台
旧客户端兼容 业务 SDK 连一下 8.x 客户端大多兼容 9.x(REST 兼容层),核心链路建议回归

六、踩坑记录表

现象 解法
GPG 管道解包失败 no valid OpenPGP data found 先落盘再 --dearmor,见 3.1
ES 容器启动即退 日志报 max virtual memory areas 宿主机调 vm.max_map_count=262144
Kibana 登录要 token 安全自动配置机制 create-enrollment-token -s kibana 生成,30 分钟有效
凭证丢失 start-local 输出没存 按官方文档重置 elastic 密码,或重建容器(测试环境)
内存不足被 OOM 杀 容器消失,dmesg 有 oom-kill -m 限内存 + ES_JAVA_OPTS 堆对齐,测试机 4G 起步

总结

验证新版本的最低成本路径已经跑通:start-local 十分钟起步摸功能,手动 Docker 控版本细节做兼容验证。ES9 的升级决策建议分三步走------测试环境验证(本文)→ 压测对比(esrally)→ 生产灰度升级(先备份!)。整个链路里最容易被忽略的是备份:升级失败能回滚的前提,是快照真的存在。

你们开始评估 ES9 了吗?升级路上撞到什么兼容问题?评论区聊聊。


环境:Ubuntu + Docker;版本 9.2.x;文中密码、token 均为示意,以实际生成为准。

相关推荐
智恒百亿1 小时前
8 卡 RTX 5090 服务器深度实测:256GB 显存能否支撑 70B 模型微调?选型参考
大数据·运维·服务器·人工智能
TDengine (老段)6 小时前
TDengine 线程模型 — 网络、调度、执行
大数据·数据库·物联网·制造·时序数据库·tdengine·涛思数据
名字还没想好☜6 小时前
Docker 容器安全加固实战:非 root、只读根文件系统、drop capabilities 与最小攻击面
运维·安全·docker·容器·kubernetes
码--到成功7 小时前
Docker、Kubernetes安装系列 二
docker·容器·kubernetes
智购科技自动贩卖机9 小时前
自动售货机嵌入式状态机设计实战:从45个事件源到层次型状态机的工程重构
大数据·人工智能·stm32·物联网·重构·硬件架构
M--Y9 小时前
Docker镜像与仓库管理详解
docker·容器
乐迪信息9 小时前
智慧港口船舶AI算法实现在线状态监测
大数据·人工智能·深度学习·算法·计算机视觉
Raas1009 小时前
MAI Gateway(魔芋企业级AI网关)对比分析:AI网关和API网关区别?企业级能力差距一览
大数据·人工智能·数据挖掘·mai gateway·企业级产品
starzy19909 小时前
虚拟化解决方案全景:软件虚拟化、硬件虚拟化与 Docker 的位置
运维·docker·容器