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

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

相关推荐
Lynnxiaowen3 小时前
今天继续昨天的正则表达式进行学习
linux·运维·学习·正则表达式·云计算·bash
-KamMinG3 小时前
“从零到一:使用GitLab和Jenkins实现自动化CI/CD流水线”
自动化·gitlab·jenkins
努力学习的小廉4 小时前
深入了解linux系统—— POSIX信号量
linux·运维·服务器
IT成长日记4 小时前
【Linux基础】Linux系统配置IP详解:从入门到精通
linux·运维·tcp/ip·ip地址配置
夜无霄4 小时前
安卓逆向(一)Ubuntu环境配置
linux·运维·爬虫·ubuntu
田野里的雨4 小时前
manticore离线安装(Ubuntu )
linux·运维·服务器·全文检索
wanhengidc4 小时前
云手机就是虚拟机吗?
运维·网络·安全·智能手机
wanhengidc5 小时前
使用云手机能否给企业降本增效
运维·网络·科技·游戏·智能手机
D11_5 小时前
【服务器】将本地项目部署到服务器
运维·服务器