1. 机房与链路选择:选择提供“CN2 GIA/CT”直连回国质量的日本机房。
子项1:确认带宽峰值与突发能力(建议预留25%-50%余量)。
子项2:选择支持BGP/独享IP和10Gbps端口的实例,SSD/NVMe存储。
2. 服务器与网络拓扑:CPU(8核以上)、内存(32GB起)、10Gb网卡优先;架构建议采用前端负载层(Nginx/LVS)、应用层(容器/VM)、缓存层(Redis)、数据库主从/分库分表。
子项1:静态资源走CDN并开启中国节点回源优化。
子项2:数据库使用主从同步并配置备库,支持故障切换。
3. 内核参数与调优:使用Ubuntu/CentOS,按如下方式修改并生效:
子项1:编辑 /etc/sysctl.conf 添加:
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 250000
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_orphans = 262144
然后执行:sysctl -p
子项2:开启BBR(若内核支持):echo "tcp_bbr" >> /etc/modules-load.d/modules.conf; sysctl -w net.ipv4.tcp_congestion_control=bbr
4. ulimit与systemd:设置高文件描述符数,编辑 /etc/security/limits.conf:
* soft nofile 200000
* hard nofile 200000
并为 systemd 服务增加:LimitNOFILE=200000 在对应 unit 文件中,重载 systemctl daemon-reload 并重启服务。
子项:验证:ulimit -n
5. Nginx 高并发配置示例:events { worker_connections 65535; use epoll; } worker_processes auto; http { keepalive_timeout 15; sendfile on; tcp_nopush on; tcp_nodelay on; client_body_timeout 10; client_header_timeout 10; }
子项1:设置合适的 upstream keepalive 连接池。
子项2:为后端应用配置连接池和线程池,避免每请求新建连接。
6. 缓存与异步:用Redis做热点缓存,开启AOF/RDB策略优化持久化;对写密集场景使用队列(RabbitMQ/NSQ/Kafka)做缓冲。
子项1:Redis maxmemory-policy 设置为volatile-lru/volatile-ttl 并设置合理内存上限。
子项2:数据库:开启慢查询日志,建立必要索引,使用连接池(如proxysql),读写分离。
7. Docker / Kubernetes 实操要点:K8s 中用 HPA(基于CPU/自定义指标)做弹性伸缩,Pod 资源设置 requests/limits,使用 readiness/liveness probe 防止未就绪流量。
子项1:Ingress 使用 Nginx-Ingress 或 Traefik,配合外部LB(MetalLB/云LB)。
子项2:CI/CD:使用 Jenkins/GitLab CI/ArgoCD 自动化部署并提供灰度发布与快速回滚策略。
8. 压测与KPI:使用 wrk/ab/hey 以真实并发场景压测,iperf3 测试网络带宽。
子项1:监控:Prometheus + Grafana 采集系统、应用、Redis、DB 指标,并设置 Alertmanager 报警阈值(CPU>80%、QPS突增、错误率>1%)。
子项2:日志:集中化 ELK/EFK 或 Loki,定位慢请求与堆栈。
9. 安全与运维演练:使用 SSH Key、关闭Root直连、配置防火墙(ufw/iptables)限制管理IP,定期演练故障切换与备份恢复。
子项1:定期做全量/增量备份并验证恢复。
子项2:制定运维Runbook(故障定位步骤、回滚步骤、联系人清单)。
10. 问:在CN2链路上遇到延迟抖动如何排查?
10. 答:先用 ping/tracepath/ MTR 检测到国内出口延迟,iperf3 测试带宽;检查服务器端网络队列(netstat -s)、丢包;排查机房提供商是否在做流控或链路拥塞,必要时提交机房工单并切换至备用出口/回源节点。
11. 问:如何做横向扩容且保证会话一致性?
11. 答:无状态服务优先横向扩容;若需会话粘性,使用共享缓存(Redis)或 JWT 无状态认证;负载层使用 consistent-hash 或 session-sticky,优先把状态迁移到外部存储以便灵活扩容。
12. 问:日常运维中有哪些关键报警必须第一时间响应?
12. 答:必须实时响应的有:全链路错误率激增、数据库主库不可写或延迟大、Redis内存耗尽、主机磁盘/CPU达到临界、链路丢包/带宽饱和。制定SLA并设置分级告警与值班流程,做到快速定位和回滚。