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
-
监控与告警不可少,保证日志平台稳定