ICP备案

网站高可用架构怎么做?负载均衡、多节点与故障转移全解析

作者:备案源头内容团队内容审核:备案源头内容团队更新于 2026年7月6日

单台服务器承载的网站,只要这台机器宕机、升级重启或被打满,网站就整体不可用。当业务对可用性有要求时,就需要从"单点"走向"高可用(HA)架构"——通过冗余和自动故障转移,让任何单一组件失效都不至于让整站瘫痪。本文系统讲清高可用的核心组件与落地要点。

先理解:可用性和单点故障

可用性常用"几个 9"衡量:99.9%(全年停机约 8.8 小时)、99.99%(约 53 分钟)。要提升可用性,核心是消除单点故障(SPOF)——任何一个坏了就导致全站不可用的环节,都要做冗余。典型单点包括:唯一的 Web 服务器、唯一的数据库、唯一的负载均衡入口、甚至唯一的机房。

负载均衡:流量入口的冗余与分发

负载均衡器(LB)把用户请求分发到多台后端服务器,是高可用的核心。既能分摊压力,也能在某台后端故障时把它摘除。

常见分发算法 说明 适用
轮询(round robin) 依次分发 后端性能相近
加权轮询 按权重分发 后端配置不均
最少连接 发给当前连接最少的 长连接、请求耗时不均
IP 哈希 按客户端 IP 固定到某后端 需要会话粘性

常见实现:Nginx/HAProxy(软件 LB)、云厂商的 SLB/CLB/ELB(托管 LB)。用 Nginx 做负载均衡的最小配置:

upstream app_backend {
    least_conn;
    server 10.0.0.11:3000 weight=1 max_fails=3 fail_timeout=15s;
    server 10.0.0.12:3000 weight=1 max_fails=3 fail_timeout=15s;
}
server {
    listen 443 ssl;
    server_name example.com;
    location / {
        proxy_pass http://app_backend;
        proxy_next_upstream error timeout http_502 http_503;
    }
}

健康检查:自动摘除故障节点

高可用的关键不是"有多台",而是"坏了能自动发现并摘除"。健康检查分两类:

  • 被动健康检查:如上面 Nginx 的 max_fails/fail_timeout,请求失败到阈值就临时摘除该节点。
  • 主动健康检查:LB 周期性访问后端的健康检查接口(如 /health),不通就摘除、恢复了再加回。云 LB 和 HAProxy、OpenResty 都支持。

应用应提供一个轻量的 /health 端点,只检查关键依赖(数据库、缓存连通性),返回 200/非 200,供 LB 判断。

会话与状态:别让多节点互相打架

多台后端并存时,"状态"是最大的坑。用户第一次请求落在 A 节点、下一次落在 B 节点,如果会话(登录态)只存在 A 的内存里,用户就"莫名其妙掉登录"。解决思路:

  • 会话外置:把 session 存到 Redis 等共享存储,所有节点读同一份(推荐)。
  • 会话粘性:LB 用 IP 哈希/cookie 把同一用户固定到同一节点(简单但节点故障时该用户会话丢失)。
  • 无状态化:用 JWT 等把状态放客户端,后端不存会话。

上传的文件同理,不要存本地磁盘,应放对象存储或共享存储,否则不同节点看到的文件不一致。

数据库高可用:主从与读写分离

Web 层无状态化后,数据库往往成为新的单点。常见方案:

  • 主从复制:一主多从,主库写、从库读(读写分离分摊读压力),主库故障时把从库提升为主。
  • 自动故障转移:借助 MHA、Orchestrator 或云数据库的高可用版本,主库挂了自动切换,减少人工介入。
  • 备份兜底:高可用不等于备份,误删/逻辑错误会同步到从库,仍需独立的数据备份与恢复

故障转移与容灾:从多节点到多机房

  • 同机房多节点:防单机故障,是最基础的高可用。
  • 多可用区:把节点分布在同城不同可用区,防单个机房级故障。
  • 异地容灾:核心业务再做异地备份/灾备,防区域性灾难。容灾要定期演练切换,否则真出事时未必切得动。

备案与高可用架构的注意点

多节点、换 IP、加负载均衡都可能改变实际接入的服务器与 IP,需注意备案接入信息与实际一致:

别过度设计

高可用有成本。展示型小站用"一台服务器 + 好备份 + 监控"往往就够;只有当停机的业务损失明显高于冗余成本时,才逐步引入负载均衡、多节点、数据库主从。先用运维监控看清真实的故障率和瓶颈,再按需加冗余,比一上来堆架构更划算。

常见问题

Q:加了负载均衡就高可用了吗?
不完全。LB 分发流量并摘除故障后端,但如果 LB 自身、数据库、机房是单点,照样会整站不可用。高可用要逐个消除单点,并确保故障能自动转移。

Q:多节点后用户老掉登录怎么办?
把会话外置到 Redis 等共享存储,或用 LB 会话粘性、JWT 无状态方案,避免会话只存在单个节点内存里。

Q:小网站有必要做高可用吗?
多数小站不必。先做好备份和监控,单机足够;等停机损失明显超过冗余成本,再逐步引入负载均衡与多节点。

资料来源

以上为通用架构思路,具体组件与配置以你使用的服务器、负载均衡与数据库产品文档为准。

相关阅读

网站数据怎么备份与恢复?备份策略、异地备份与恢复演练

服务器故障、误删、被攻击、迁移出错,任何一种都可能让网站数据丢失。备份不是"有就行",而是要能在需要时真正恢复回来。本文讲清网站该备份什么、怎么备、多久备一次,以及恢复怎么做。 备份什么 | 对象 | 说明 | |---|---| | 数据库 | 网站核心数据(文章、订单、用户等),优先级最高 | | 站点文件 | …

CDN 缓存策略怎么配?缓存规则、回源、刷新与预热全解析

很多站长接了 CDN 却发现两类问题:要么"改了内容用户还看到旧的",要么"命中率很低、CDN 形同虚设"。这都是缓存策略没配好。接入 CDN(见 备案网站怎么接入 CDN)只是第一步,真正让 CDN 又快又不出错,靠的是精细的缓存规则。本文系统讲清。 缓存的基本原理 CDN 在全国节点缓存你的资源副本,用户就近取,…

网站定时任务与运维自动化怎么做?自动备份、证书续期与巡检

证书忘了续、备份忘了做、日志忘了清——运维事故很多不是不会做,而是"忘了做"。把重复的运维动作交给定时任务自动执行,是最省心也最可靠的做法。本文讲清哪些该自动化、定时任务怎么用,以及自动任务本身也要监控。 哪些运维适合自动化 | 任务 | 自动化收益 | |---|---| | 数据备份 | 定时全量/增量,避免漏备…

网站数据库运维怎么做?选型、性能优化、主从与备份全解析

对大多数网站,数据库是最核心、也最难重建的资产:程序挂了能重启,数据库数据丢了或被拖慢,整站跟着崩。数据库运维不是"装完能用就行",而要在选型、性能、可靠性、安全四条线上持续投入。本文系统梳理网站数据库运维的关键点。 选型:关系型还是其它 大多数网站用关系型数据库(MySQL/MariaDB、PostgreSQL)就…

网站打不开怎么排查?从解析、端口到备案的运维排查清单

网站突然打不开,原因可能在任何一层:域名没解析、端口没放行、服务挂了、证书过期、甚至掉备案或被墙。乱试一通只会浪费时间。本文给一份从外到内、分层排查的运维清单,按顺序走一遍就能快速定位。 排查总原则:分层,从外到内 按"域名解析 → 网络与端口 → 服务器与 Web 服务 → HTTPS 证书 → 备案与被墙"的顺序…

开发、测试、生产环境怎么分离?配置管理与发布流程

直接在生产服务器上改代码、连生产数据库调试,是运维事故的高发来源。把开发、测试、生产环境分开,让改动先在安全的地方验证,是稳定运维的基础。本文讲清三套环境怎么分、配置怎么管、怎么一步步发布到线上。 三套环境各干什么 | 环境 | 用途 | 数据 | |---|---|---| | 开发(dev) | 写代码、本地调试…

网站错误页怎么做?404、50x 自定义页与优雅降级实操

用户访问到一个"Nginx 默认 502 白页"或浏览器原生 404,会直接流失;搜索引擎抓到大量返回 200 的"软 404"也会伤收录。错误页看似小事,做好了却能留住用户、保护 SEO。本文讲清怎么把错误页做对。 先分清常见错误码 | 状态码 | 含义 | 典型原因 | |---|---|---| | 404 |…

备案通过后网站怎么上线?域名解析、服务器绑定与部署实操

很多站长拿到 ICP 备案通过通知后,反而卡在"接下来怎么让网站真正打开"这一步。备案解决的是"能不能上线"的资质问题,真正上线还需要一套运维动作:把域名解析到服务器、在服务器上部署站点、绑定域名、配好 HTTPS,最后验证访问。本文按实操顺序梳理。 上线前提:备案与接入都已就绪 开始部署前先确认两件事:一是备案已通…

系统学习