Elasticsearch 集群管理与监控 详解

Elasticsearch 集群管理与监控 是保障系统高可用、性能稳定、数据安全的核心能力。本文将为你提供一份 全面、可落地的集群管理与监控详解,涵盖节点角色分配、健康状态解读、监控方案与备份恢复机制。


一、节点角色分配(Node Roles)

Elasticsearch 从 7.0 开始采用 显式角色划分,避免“全能节点”带来的资源竞争和故障风险。

1. 核心节点角色

角色配置项说明
Master-Eligiblenode.roles: [master]参与主节点选举,管理集群状态
Data Nodenode.roles: [data]存储分片,执行 CRUD、聚合等操作
Ingest Nodenode.roles: [ingest]执行 pipeline 预处理数据(如 grok 解析)
Coordinating Only无角色(默认)仅协调请求,不存储数据
Remote Clientnode.roles: [remote_cluster_client]用于跨集群搜索

✅ 一个节点可拥有多个角色,但生产环境建议 角色分离


2. 推荐部署架构(生产环境)

节点类型数量配置建议说明
Master-Eligible316GB RAM, 4CPU, SSD奇数个,避免脑裂
Data NodeN64GB+ RAM, 多核 CPU, 大容量磁盘存储主/副本分片
Ingest NodeK32GB RAM, 高 CPU执行日志解析等预处理
Coordinating OnlyM16GB RAM, 低磁盘接收客户端请求,负载均衡

✅ 示例:

  • es-master-01node.roles: [master]
  • es-data-01node.roles: [data]
  • es-ingest-01node.roles: [ingest]

3. 配置示例(elasticsearch.yml)

# es-master-01
node.name: es-master-01
node.roles: [ master ]
discovery.seed_hosts: ["es-master-01", "es-master-02", "es-master-03"]
cluster.initial_master_nodes: ["es-master-01", "es-master-02", "es-master-03"]

# es-data-01
node.name: es-data-01
node.roles: [ data ]
discovery.seed_hosts: ["es-master-01", "es-master-02", "es-master-03"]

二、集群健康状态解读(GET _cluster/health)

通过 GET /_cluster/health 查看集群整体状态。

1. 返回示例

{
  "cluster_name": "my-cluster",
  "status": "green",
  "timed_out": false,
  "number_of_nodes": 5,
  "number_of_data_nodes": 3,
  "active_primary_shards": 10,
  "active_shards": 20,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 0
}

2. 关键字段说明

字段说明
status集群健康状态(green/yellow/red)
number_of_nodes在线节点数
number_of_data_nodes数据节点数
active_primary_shards主分片正常分配数量
active_shards主 + 副本分片总数
unassigned_shards未分配分片数(>0 表示异常)
relocating_shards正在迁移的分片数
initializing_shards正在初始化的分片数

3. 健康状态含义

状态说明是否可用
🟢 green所有主分片和副本都正常分配✅ 完全正常
🟡 yellow主分片正常,副本未全部分配⚠️ 可用,但无高可用
🔴 red有主分片未分配,部分数据不可用❌ 部分数据不可访问

✅ 生产环境应尽量保持 green


三、集群监控方案

方案 1:Kibana Monitoring(推荐用于快速上手)

Kibana 内置的 Stack Monitoring 模块,可直接监控:

  • 集群健康、节点负载、索引性能;
  • JVM 内存、GC、线程池;
  • 分片分布、磁盘使用率。
启用方式
# kibana.yml
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: ["http://es-node1:9200"]

访问 Kibana → Stack Monitoring → 查看图表。


方案 2:Prometheus + Grafana(推荐用于生产)

使用 Elasticsearch Exporter 将指标暴露给 Prometheus。

1. 部署 Exporter
docker run -d \
  -p 9114:9114 \
  quay.io/justwatch/elasticsearch_exporter:latest \
  --es.uri=http://es-node1:9200
2. Prometheus 配置
scrape_configs:
  - job_name: 'elasticsearch'
    static_configs:
      - targets: ['localhost:9114']
3. Grafana 看板

导入官方看板:

  • Elasticsearch Dashboard(ID: 2322)
  • 关键面板:
    • 集群健康状态
    • 节点 CPU / 内存 / 磁盘
    • 索引吞吐(indexing rate)
    • 查询延迟(query latency)
    • 分片未分配告警

4. 关键监控指标

指标说明
elasticsearch_cluster_health_status0=red, 1=yellow, 2=green
elasticsearch_nodes_jvm_memory_used_percentJVM 内存使用率
elasticsearch_thread_pool_write_rejected写入拒绝数
elasticsearch_indices_search_query_time_seconds查询延迟
elasticsearch_indices_store_size_bytes索引大小
elasticsearch_shard_state{state="UNASSIGNED"}未分配分片

四、备份与恢复:Snapshot & Restore API

1. 创建快照仓库(Snapshot Repository)

快照存储在共享文件系统或云存储中。

示例:S3 仓库
PUT /_snapshot/my_backup
{
  "type": "s3",
  "settings": {
    "bucket": "es-snapshots-prod",
    "region": "us-west-1",
    "access_key": "AKIA...",
    "secret_key": "..."
  }
}
其他类型:
  • fs:本地共享存储(NFS)
  • gcs:Google Cloud Storage
  • azure:Azure Blob Storage

✅ 仓库只需创建一次。


2. 创建快照(Backup)

全量备份
PUT /_snapshot/my_backup/snapshot-2024-06-01?wait_for_completion=true
指定索引备份
PUT /_snapshot/my_backup/snapshot-logs
{
  "indices": "logs-*",
  "include_global_state": false
}

wait_for_completion=true 表示同步等待完成。


3. 查看快照状态

GET /_snapshot/my_backup/_all
GET /_snapshot/my_backup/snapshot-2024-06-01

4. 恢复快照(Restore)

恢复全部索引
POST /_snapshot/my_backup/snapshot-2024-06-01/_restore
恢复指定索引并重命名
POST /_snapshot/my_backup/snapshot-2024-06-01/_restore
{
  "indices": "logs-2024-05-*",
  "rename_pattern": "logs-(.+)",
  "rename_replacement": "restored-logs-$1"
}

⚠️ 恢复前确保目标索引不存在或已关闭。


5. 自动化备份(ILM + Scheduled Job)

使用 Curator 或定时脚本:

# 每天凌晨备份
0 2 * * * curl -X PUT "http://localhost:9200/_snapshot/my_backup/daily-$(date +\%Y-\%m-\%d)"

或使用 Elastic Agent + Fleet 实现自动化运维。


五、最佳实践 checklist ✅

项目建议
节点角色生产环境分离 master/data/ingest
主节点数3 或 5,奇数
集群健康监控 unassigned_shards
监控方案Prometheus + Grafana(生产)
快照仓库使用 S3/OSS 等持久化存储
备份频率每日一次,保留 7~30 天
恢复演练每季度执行一次灾备恢复测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值