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.2environment:- discovery.type=single-nodeports:- 9200:9200- 9300:9300kibana:image: docker.elastic.co/kibana/kibana:8.8.2ports:- 5601:5601environment: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
监控与告警不可少,保证日志平台稳定