
在大数据时代,数据量与请求量的持续增长对搜索引擎的可用性、扩展性提出了极高要求。Elasticsearch(简称 ES)凭借其高可用 与可水平扩展的特性,成为解决海量数据存储与检索的首选方案。
本文将从架构设计的核心诉求出发,深入拆解 ES 集群的核心概念、三节点集群的搭建步骤、可视化工具部署以及安全认证配置,为你提供一份完整的生产级实战指南。
一、为什么要搭建 ES 集群架构?
相比于单节点部署,集群架构是 ES 应对生产环境挑战的核心形态,主要体现在以下两大核心价值:
1. 高可用性 (High Availability)
- 服务不中断:允许部分节点宕机,剩余节点可继续承接请求。
- 数据不丢失:通过副本机制,确保部分节点故障时数据依然完整。
2. 可扩展性 (Scalability)
- 水平扩展 :面对数据增长或请求量激增,可通过增加节点实现数据水平分布。
- 容量扩容:支持存储容量的线性增长,无需重构原有架构。
二、ES 集群核心概念
理解以下三大核心对象及状态标识,是运维集群的基础。
1. 集群 (Cluster) & 节点 (Node)
- 集群 :由一个或多个节点组成,通过
cluster.name区分(默认为elasticsearch)。 - 节点 :一个 ES 实例(本质是 Java 进程)。生产环境建议一台机器仅运行一个实例。
- 主节点 (Master Node:负责集群管理与协调。
2. 分片机制 (Sharding) ------ 核心重点 🔴
分片是 ES 实现分布式存储的灵魂,分为主分片和副本分片。
| 分片类型 | 作用 | 关键特性 |
|---|---|---|
| 主分片 (Primary) | 解决数据水平扩展 | 创建后不可修改,若需调整需 Reindex |
| 副本分片 (Replica) | 解决数据高可用 | 可动态调整,且能提升读取吞吐能力 |
💡 配置示例:
jsonPUT /blogs { "settings": { "number_of_shards": 3, // 主分片数 "number_of_replicas": 1 // 副本分片数 } }
3. 集群健康状态标识
ES 通过颜色标识集群健康状况,这是运维的核心判断依据:
- ✅ Green (绿色):主分片与副本分片均正常分配 ------ 状态最优。
- 🔶 Yellow (黄色):主分片正常,副本分片未正常分配(如单节点集群)------ 数据可用,但高可用不足。
- 🔴 Red (红色):有主分片未能分配(如磁盘满 85%)------ 部分数据不可访问,需紧急处理。
4. CAT API:运维必备工具
ES 提供轻量级 API 快速查看集群信息:
GET _cluster/health:查看健康状况GET /_cat/nodes?v:查看节点详情GET /_cat/indices?v:查看索引详情
三、三节点 ES 集群实战搭建
本实战基于 Elasticsearch 8.14.3 与 CentOS 7,搭建步骤如下:
1. 节点规划
确保节点间网络互通。
| IP 地址 | 节点名 (Node Name) | 主机映射 (Hosts) |
|---|---|---|
| 192.168.65.213 | node-1 | es-node1 |
| 192.168.65.207 | node-2 | es-node2 |
| 192.168.65.208 | node-3 | es-node3 |
2. 系统环境准备 (关键步骤)
ES 启动有严格的引导检查 (Bootstrap Checks,配置不当会导致启动失败。
-
创建专用用户 :严禁 使用 root 用户启动。
bashadduser es passwd es -
关闭防火墙 :
bashsystemctl stop firewalld systemctl disable firewalld -
解决引导检查报错 :
- 文件描述符 :修改
/etc/security/limits.conf,设置nofile至少为 65536。 - 线程数 :修改
/etc/security/limits.d/20-nproc.conf,设置nproc至少为 4096。 - 虚拟内存 :修改
/etc/sysctl.conf,设置vm.max_map_count=262144,并执行sysctl -p生效。
- 文件描述符 :修改
3. 核心配置文件 (elasticsearch.yml)
核心原则:集群名称一致,节点名称唯一。
🔴 关键配置项说明:
| 配置项 | 说明 |
|---|---|
cluster.name |
所有节点必须一致 |
node.name |
每个节点必须唯一 |
discovery.seed_hosts |
配置候选主节点的域名/IP 列表 |
cluster.initial_master_nodes |
仅首次选举时需要,配置初始主节点候选列表 |
配置示例 (以 node-1 为例):
yaml
cluster.name: es-cluster
node.name: node-1
network.host: 0.0.0.0
discovery.seed_hosts: ["es-node1", "es-node2", "es-node3"]
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
http.cors.enabled: true
http.cors.allow-origin: "*"
xpack.security.enabled: false # 初学者建议先关闭
4. 启动与验证
- 启动 :在所有节点执行
bin/elasticsearch -d(后台启动)。- 注意:若从单节点转集群,需先删除 data 目录 (
rm -rf data)。
- 注意:若从单节点转集群,需先删除 data 目录 (
- 验证 :访问
http://192.168.65.213:9200/_cat/nodes?pretty,若返回三个节点信息则成功。
四、可视化工具部署
为了简化运维,推荐部署以下工具:
1. Cerebro (轻量级监控)
- 特点:基于 Scala+AngularJS,专注于集群监控和分片管理。
- 部署 :下载解压后,后台启动
bin/cerebro,访问端口9000。
2. Kibana (官方全能工具)
- 特点:官方可视化平台,支持 DSL 查询、索引管理,支持中文。
- 配置 :修改
kibana.yml,设置server.host和i18n.locale: "zh-CN"。 - 启动 :后台启动
bin/kibana,访问端口5601。
五、ES 集群安全认证配置 (生产必读 🔴)
ES 8.x 默认开启 Security 安全认证,公网环境若无防护极易导致数据泄露。
1. ES 8.x 安全特性
- 首次启动自动生成 TLS 证书。
- 为超级用户
elastic生成随机密码。 - 引入注册令牌 (Enrollment Token) 机制。
2. 三节点开启安全认证步骤
-
Node-1 开启认证 :
-
删除 data 目录,开启
xpack.security.enabled: true。 -
启动后,使用命令重置密码:
bashbin/elasticsearch-reset-password -u elastic -i
-
-
Node-2/3 加入集群 :
-
在 Node-1 生成节点注册令牌 :
bashbin/elasticsearch-create-enrollment-token -s node -
启动 Node-2/3 时携带令牌:
bashbin/elasticsearch --enrollment-token <令牌> -d
-
3. 可视化工具连接认证集群
- Kibana :在 Node-1 生成 Kibana 令牌,执行
bin/kibana-setup --enrollment-token <令牌>进行注册。 - Cerebro :修改
conf/application.conf,在 hosts 中添加用户名和密码配置,并忽略 SSL 验证。
六、核心总结
- 分片是核心:主分片决定数据分布(不可改),副本分片决定高可用(可动态增减)。
- 环境是前提:系统参数(文件描述符、内存等)必须满足引导检查,否则无法启动。
- 配置要严谨:集群名一致,节点名唯一,发现列表配置正确。
- 安全是底线:ES 8.x 默认开启安全认证,节点加入和工具连接必须使用令牌机制。
- 工具提效率:善用 Kibana 和 Cerebro,能极大降低集群运维成本。