在开始前明确业务指标:并发连接数、每秒请求数(RPS)、带宽峰值、容灾RTO/RPO、是否需要公网高防(DDoS)以及预算。例:目标峰值10k RPS,峰值带宽500Mbps,容灾RTO 10 分钟。
选择支持DDoS防护、提供弹性伸缩、接口/API操作便捷的厂商(对比防护阈值、计费、地域节点)。在控制台或通过CLI下单:选择合适机型(CPU/内存/网卡带宽)和镜像(Ubuntu/CentOS),启用高防套餐并配置公网带宽。
创建专用VPC子网、配置路由表和NAT(如需出网)。设置安全组/防火墙,仅开放必需端口(80/443/22),并限制SSH来源IP。启用防护厂商的流量镜像与攻击告警。
在一台基础机上完成系统、内核参数调优、Nginx/应用安装并制作镜像。示例:使用cloud-init脚本自动拉代码、安装依赖。示例cloud-init片段:#cloud-config runcmd: - [ apt, update, -y ] - [ apt, install, nginx, -y ]。保存为镜像用于横向扩容。
在高防前置或负载均衡器(L4/L7)上绑定实例。推荐配置L4高性能加L7转发。若应用需要保持会话,使用共享会话存储(Redis)或启用粘性会话;优先采用无状态设计。
创建伸缩组,指定最小实例数、期望实例数和最大实例数。配置伸缩触发规则:例如CPU利用率>65%且持续5分钟,则增加1台;CPU<30%且持续10分钟,则减少1台。若厂商支持API,可通过CLI/SDK设置:示例伪命令:cloudcli autoscale create --name web-asg --min 2 --max 10 --policy add-on-cpu --threshold 65 --period 300。
对静态资源使用对象存储或NFS。示例rsync命令同步代码:rsync -avz --delete /var/www/ user@new-node:/var/www/。对于数据库使用主从或集群复制,或将状态放入外部Redis/Mongo集群确保扩容时无状态冲突。
在负载均衡器配置HTTP/ TCP健康检查(如每30s请求 /health 返回200)。集成监控(Prometheus+Grafana 或厂商监控)并针对CPU、内存、响应时间和带宽设置报警。示例阈值:95% 响应时间 >2s 触发告警。
使用工具(wrk、siege、locust)做渐进压测:先在非高防链路做单机测试,再接入高防+LB模拟真实流量。观察伸缩是否按规则触发,并检查新实例是否能被LB接入且健康检查通过。
设置伸缩策略以避免惊群效应(冷却时间设置合理),使用按需与包年结合(基线负载用包年,波峰用按量)。启用带宽清洗计费提醒,配置预算告警避免突发费用。
步骤汇总:1) 评估并选厂商;2) 配置VPC与安全组;3) 准备镜像并上传;4) 创建LB与健康检查;5) 建伸缩组并设置策略;6) 同步数据与外部状态服务;7) 压测与监控调优;8) 上线并监控。每一步均需验证(健康检查、日志、报警)。
问:弹性扩容期间,高防(DDoS)策略会被中断或弱化吗?
答:不会(前提是正确配置)。高防通常位于流量入口层,与后端实例弹性扩容是分层的。扩容只会增加后端实例数量,流量仍由高防设备或清洗池处理。但要确保:新的实例流量经过同一高防链路、负载均衡与路由规则同步、并且防护阈值覆盖新增带宽。
问:动态扩容会带来不受控的费用,如何管控?
答:通过设置伸缩上限、冷却时间、基线包年实例与按需结合、预算告警并定期分析伸缩触发原因(避免误触发)。可对不同业务流量类型设限流或排队策略,减少不必要扩容。
问:扩容时如何确保会话与数据无缝一致?
答:最佳做法是将应用设计为无状态,使用外部会话存储(Redis)或共享文件/对象存储。对数据库使用主从复制或集群,扩容新实例时通过启动脚本自动注入配置并通过健康检查后加入LB,确保不会接收未初始化流量。