当前位置:首页 > 服务器技术 > 正文

Nginx缓存高可用(从零搭建高可用缓存系统,小白也能轻松上手)

在现代 Web 架构中,Nginx缓存 是提升网站性能、减轻后端压力的重要手段。但单点部署存在风险——一旦 Nginx 服务器宕机,整个缓存服务就会中断。因此,构建一套 高可用架构 至关重要。本文将手把手教你如何搭建一个具备高可用能力的 Nginx 缓存系统,即使你是运维新手,也能轻松掌握!

什么是 Nginx 缓存高可用?

Nginx 缓存高可用指的是:通过多台 Nginx 服务器协同工作,当其中一台出现故障时,其他服务器能自动接管请求,确保缓存服务不中断。这通常结合 负载均衡 技术实现。

Nginx缓存高可用(从零搭建高可用缓存系统,小白也能轻松上手) Nginx缓存 高可用架构 负载均衡 Nginx配置 第1张

准备工作

  • 至少两台 Linux 服务器(例如 Ubuntu 20.04)
  • 安装好 Nginx(建议版本 ≥ 1.18)
  • 一个可访问的后端应用(如 PHP、Node.js 或静态资源)
  • 基本的命令行操作知识

步骤一:配置 Nginx 缓存

首先,在每台 Nginx 服务器上启用本地缓存。编辑 Nginx 配置文件(通常位于 /etc/nginx/nginx.conf 或站点配置文件中):

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g                 inactive=60m use_temp_path=off;server {    listen 80;    server_name example.com;    location / {        proxy_pass http://backend_server;        proxy_cache my_cache;        proxy_cache_valid 200 302 10m;        proxy_cache_valid 404 1m;        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;        add_header X-Cache-Status $upstream_cache_status;    }}

说明:

  • proxy_cache_path 定义缓存存储路径和内存区域
  • keys_zone=my_cache:10m 创建名为 my_cache 的共享内存区,用于存储缓存键
  • proxy_cache_valid 设置不同状态码的缓存时间
  • X-Cache-Status 响应头可帮助你调试缓存是否命中(HIT/MISS)

步骤二:搭建负载均衡器(VIP 或 DNS 轮询)

为了让用户访问到多个 Nginx 缓存节点,我们需要一个入口点。常用方法有两种:

  1. DNS 轮询:在 DNS 中为域名配置多个 A 记录,指向不同的 Nginx 服务器 IP。简单但故障切换慢。
  2. 虚拟 IP(VIP) + Keepalived:更推荐的方式,实现秒级故障转移。

下面以 Keepalived 为例(适用于两台 Nginx 缓存服务器):

在主服务器安装 Keepalived:

sudo apt update && sudo apt install keepalived -y

创建配置文件 /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {    state MASTER    interface eth0    virtual_router_id 51    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass 123456    }    virtual_ipaddress {        192.168.1.100/24    }}

在备服务器上,将 state MASTER 改为 BACKUPpriority 设为 90。

启动 Keepalived:

sudo systemctl enable --now keepalived

现在,虚拟 IP 192.168.1.100 会自动绑定到主服务器。一旦主服务器宕机,备服务器将在几秒内接管该 IP,实现无缝切换。

步骤三:验证高可用性

1. 访问 http://192.168.1.100,查看响应头中的 X-Cache-Status 是否为 HITMISS
2. 手动停止主服务器的 Nginx:sudo systemctl stop nginx
3. 再次访问,确认服务仍可用,且由备服务器响应。

进阶建议

  • 使用共享存储(如 NFS 或 Redis)实现缓存一致性(适用于强一致性场景)
  • 监控 Nginx 缓存命中率和服务器健康状态(可用 Prometheus + Grafana)
  • 定期清理过期缓存,避免磁盘占满

总结

通过本文,你已经掌握了如何利用 Nginx缓存负载均衡 和 Keepalived 构建一套 高可用架构。这套方案成本低、部署快,非常适合中小型项目。记住,高可用不是“要不要做”,而是“必须做”——它能让你的服务在意外发生时依然坚如磐石!

如果你觉得有用,欢迎收藏并分享给更多需要的朋友!