在 Ubuntu Server 上构建高并发、高可用(HA)系统时,运维工作需从内核调优、架构设计、服务冗余、监控告警、自动化运维等多维度协同推进。以下是关键实践与常见问题总结:
一、核心运维实践
1. 内核级性能调优
-
网络栈优化
# /etc/sysctl.conf 关键参数 net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 15 net.ipv4.ip_local_port_range = 1024 65535 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216✅ 建议配合
sysctl -p生效;生产环境需压测验证参数合理性。 -
文件描述符限制
# /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535 root soft nofile 65535 root hard nofile 65535 -
NUMA 与 CPU 亲和性
对高频计算场景(如数据库、缓存),使用numactl --cpunodebind=0 --membind=0绑定进程到特定 NUMA 节点,减少跨节点内存访问延迟。
2. 高可用架构设计
| 组件 | 推荐方案 | 说明 |
|---|---|---|
| 负载均衡 | HAProxy + Keepalived / Nginx + Pacemaker | 实现 L4/L7 层故障转移;Keepalived 提供 VIP漂移 |
| 应用集群 | Kubernetes (K8s) / Docker Swarm + Raft | K8s 更适合复杂微服务;支持自动扩缩容、滚动更新 |
| 数据库 | MySQL MGR / PostgreSQL Patroni / Redis Sentinel | 避免单点;MGR 提供原生组复制,Patroni 基于 etcd 的强一致性主从切换 |
| 存储 | Ceph / GlusterFS + LVM | 分布式块/对象存储,结合 RAID10 提升 IOPS |
| 配置中心 | Consul / Etcd / ZooKeeper | 服务发现 + 动态配置,支持健康检查 |
📌 注意:避免“伪高可用”——例如仅做主备但无自动切换机制。
3. 监控与可观测性
- 分层监控体系
- 基础设施:Prometheus + Node Exporter + Alertmanager
- 应用层:OpenTelemetry + Jaeger(链路追踪)+ Grafana(可视化)
- 日志:EFK(Elasticsearch + Fluentd + Kibana)或 Loki + Promtail
- 关键指标
- 连接数 (
netstat -an | grep ESTABLISHED) - TCP 重传率 (
netstat -s | grep retransmit) - 上下文切换 (
vmstat 1 10 | awk '{sum+=$12+$13} END {print sum/NR}') - 磁盘队列深度 (
iostat -x 1 | grep "await")
- 连接数 (
4. 自动化与 IaC
- 配置管理:Ansible 统一部署(角色化 playbook)
- CI/CD:GitLab CI + Argo CD(K8s 环境)
- 基础设施即代码:Terraform 管理云资源(EC2/EBS/VPC)
- 混沌工程:Chaos Mesh 注入故障验证 HA 能力(如随机杀 Pod、模拟网络延迟)
二、常见问题与解决方案
| 问题现象 | 根本原因 | 排查与解决 |
|---|---|---|
| 连接拒绝(Connection refused) | 端口未监听 / 防火墙拦截 / 服务崩溃 | ss -tlnp 查监听状态;ufw status 查防火墙;systemctl 检查服务日志 |
| TCP TIME_WAIT 堆积 | 短连接过多 + 默认回收策略保守 | 启用 tcp_tw_reuse=1;调整 ip_local_port_range;优化客户端复用连接池 |
| CPU 软中断过高(softirq) | 网卡驱动/中断处理瓶颈 | top -H -p $(pidof ksoftirqd) 定位;更换高性能网卡驱动(如 ixgbevf);启用 RSS/XPS |
| 内存泄漏导致 OOM | 应用未释放资源 / 缓存未限制 | dmesg | grep -i oom 确认;查看 cgroup 限制;JVM 加 -XX:+UseG1GC 等参数 |
| 主从同步延迟大 | 网络带宽不足 / 写操作集中在主库 | 开启半同步复制(MySQL: rpl_semi_sync_master_wait_point=POST_SYNC);读写分离;分库分表 |
| VIP 漂移失败 | Keepalived 脚本权限不足 / VRRP 协议被防火墙阻断 | 检查 /var/log/keepalived.log;确保 UDP 112 端口开放;验证 vrrp_instance 配置正确性 |
| 容器启动慢/频繁重启 | 资源竞争 / 健康检查过严 | 调整 resources.limits.requests;优化 livenessProbe 初始延迟(initialDelaySeconds) |
三、Ubuntu 特有注意事项
- AppArmor 安全模块:可能拦截非标准路径访问,必要时临时设为 complain 模式调试:
sudo aa-complain /path/to/app - Systemd 超时限制:默认
TimeoutStartSec=90s,对慢启动服务需延长:[Service] TimeoutStartSec=300 - Cloud-init 冲突:私有云部署时需禁用 cloud-init 防止 IP 重置:
sudo touch /etc/cloud/cloud.cfg.d/disable_cloud_init.cfg echo "disable_upgrade: truendisable_network_config: true" | sudo tee ...
四、最佳实践清单 ✅
- 灰度发布:先切 1% 流量验证新版本稳定性
- 熔断降级:集成 Resilience4j/Sentinel 防止雪崩
- 备份验证:定期执行
mysqldump --single-transaction+ 恢复演练 - 容量规划:基于 Prometheus 历史数据预测增长趋势
- 文档即代码:将运维 SOP 写入 Git(如 Runbook as Code)
如需针对具体场景(如:电商秒杀、X_X交易、IoT 设备接入)深入分析,可提供业务特征,我将进一步定制方案。
云计算导航