在 Ubuntu Server 上构建高并发(High Concurrency)和高可用(High Availability, HA)系统,需要结合操作系统调优、架构设计和自动化运维工具。以下是核心实践与常见问题的系统梳理:
一、高并发场景下的运维实践
1. 内核参数优化
Ubuntu 默认配置面向通用场景,需针对高并发调整 /etc/sysctl.conf:
# 文件句柄数
fs.file-max = 655350
ulimit -n 65535
# TCP 连接管理
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.ip_local_port_range = 1024 65535
# 内存管理(减少 Swap 抖动)
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
✅ 建议配合
sysctl -p生效,并写入 systemd 服务确保持久化。
2. 网络栈优化
- 启用 TCP BBR 拥塞控制(Ubuntu 20.04+ 默认支持):
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf - 使用
ethtool调整网卡中断亲和性(IRQ Affinity),避免单核瓶颈。 - 对于 UDP 高并发(如游戏/视频流),需调大
net.core.rmem_max/wmem_max。
3. 应用层适配
- Web 服务器(Nginx/Apache):
- Nginx:
worker_processes auto; worker_connections 65535; multi_accept on; - Apache:MPM prefork → mpm_event + mod_proxy_fcgi
- Nginx:
- 数据库(MySQL/PostgreSQL):
- 调整
innodb_buffer_pool_size(≈70% RAM)、max_connections - 启用
slow_query_log+pt-query-digest分析瓶颈
- 调整
4. 资源隔离与限制
- 使用 cgroups v2 限制容器/进程 CPU/内存:
systemd-run --scope -p MemoryMax=4G -p CPUQuota=80% myapp - 关键服务部署于独立命名空间或 Podman/Docker 容器中,避免“噪声邻居”。
二、高可用(HA)架构实践
1. 负载均衡层
- LVS + Keepalived:四层负载均衡 + VIP 漂移(适合 TCP/UDP 流量)
- HAProxy + Keepalived:七层负载均衡,支持健康检查、SSL 卸载
- Nginx + Lua/OpenResty:动态路由、灰度发布、限流熔断
✅ 推荐组合:Keepalived 管理 VIP + HAProxy/Nginx 作为实际X_X节点(至少 3 节点防脑裂)
2. 集群状态同步与仲裁
-
使用 Pacemaker + Corosync 构建标准 HA 集群(替代老旧的 Heartbeat)
# 安装基础组件 sudo apt install pacemaker corosync ha-cluster-check # 初始化集群(交互式) sudo crm cluster init -y sudo crm cluster join node2 node3 - 配置资源约束(Resource Constraints):
# 示例:DB 主从自动切换 crm configure primitive db-master ocf:heartbeat:MySQL params master_node=node1 op monitor interval=30s role=Master op start timeout=60s op stop timeout=60s
3. 数据层高可用
| 技术 | 适用场景 | 注意事项 |
|---|---|---|
| MySQL MGR / Group Replication | 强一致性要求 | 需 3+ 节点,网络延迟敏感 |
| PostgreSQL Patroni + etcd | 灵活扩展 | 依赖外部协调服务(etcd/ZooKeeper) |
| Redis Sentinel / Cluster | 缓存层 | Sentinel 模式简单;Cluster 分片需手动规划槽位 |
| Galera Cluster | MySQL 多主 | 写性能受限于全局锁,慎用 |
⚠️ 避免单点故障:所有元数据服务(如 etcd、ZooKeeper)必须奇数节点部署(3/5/7)。
4. 监控与自愈
- Prometheus + Grafana + Alertmanager:
- 采集指标:node_exporter(主机)、mysqld_exporter、haproxy_exporter
- 告警规则:CPU > 90% 持续 5min → 触发工单 + 自动扩容
- 自愈脚本(配合 Ansible/Terraform):
# 当检测到某节点无响应时,自动迁移 VIP 到新节点 if ! ping -c 1 nodeX; then vip_move_to nodeY ansible-playbook restart_services.yml -l nodeY fi
三、常见问题与解决方案
| 问题现象 | 可能原因 | 排查/解决步骤 |
|---|---|---|
| 连接被拒绝(Connection Refused) | 端口未监听 / firewall 阻断 / 服务崩溃 | ss -tlnp, ufw status, systemctl status svc |
| 高负载下响应慢但 CPU 不高 | I/O 等待高 / 上下文切换频繁 | iostat -x 1, pidstat -w 1, 检查磁盘队列深度 |
| Keepalived 双主冲突 | 网络分区导致脑裂 | 检查 VRRP 心跳链路;启用 nopreempt + 仲裁机制 |
| 数据库主从延迟突增 | 长事务阻塞 / 网络抖动 | SHOW SLAVE STATUSG 查 Seconds_Behind_Master;分析慢查询日志 |
| OOM Killer 频繁触发 | 内存泄漏 / 配置不合理 | dmesg | grep OOM;检查 cgroup 限制;调整 swappiness |
| DNS 解析超时影响 HA 切换 | DNS TTL 过长 / 本地缓存污染 | 设置短 TTL(<60s);使用 systemd-resolved + dnsmasq 本地缓存 |
四、进阶建议
- 自动化运维:用 Terraform + Ansible 实现基础设施即代码(IaC),确保环境一致性。
- 混沌工程:定期注入故障(如
chaos-mesh模拟网络延迟、节点宕机),验证 HA 能力。 - 安全加固:
- 禁用 root SSH 登录,强制密钥认证
- 启用 AppArmor 策略限制服务权限
- 定期更新内核(
apt update && apt upgrade linux-image-generic)
如需针对具体业务场景(如电商秒杀、实时音视频、X_X交易系统)进一步定制方案,可提供详细需求,我将给出针对性架构设计与参数配置建议。
CLOUD技术笔记