1.
目标与准备工作
- 明确目标:在流量突增时自动扩容并保证可用性(RPS、响应时间、错误率)。
- 环境准备:列出服务器、K8s 集群或云主机、NAT/负载均衡、VPN/SSH 访问权限、域名与证书。
- 工具清单:Prometheus、node_exporter、cAdvisor、Grafana、Alertmanager、Prometheus Adapter(K8s)、kubectl、haproxy/nginx、Redis/Varnish、CDN。
2.
部署基础监控:安装 Node Exporter 与 cAdvisor
- 在每台主机或节点上安装 node_exporter:下载二进制并设为 systemd 服务,示例命令:
wget https://.../node_exporter && chmod +x node_exporter && sudo tee /etc/systemd/system/node_exporter.service ...
- 容器监控用 cAdvisor:在每个节点启动 cAdvisor 容器:
docker run -d --name=cadvisor --volume=/var/run/docker.sock:/var/run/docker.sock ... google/cadvisor:latest。
- 验证端点:访问 http://node:9100/metrics 和 cAdvisor UI,确认数据暴露。
3.
部署 Prometheus 与基本配置
- 安装 Prometheus(容器或二进制)。创建 prometheus.yml,将 node_exporter/cAdvisor 列入 scrape_targets:
scrape_configs: - job_name: 'node' static_configs: - targets: ['node1:9100','node2:9100']
- 启动并访问 http://prometheus:9090,执行查询(如 node_cpu_seconds_total、container_memory_usage_bytes)确认数据。
4.
建立 Grafana 仪表板并导入面板
- 安装 Grafana 并添加 Prometheus 数据源(URL: http://prometheus:9090)。
- 导入常用模板(Node Exporter Full、Kubernetes cluster monitoring)。重点看:CPU 使用率、内存、磁盘 I/O、网络吞吐、HTTP 请求速率/错误率、95/99 百分位响应时间。
- 保存并设置读取权限,配置单页概要(overview)便于运维夜间查看。
5.
配置告警规则与 Alertmanager
- 在 Prometheus 中新增 rule 文件,例如 high_cpu.yml:
- alert: HighCPU expr: avg(node_cpu_seconds_total{mode!="idle"}) > 0.8 for: 2m labels: severity: critical annotations: summary: "CPU过高"。
- 部署 Alertmanager,配置通知渠道(Slack/邮件/LINE/Telegram),并在 Prometheus 中指向 Alertmanager。
- 测试告警:人工制造负载(stress/nginx ab/hey),确认告警触达并包含恢复建议。
6.
Kubernetes 自动扩容(HPA)实战配置
- 前提:集群已安装 metrics-server 或使用 Prometheus Adapter 暴露自定义指标。
- 示例 HPA YAML(基于 CPU):
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: web-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: web minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60
- 若使用自定义请求速率(RPS)作为指标:安装 prometheus-adapter 并配置 rules,把 prometheus query 转为 k8s metric,再在 HPA 指定 metric name。
- 验证:用压力测试工具逐步增加 RPS,观察 Pod 数、CPU 与响应延迟变化。
7.
云端/虚拟机层的弹性伸缩(ASG)设置
- 如果不是 K8s,使用云厂商的自动伸缩组(Auto Scaling Group):设定健康检查(HTTP 或 TCP)、启动模板、最小/最大实例数、伸缩策略(基于 CPU、网络或自定义 CloudWatch/Monitoring 指标)。
- 绑定负载均衡器(如 AWS ALB、GCP LB、或自建 HAProxy),确保新实例加入时自动注册并通过健康检查后才接流量。
- 测试:触发伸缩阈值并检查日志、健康检查与自动剔除失效节点的行为。
8.
边缘优化:负载均衡、缓存与 CDN 配置
- 负载均衡器(Nginx/Haproxy):配置健康检查、权重、连接数限制、超时与 keepalive,提高反向代理稳定性。
- 静态资源使用 CDN(Cloudflare、Akamai、本地 CDN):设置缓存策略、Cache-Control 与 ETag,减轻源站压力。
- 应用层缓存(Redis、Varnish)与限流(nginx limit_req、API 网关)保护后端避免雪崩。
9.
测试、演练与回滚流程
- 建立压测计划:逐步 ramp-up、峰值持久化、针对于热点页面与API的测试。使用工具:hey、wrk、ab。
- 演练自动扩容和收缩流程,记录时间线(触发->新增实例/Pod->健康检查->开始接流)并优化阈值与冷却时间。
- 制定回滚步骤:减少流量(归档/导流到备用站点)、降级非核心功能、快速回收失败扩容策略并通知相关团队。
10.
问:如何选择基于 CPU 还是基于请求速率来触发自动扩容?
- 答:选择依据主要取决于应用瓶颈。若后端为 CPU 密集型(解码、压缩),用 CPU;若是 I/O 或请求并发导致延时,应以 RPS/响应时间或自定义应用指标为准。实务上建议同时监控并采用混合策略(K8s HPA 可组合多指标)。
11.
问:Prometheus+Grafana 的部署如何保证高可用?
- 答:Prometheus 可通过多实例 + Thanos/ Cortex 实现长期存储与 HA;Alertmanager 建议配置多副本并启用静态 peer;Grafana 后端使用持久化数据库(SQLite 可替换为 MySQL/Postgres),并做定期备份与多节点 LB。
12.
问:在台湾地区部署群站有哪些本地注意事项?
- 答:注意选择低延迟的机房与 CDN 节点(台北/台中/高雄),遵循当地网络带宽峰值与出口限制,备份 DNS 与多域名解析以防单点故障;与当地 ISP 协调健康检查及突发流量的 BGP/链路策略。
来源:性能监控与自动扩容助力台湾群站服务器应对流量峰值