ELK 集群部署实战

发布于:2025-09-10 ⋅ 阅读:(18) ⋅ 点赞:(0)

ELK 集群部署实战

本次分享如何在生产环境搭建 高可用 ELK 集群,并分享实战中常用的部署技巧与优化策略。


一、部署前环境规划

1. 操作系统

ELK 对操作系统比较友好,主流 Linux 均支持:

  • CentOS 7/8

  • Ubuntu 18.04/20.04

  • 麒麟操作系统

建议尽量统一操作系统版本,以减少兼容性问题。

2. 硬件资源

节点类型 CPU 内存 磁盘
Master 2-4 4-8GB 50GB SSD
Data 4-8 16-32GB 500GB SSD/HDD
Client / Kibana 2 4-8GB 50GB SSD

3. 网络规划

  • 集群内部节点互通:TCP 9300(ES 节点间通信)

  • 外部访问 Elasticsearch REST API:TCP 9200

  • Kibana Web:TCP 5601

  • 节点间推荐使用静态 IP 或内网域名。


二、部署方式

1. 快速试用:Docker Compose

适合测试或 PoC:

version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.8.2
    environment:
      - discovery.type=single-node
    ports:
      - 9200:9200
      - 9300:9300
  kibana:
    image: docker.elastic.co/kibana/kibana:8.8.2
    ports:
      - 5601:5601
    environment:
      ELASTICSEARCH_HOSTS: http://elasticsearch:9200

2. 生产环境:二进制安装 + Systemd

安装 Elasticsearch
# 下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.8.2-linux-x86_64.tar.gz
tar -xzf elasticsearch-8.8.2-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/elasticsearch-8.8.2
# 配置 elasticsearch.yml
vi config/elasticsearch.yml
elasticsearch.yaml示例配置:
cluster.name: elk-prod
node.name: es-node1
node.roles: [ master, data ]
network.host: 0.0.0.0
discovery.seed_hosts: ["10.0.0.1","10.0.0.2","10.0.0.3"]
cluster.initial_master_nodes: ["es-node1","es-node2","es-node3"]
bootstrap.memory_lock: true
设置 Systemd 服务:
sudo tee /etc/systemd/system/elasticsearch.service <<EOF
[Unit]
Description=Elasticsearch
After=network.target
[Service]
Type=simple
User=elasticsearch
Group=elasticsearch
ExecStart=/usr/local/elasticsearch-8.8.2/bin/elasticsearch
LimitNOFILE=65536
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
​
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
安装 Kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.8.2-linux-x86_64.tar.gz
tar -xzf kibana-8.8.2-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/kibana-8.8.2
vi config/kibana.yml
​
示例配置:
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://10.0.0.1:9200"]
​
启动:
./bin/kibana

3. 自动化部署:Ansible

适合大规模节点: • 编写 playbook 部署 Elasticsearch/Kibana。 • 支持批量配置 discovery.seed_hosts、集群名、角色分配。 • 可集成监控和证书分发。

三、集群配置要点

1. Elasticsearch 参数优化

# jvm.options
-Xms16g
-Xmx16g
# elasticsearch.yml
cluster.routing.allocation.disk.watermark.high: 85%
cluster.routing.allocation.disk.watermark.low: 75%
indices.query.bool.max_clause_count: 10240

2. Logstash 参数

pipeline.workers: 4       # CPU 核数
pipeline.batch.size: 125  # 每批处理日志数量
queue.type: persisted     # 持久化队列,防止丢失

3.Kibana

  • server.host 绑定内网 IP 或 0.0.0.0

  • elasticsearch.hosts 填写 ES 集群地址

  • 可配置 SSL/TLS 与认证

四、集群管理与监控

1. 集群状态检查

curl http://10.0.0.1:9200/_cluster/health?pretty
curl http://10.0.0.1:9200/_cat/nodes?v
curl http://10.0.0.1:9200/_cat/indices?v

2. 常用监控指标

  • Heap 使用率

  • GC 次数

  • 分片数量与大小

  • 节点负载和磁盘占用

3. Kibana Monitoring

  • 可视化集群健康状态

  • 告警节点离线、磁盘满等

五、实战案例

当前ELK 集群部署:

节点设计:
  • 3 Master 节点

  • 6 Data 节点(热 SSD + 冷 HDD)

  • 2 Client 节点运行 Kibana

部署流程:
  • 安装 Elasticsearch 并配置集群。

  • 配置 Systemd 自动启动。

  • 部署 Kibana 并连接 ES。

  • Filebeat + Logstash 实现日志采集与清洗。

优化经验:
  • 分片控制在 30GB 左右。

  • 热数据副本 1,温数据副本 0。

  • 启用持久化队列防止 Logstash 高峰丢日志。

  • 使用 ILM 自动管理索引生命周期。

六、常见问题与排查

1.节点无法加入集群
检查 discovery.seed_hosts、集群名
2.查询慢
检查分片数量、索引模板、查询语法
3.磁盘占满
检查 ILM 或 Curator 是否启用
4.Logstash 丢日志
检查队列配置及 pipeline 状态
5.Kibana 无法连接 Elasticsearch
检查 network.host、防火墙、TLS

七、总结

  • 高可用 ELK 集群部署必须规划好节点角色、资源和网络

  • 生产环境优先使用 Systemd 服务 + 持久化队列 + ILM

  • 监控与告警不可少,保证日志平台稳定


网站公告

今日签到

点亮在社区的每一天
去签到