深色模式
中间件运维总览
摘要:中间件是业务与底层资源之间的"承重墙",Web 网关、消息队列、协调服务、检索集群各自职责不同但运维套路相通。本文先给出一张职责清单,再给出可直接套用的目录规范、监控接入顺序和日常巡检清单,帮你建立统一的中间件运维基线。
适用环境
bash
# 盘点本机已安装的中间件与版本(未安装的命令会静默跳过)
for c in nginx kafka-server-start.sh rabbitmq-server java; do
command -v "$c" >/dev/null 2>&1 && echo "[OK] $c"
done
# 统一查看监听端口,确认各中间件占用的默认端口
sudo ss -ltnp | awk 'NR==1 || /:9092|:5672|:2181|:9200|:80|:443/'
# 确认系统资源基线(中间件多为内存敏感型)
free -g; nproc; ulimit -n1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
操作步骤
1. 建立职责清单(建议维护在运维 Wiki 或仓库里)
| 类别 | 代表组件 | 默认端口 | 核心职责 | 关键指标 |
|---|---|---|---|---|
| Web 网关 | Nginx | 80/443 | 反向代理、负载均衡、TLS 终断 | QPS、5xx 比例、上游响应时间 |
| 消息队列 | Kafka | 9092 | 高吞吐日志与事件流 | 消费滞后 lag、ISR 副本数 |
| 消息队列 | RabbitMQ | 5672/15672 | 业务异步解耦、可靠投递 | 队列堆积数、ack 速率 |
| 协调服务 | ZooKeeper | 2181/2888/3888 | 选主、配置与元数据一致性 | 选举次数、延迟 |
| 检索分析 | Elasticsearch | 9200/9300 | 全文检索与日志分析 | 分片分配、堆内存、查询延迟 |
2. 统一部署目录与运行用户约定
bash
# 约定:二进制 /opt/<组件>,配置 /etc/<组件>,数据 /data/<组件>,日志 /var/log/<组件>
sudo mkdir -p /opt /etc/nginx /data/kafka /var/log/kafka
sudo useradd -r -s /sbin/nologin middleware 2>/dev/null || true
# 数据目录属主必须是中间件自己的运行用户,否则启动即 permission denied
sudo chown -R middleware:middleware /data/kafka1
2
3
4
5
2
3
4
5
3. 明确监控接入顺序(先有指标再谈告警)
bash
# 顺序:存活探测 -> 组件 exporter -> Prometheus 抓取 -> 看板 -> 告警规则
curl -fsS http://127.0.0.1:80/healthz # 1) 存活探测
curl -fsS http://127.0.0.1:9113/metrics # 2) exporter 指标(端口按组件而定)1
2
3
2
3
4. 固定变更流程
bash
# 任何配置变更三步走:语法检查 -> 灰度重载 -> 观察
sudo nginx -t && sudo systemctl reload nginx # 网关类:先 -t 再 reload,绝不直接 restart1
2
2
5. 建立每日巡检清单
bash
# 一行巡检:进程在不在、端口通不通、错误日志有没有新增
systemctl is-active nginx kafka
sudo tail -n 50 /var/log/nginx/error.log | grep -c "$(date +%Y/%m/%d)"1
2
3
2
3
验证
bash
# 1) 所有中间件进程处于 active
systemctl list-units --type=service --state=running | grep -E 'nginx|kafka|rabbitmq|zookeeper|elasticsearch'
# 2) 端口探测全通
for p in 80 9092 2181 9200; do nc -z -w2 127.0.0.1 $p && echo "port $p OK"; done
# 3) 指标能被抓取到
curl -fsS http://127.0.0.1:9113/metrics | head -51
2
3
4
5
6
7
8
2
3
4
5
6
7
8
常见坑
WARNING
把中间件装成 root 运行是常见事故起点。请为每个组件创建 nologin 系统用户,并用 systemd 的 User= 固定身份,避免权限扩散。
WARNING
数据目录(/data/<组件>)一定要和程序目录分离,并单独挂盘。混装在系统盘上,日志与数据撑爆 / 会连带拖垮所有服务。
DANGER
升级前不看官方 release note 的兼容性说明,直接跨多个大版本升级(如 Kafka 2.x 跨到 3.x、ES 6.x 跨到 7.x),极易导致数据格式不兼容且无法回退。请按官方路径逐级升级,并先做全量备份。