Elasticsearch 高可用集群架构:Master 选举、Shard 分配与容灾设计

在大数据时代,数据量与请求量的持续增长对搜索引擎的可用性、扩展性提出了极高要求。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) 解决数据高可用 可动态调整​,且能提升读取吞吐能力

💡 配置示例:

json 复制代码
PUT /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 用户启动。

    bash 复制代码
    adduser es
    passwd es
  • 关闭防火墙

    bash 复制代码
    systemctl 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. 启动与验证

  1. 启动 :在所有节点执行 bin/elasticsearch -d (后台启动)。
    • 注意:若从单节点转集群,需先删除 data 目录 (rm -rf data)。
  2. 验证 :访问 http://192.168.65.213:9200/_cat/nodes?pretty,若返回三个节点信息则成功。

四、可视化工具部署

为了简化运维,推荐部署以下工具:

1. Cerebro (轻量级监控)

  • 特点:基于 Scala+AngularJS,专注于集群监控和分片管理。
  • 部署 :下载解压后,后台启动 bin/cerebro,访问端口 9000

2. Kibana (官方全能工具)

  • 特点:官方可视化平台,支持 DSL 查询、索引管理,支持中文。
  • 配置 :修改 kibana.yml,设置 server.hosti18n.locale: "zh-CN"
  • 启动 :后台启动 bin/kibana,访问端口 5601

五、ES 集群安全认证配置 (生产必读 🔴)

ES 8.x 默认开启 Security 安全认证​,公网环境若无防护极易导致数据泄露。

1. ES 8.x 安全特性

  • 首次启动自动生成 TLS 证书。
  • 为超级用户 elastic 生成随机密码。
  • 引入注册令牌 (Enrollment Token) 机制。

2. 三节点开启安全认证步骤

  1. Node-1 开启认证

    • 删除 data 目录,开启 xpack.security.enabled: true

    • 启动后,使用命令重置密码:

      bash 复制代码
      bin/elasticsearch-reset-password -u elastic -i
  2. Node-2/3 加入集群

    • 在 Node-1 生成节点注册令牌

      bash 复制代码
      bin/elasticsearch-create-enrollment-token -s node
    • 启动 Node-2/3 时携带令牌:

      bash 复制代码
      bin/elasticsearch --enrollment-token <令牌> -d

3. 可视化工具连接认证集群

  • Kibana :在 Node-1 生成 Kibana 令牌,执行 bin/kibana-setup --enrollment-token <令牌> 进行注册。
  • Cerebro :修改 conf/application.conf,在 hosts 中添加用户名和密码配置,并忽略 SSL 验证。

六、核心总结

  1. 分片是核心:主分片决定数据分布(不可改),副本分片决定高可用(可动态增减)。
  2. 环境是前提:系统参数(文件描述符、内存等)必须满足引导检查,否则无法启动。
  3. 配置要严谨:集群名一致,节点名唯一,发现列表配置正确。
  4. 安全是底线:ES 8.x 默认开启安全认证,节点加入和工具连接必须使用令牌机制。
  5. 工具提效率:善用 Kibana 和 Cerebro,能极大降低集群运维成本。
相关推荐
llm大模型算法工程师weng2 小时前
Palantir:从反恐情报到全球决策操作系统 —— 产品、公司架构与商业化深度解析
微服务·云原生·架构
小超同学你好2 小时前
Transformer 17. Qwen 1 / Qwen 1.5 架构介绍以及与 Transformer、LLaMA 的对比
人工智能·语言模型·架构·transformer
Elastic 中国社区官方博客2 小时前
从 Elasticsearch runtime fields 到 ES|QL:将传统工具适配到当前技术
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索
前端双越老师2 小时前
AI Agent 的异步任务架构
架构·agent·全栈
沫儿笙2 小时前
KUKA库卡焊接机器人智能节气仪
大数据·人工智能·机器人
Agent产品评测局2 小时前
集团型企业自动化落地,如何实现多分支统一管控?——企业级智能体架构与选型深度实测
运维·人工智能·ai·chatgpt·架构·自动化
补三补四2 小时前
大语言模型架构技术原理演进
语言模型·架构·transformer
吃不胖爹2 小时前
Flutter 基本架构与使用
javascript·flutter·架构
掘根2 小时前
【微服务即时通讯】入口网关子服务
运维·微服务·架构