当然可以!以下是 Elasticsearch 8.x+ 自管部署(Self-Managed)环境下,从零搭建一个安全集群的完整操作流程总结 ,适用于 RPM/DEB 安装方式(如 yum/apt)。
✅ 总体目标
- 启动第一个节点 → 自动创建安全单节点集群
- 添加更多节点 → 安全加入现有集群
全程 无需手动配置 TLS 证书、密码或修改 elasticsearch.yml。
🧱 第一阶段:启动第一个节点(创建集群)
💡 这是整个集群的"种子节点",会自动生成 CA、密码和 token。
操作步骤:
# 1. 安装 Elasticsearch(以 RPM 为例)
sudo yum install elasticsearch-8.x.x.rpm
# 2. 确保数据目录为空(首次安装默认就是空的)
ls /var/lib/elasticsearch # 应该为空或不存在
# 3. 直接启动!(关键:不要改任何配置)
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
验证自动安全配置:
# 查看 elastic 用户密码
sudo grep "Password for the elastic user" /var/log/elasticsearch/*.log
# 查看 enrollment token(用于后续加节点/Kibana)
sudo grep "Enroll this node" /var/log/elasticsearch/*.log
sudo grep "Enroll Kibana" /var/log/elasticsearch/*.log
# 检查证书是否生成
ls /etc/elasticsearch/certs/
# 应包含: http_ca.crt, http.p12, transport_ca.crt, transport.p12
# 测试访问(需密码)
curl -u elastic -k https://localhost:9200
✅ 此时你已有一个 启用 HTTPS + 认证 + TLS transport 的单节点安全集群。
➕ 第二阶段:添加新节点(加入集群)
💡 新节点必须 从未启动过(数据目录为空),且使用相同版本 ES。
操作步骤:
🔹 步骤 1:在已有集群节点上生成 node enrollment token
# 在第一个节点(或任意已有节点)执行
sudo -u elasticsearch /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
输出示例:
eyJ2ZXIiOiIxLjAiLCJhZHIiOlsiMTkyLjE2OC4xLjEwOjkyMDAiXSwiZmdyIjoi...
⏰ 注意:token 1 小时内有效,一次性使用
🔹 步骤 2:在新节点上运行 reconfigure-node
# 在新服务器上(已安装 ES,但尚未启动!)
sudo /usr/share/elasticsearch/bin/elasticsearch-reconfigure-node \
--enrollment-token "eyJ2ZXIiOiIxLjAiLCJhZHIiOlsiMTkyLjE2OC4xLjEwOjkyMDAiXSwiZmdyIjoi..."
✅ 该命令会自动:
- 下载集群 CA 证书
- 申请本机 TLS 证书
- 配置安全通信参数
🔹 步骤 3:启动新节点
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
🔹 步骤 4:验证新节点是否加入成功
在任意节点执行:
# 需要 elastic 密码(来自第一步日志)
curl -u elastic -k "https://localhost:9200/_cat/nodes?v&h=name,ip,role"
应看到新节点的 IP 和角色。
📌 关键注意事项
| 项目 | 要求 |
|---|---|
| ES 版本 | 所有节点必须完全一致(如 8.12.0) |
| 数据目录 | 新节点必须为空(/var/lib/elasticsearch) |
| 网络连通性 | 新节点能访问已有节点的 9200 端口(HTTPS) |
| 主机名/DNS | 建议配置正确 hostname,或确保 IP 可被识别 |
| 不要提前启动新节点 | 否则它会自建集群,无法加入 |
🚫 错误做法(务必避免)
| 错误 | 后果 |
|---|---|
| 先启动新节点再 reconfigure | 新节点变成独立集群(脑裂) |
| 手动复制证书文件 | 容易出错,官方不推荐 |
在 tar 包安装上用 reconfigure-node |
不支持!仅限 RPM/DEB |
| 使用过期或已用过的 token | 加入失败 |
🔄 扩展:添加 Kibana(同理)
# 在 ES 节点生成 Kibana token
bin/elasticsearch-create-enrollment-token -s kibana
# 在 Kibana 服务器执行
bin/kibana --enrollment-token "xxx"
Kibana 会自动完成 HTTPS 配置并连接 ES。
✅ 最终架构效果
[Node-1] ← 自动创建 CA/密码/token
│
├─ [Node-2] ← 通过 reconfigure-node + token 加入
├─ [Node-3] ← 同上
└─ [Kibana] ← 通过 kibana enrollment token 加入
所有通信:HTTPS + TLS + 认证,开箱即安全 🔐
💡 总结一句话
第一个节点:直接启动,自动安全初始化;
后续节点:先拿 token,再 reconfigure,最后启动。
这就是 Elasticsearch 8.x "Secure by default, simple to scale" 的最佳实践!
需要我提供一个 自动化 Shell 脚本模板 来一键完成多节点部署吗?😊