ELK 集群部署实战

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

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

相关推荐
早睡冠军候选人1 小时前
K8s学习----节点(Node)
运维·学习·云原生·容器·kubernetes
会飞的小蛮猪2 小时前
运维之路(SSH工具集)
运维·经验分享·工具
IT成长日记3 小时前
【Nginx开荒攻略】静态文件服务深度解析:MIME类型映射与优化实战
linux·运维·服务器·nginx·mime
wanhengidc4 小时前
云手机服务器多开需要注意哪些
运维·服务器·智能手机
赋创小助手4 小时前
Supermicro NVIDIA Grace Superchip存储服务器超微ARS-121L-NE316R开箱评测
运维·服务器·人工智能·深度学习·机器学习·自然语言处理
前方一片光明6 小时前
Linux—升级openssh常见的问题与解决方案
linux·运维·服务器
珊瑚礁的猪猪侠6 小时前
Nginx从入门到精通:小白实战教程
运维·nginx
wanhengidc6 小时前
云手机在软件资源方面的优势
运维·服务器·网络·游戏·智能手机
python开发笔记7 小时前
python(77) python脚本与jenkins pipeline交互的5种方式
python·jenkins·交互
野熊佩骑7 小时前
CentOS二进制安装包方式部署K8S集群之系统初始化
运维·docker·微服务·云原生·容器·kubernetes·centos