1 ES数据备份与恢复
1.1 配置快照仓库(nfs)
nfs 服务端配置
[root@server4 ~]# yum install -y nfs-utils[root@server4 ~]# mkdir -p /data/es-backup# 创建ES快照专用存储目录[root@server4 ~]# chmod 777 /data/es-backup/# 给目录最高读写权限,避免ES权限不足无法写入快照[root@server4 ~]# vim /etc/exports# 共享目录允许所有客户端访问[root@server4 ~]# exportfs -rv# 设置NFS开机自启,并立即启动NFS服务[root@server4 ~]# systemctl enable --now nfsES节点配置
[root@server1 ~]# yum install -y nfs-utils[root@server1 ~]# mkdir -p /data/es-backup# 创建本地挂载目录,和NFS服务端共享目录同名,统一快照存储路径[root@server1 ~]# mount 192.168.40.144:/data/es-backup /data/es-backup# 挂载NFS服务端共享目录[root@server1 ~]# vim /etc/elasticsearch/elasticsearch.yml# 声明ES允许创建快照仓库的本地目录[root@server1 ~]# systemctl restart elasticsearch
server2和server3同上
滚动重启
ES集群重启之后恢复默认值
1.2 通过 API 创建仓库
验证仓库是否创建成功
在 cerebro 页面也可查看到
1.3 快照管理
创建快照
备份所有索引
备份指定索引
列出仓库中所有快照查看单个快照详情
监控快照进度
恢复快照
删除快照
只剩 syslog 的快照
2 ES集群监控
2.1 启用xpack认证
X-Pack 是 Elastic 官方为 Elastic Stack(包括 Elasticsearch、Kibana 等)打造的一个扩展组件包,为原本开源的 Elasticsearch 补充了大量企业级和运维管理所需的高级特性。
核心功能
安全 (Security):提供用户身份验证、基于角色的访问控制(RBAC)、节点间加密通信以及审计日志等。它能有效防止未授权访问和数据泄露。
监控 (Monitoring):提供集群、节点、索引等维度的实时性能监控和可视化。这就是你之前看到的 Kibana 监控页面的数据来源。
告警 (Alerting / Watcher):允许你基于数据或集群状态的变化设置条件,触发邮件、Webhook等多种方式的告警通知。
机器学习 (Machine Learning):提供自动异常检测和预测能力,无需复杂算法就能发现数据中的规律和异常。
SQL:允许你使用标准的 SQL 语句来查询 Elasticsearch 中的数据,降低了使用门槛。
图表分析 (Graph):用于探索数据实体间的关联关系,适合知识图谱等场景。
报告 (Reporting):可以将 Kibana 的可视化图表生成 PDF 等格式的报告。
在server1上生成证书
[root@server1 ~]# cd /usr/share/elasticsearch/[root@server1 elasticsearch]# bin/elasticsearch-certutil ca#设置密码为空[root@server1 elasticsearch]# bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12[root@server1 elasticsearch]# cp elastic-certificates.p12 /etc/elasticsearch[root@server1 elasticsearch]# cd /etc/elasticsearch/[root@server1 elasticsearch]# chown elasticsearch elastic-certificates.p12[root@server1 elasticsearch]# vim elasticsearch.yml[root@server1 elasticsearch]# systemctl restart elasticsearch.service拷贝证书到其它集群节点
[root@server1 elasticsearch]# scp elastic-certificates.p12 server2:/etc/elasticsearch/[root@server1 elasticsearch]# scp elastic-certificates.p12 server3:/etc/elasticsearch/server2配置
[root@server2 ~]# chown elasticsearch /etc/elasticsearch/elastic-certificates.p12[root@server2 ~]# vim /etc/elasticsearch/elasticsearch.yml[root@server2 ~]# systemctl restart elasticsearch.service1.`xpack.security.enabled:true`开启 Xpack 安全认证,开启后访问 ES 必须账号密码2.`xpack.security.transport.ssl.enabled:true`开启集群内部通信 SSL 加密,节点之间数据传输加密,防止抓包窃取分片数据3.`xpack.security.transport.ssl.verification_mode: certificate`证书校验模式:校验对方节点证书合法性,拒绝无证书 / 非法证书节点加入集群4.`xpack.security.transport.ssl.keystore.path`密钥库路径:存放当前节点私钥 + 证书,用于对外通信加密5.`xpack.security.transport.ssl.truststore.path`信任库路径:存放集群所有节点的公钥证书,用来验证其他节点身份server3同server2
等待所有集群节点重启成功后,设置认证账户密码
[root@server1 elasticsearch]# cd /usr/share/elasticsearch/[root@server1 elasticsearch]# bin/elasticsearch-setup-passwords interactive#为了方便这里我的密码全部设置的一样的
ES启用xpack之后,其它服务都需要配置认证
用户名 elastic ,密码为自行设置的密码
head插件在访问时,需要在url中输入用户和密码
[root@server4 ~]# cd elasticsearch-head-master/[root@server4 elasticsearch-head-master]# npm run start &访问http://192.168.40.144:9100/?auth_user=elastic&auth_password=westos
配置 logstash 访问,将账户和密码写进配置文件
[root@server5 ~]# cd /etc/logstash/conf.d/[root@server5 conf.d]# vim beats.conf
启动程序
[root@server5 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/beats.conf
配置 kibana 访问
[root@server4 elasticsearch-head-master]# cd /etc/kibana/[root@server4 kibana]# vim kibana.yml[root@server4 kibana]# systemctl restart kibana.service区分两个账户和密码
kibana.yml里的 kibana 账号(后台服务账号)
yamlelasticsearch.username:"kibana"elasticsearch.password:"westos"作用:Kibana 程序自己后台连接 ES 用
Kibana 启动时,自动用这个账号去 ES 创建 / 维护.kibana索引、保存仪表盘、搜索记录、空间配置;权限很低,只允许操作 Kibana 专属索引,不能用来网页登录;全程后台自动执行,浏览器看不到这个账号。
- 网页登录的 elastic 账号(超级管理员账号)作用:人手动登录页面、操作业务数据
内置最高权限超级账号,能查所有索引、创建用户、修改权限、集群配置;打开192.168.40.144:5601弹出的登录框,需要输入用户名elastic;这个账号不会写到 kibana.yml 配置里。
测试
[root@server1 elasticsearch]# ab -c1 -n 100 http://192.168.40.144/index.html[root@server2 ~]# ab -c1 -n 200 http://192.168.40.144/index.html
server5终端有日志打印输出
2.2 metricbeat 监控
Metricbeat 是 Elastic Stack 中的轻量指标采集器,属于 Beats 家族,专门采集服务器、中间件、数据库性能监控指标,不采集日志。
核心作用
- 采集系统指标:CPU、内存、磁盘、网络、负载
- 组件监控:ES、Logstash、MySQL、Nginx、Redis 运行状态
- 输出到 Elasticsearch,搭配 Cerebro/Kibana 做监控面板
已经检测到 Elasticsearch 节点
选择启动metricbeat的节点,然后根据提示步骤操作
将metricbeat-7.6.1-x86_64.rpm上传到server1的/root
[root@server1 ~]# scp metricbeat-7.6.1-x86_64.rpm server2:[root@server1 ~]# scp metricbeat-7.6.1-x86_64.rpm server3:[root@server1 ~]# rpm -ivh metricbeat-7.6.1-x86_64.rpm[root@server1 ~]# cd /etc/metricbeat/modules.d/[root@server1 modules.d]# metricbeat modules enable elasticsearch-xpack# 开启 elasticsearch-xpack 监控模块,采集 ES 性能数据[root@server1 modules.d]# vim elasticsearch-xpack.yml# ES 开启了 xpack 安全认证,Metricbeat 访问 ES 接口必须携带管理员账号密码,否则采集指标会报错[root@server1 modules.d]# cd ..[root@server1 metricbeat]# vim metricbeat.yml# 指定采集到的监控指标最终写入的 ES 服务地址,所有监控数据统一存入该 ES 集群,同样,Metricbeat 写入数据必须携带管理员账号密码[root@server1 metricbeat]# systemctl enable --now metricbeat.service
等待 kibana 页面响应,出现如下界面即为成功
server2配置
[root@server2 ~]# rpm -ivh metricbeat-7.6.1-x86_64.rpm[root@server2 ~]# cd /etc/metricbeat/modules.d[root@server2 modules.d]# metricbeat modules enable elasticsearch-xpack[root@server2 modules.d]# vim elasticsearch-xpack.yml[root@server2 modules.d]# cd ..[root@server2 metricbeat]# vim metricbeat.yml[root@server2 metricbeat]# systemctl enable --now metricbeat.service
server3同server2
三个节点都设置好后,退出设置模式
已经可以监测到数据
2.3 ES 日志采集
安装 filebeat 并修改配置文件
[root@server1 ~]# rpm -ivh filebeat-7.6.1-x86_64.rpm[root@server1 ~]# cd /etc/filebeat/modules.d[root@server1 modules.d]# filebeat modules enable elasticsearch[root@server1 modules.d]# vim elasticsearch.yml在文件顶端的网址可以获取要配置的内容
配置 filebeat 输出到 ES
[root@server1 modules.d]# cd ..[root@server1 filebeat]# vim filebeat.yml[root@server1 filebeat]# systemctl enable --now filebeat.service已经可以看到server1的日志
server2和server3以此类推,即可看到三个节点的日志
3 ELFK + Kafka 架构部署
ELFK = Elasticsearch + Logstash + Filebeat + Kibana
中间引入 Kafka 消息队列,形成Filebeat → Kafka → Logstash → Elasticsearch ← Kibana高可用日志架构。
Kafka :日志缓冲中间件
核心作用
(1)削峰填谷,保护后端服务
业务高峰期(如秒杀、接口大量报错)会瞬间产生海量日志。
- 无 Kafka:日志全部直打 Logstash,瞬间流量过载会导致 Logstash 阻塞、宕机,日志丢失;
- 有 Kafka:突发日志先存入 Kafka 队列缓存,Logstash 按自身性能匀速消费,不会被峰值流量打垮。
(2)生产消费解耦,两端互不依赖
- Filebeat(生产者)只负责把日志丢进 Kafka,不用关心 Logstash 是否在线、是否故障;
- Logstash(消费者)可以随意启停、扩容、更新配置,期间日志全部存在 Kafka,不会丢失;
- 两者独立运行,任意一端维护不影响另一端工作。
(3)日志持久化兜底,防止数据丢失
Kafka 会把日志磁盘持久化 + 多副本存储,可自定义保存时长(7 天 / 30 天)。
如果 Logstash、ES 集群故障停机,日志会完整保存在 Kafka,服务恢复后 Logstash 能接着断点消费,不会丢日志。
(4)多消费复用一套日志
同一个 Kafka 日志主题(topic),可以搭建多组消费端:
- 一组 Logstash 清洗日志存入 ES,用于运维查询;
- 另一套程序读取日志做安全审计、大数据统计;
不用让 Filebeat 重复推送多份日志,节省服务器带宽与资源。
新开server6、server7、server8,在各台机器上的/etc/hosts中加入解析
server6配置
[root@server6 ~]# rpm -ivh jdk-17.0.17_linux-x64_bin.rpm[root@server6 ~]# tar zxf kafka_2.12-3.9.1.tgz -C /opt[root@server6 ~]# mv /opt/kafka_2.12-3.9.1 /opt/kafka[root@server6 ~]# cd /opt/kafka/config/kraft[root@server6 kraft]# cp server.properties{,.bak}# 备份配置文件[root@server6 kraft]# mkdir /opt/kafka/logs[root@server6 kraft]# vim server.properties
将修改好的配置文件传给server7、server8
[root@server6 kraft]# scp server.properties server7:/opt/kafka/config/kraft/server.properties[root@server6 kraft]# scp server.properties server8:/opt/kafka/config/kraft/server.propertiesserver7和server8配置与server6相同,分别把配置文件中除30行以外的146改成147和148
server6节点生成存储目录唯一的 UUID,集群所有节点必须共用同一个 Cluster ID,标识这是同一套 Kafka 集群
[root@server6 kraft]# KAFKA_CLUSTER_ID="$(/opt/kafka/bin/kafka-storage.sh random-uuid)"[root@server6 kraft]# echo ${KAFKA_CLUSTER_ID}I3bAtanwTmqvTKLDiP7suA三台主机用该 uuid 格式化 kafka 存储目录
/opt/kafka/bin/kafka-storage.shformat-tI3bAtanwTmqvTKLDiP7suA-c/opt/kafka/config/kraft/server.properties三台主机启动 Kafka
/opt/kafka/bin/kafka-server-start.sh-daemon/opt/kafka/config/kraft/server.properties jpsKafka 集群任意节点创建 Topic
[root@server6 kraft]# /opt/kafka/bin/kafka-topics.sh --create --topic testtopics --bootstrap-server localhost:9092 --replication-factor 3 --partitions 3Kafka 集群任意节点查看 Topic
[root@server7 kraft]# /opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092testtopicsKafka 集群任意节点生产者测试
[root@server6 kraft]# /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic testtopics>111>222>333>444>555>Kafka 集群任意节点查看主题
[root@server7 kraft]# /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testtopics --from-beginningKafka 集群任意节点查看 topic 详细信息
[root@server7 kraft]# /opt/kafka/bin/kafka-topics.sh --bootstrap-server server6:9092,server7:9092,server8:9092 --topic testtopics --describeFIlebeat 配置文件修改
[root@server4 ~]# cd /etc/filebeat/[root@server4 filebeat]# vim filebeat.yml[root@server4 filebeat]# systemctl restart filebeat.service[root@server4 filebeat]# filebeat test config -c /etc/filebeat/filebeat.yml[root@server4 filebeat]# filebeat test output -c /etc/filebeat/filebeat.ymlKafka 集群任意节点消费者测试
[root@server8 kraft]# /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic apache-logs --from-beginningLogstash 消费 Topic 消息
[root@server5 ~]# cd /etc/logstash/conf.d/[root@server5 conf.d]# vim kafka.conf[root@server5 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/kafka.conf前台打印大量日志
测试
ab-c1-n300http://192.168.40.144/index.html监控可看到访问情况