在 CentOS 上实现缓存跨节点共享的主流做法
- 使用集中式内存缓存:部署 Memcached 或 Redis,让所有应用节点连接同一缓存集群,天然实现数据共享与横向扩展。Memcached 适合高吞吐的纯键值场景;Redis 支持更丰富的数据结构、持久化与高可用。两者在 CentOS 上均可通过 YUM 快速安装与配置。对于需要高可用的 Redis,可采用 Sentinel 或 Redis Cluster 模式。
- 共享存储型缓存:将缓存落地到共享文件系统(如 NFS/GlusterFS)或对象存储,各节点挂载同一目录/桶来读写缓存文件。优点是部署简单、成本低;缺点是文件 I/O 与一致性管理更复杂,性能通常低于内存缓存,适合对一致性要求不高或作为“二级缓存/落地层”的场景。
- 反向代理层共享缓存:在 Nginx 或 Varnish 上启用反向代理缓存,缓存命中在边缘节点生效,减少回源。该方式主要解决“内容层”共享,并非应用对象缓存的通用方案。
方案一 Memcached 集中式共享
- 安装与启动(在所有需要共享的节点或专用缓存节点上部署 Memcached):
- 安装:
sudo yum install memcached -y
- 启动:
sudo systemctl start memcached && sudo systemctl enable memcached
- 验证:
memcached -h 或 telnet localhost 11211
- 应用接入:各应用节点将缓存客户端指向 Memcached 集群地址(如 192.168.1.10:11211,192.168.1.11:11211),客户端通常使用一致性哈希进行分片。以 Tomcat 为例,可在
conf/context.xml 中定义资源,指定 servers 列表与过期时间等参数,实现容器级共享缓存。
方案二 Redis 集中式共享与高可用
- 安装与基础配置:
- 安装:
sudo yum install epel-release && sudo yum install redis -y
- 启动:
sudo systemctl start redis && sudo systemctl enable redis
- 验证:
redis-cli ping(返回 PONG 表示可用)
- 高可用与扩展:
- 高可用:部署 Redis Sentinel 实现主从自动故障转移与读写分离。
- 横向扩展:部署 Redis Cluster 实现分片与在线扩容。
- 典型应用:多台 Nginx + PHP-FPM 节点将 PHP Session 统一存入 Redis,实现登录态与购物车等会话数据的跨节点共享。
方案三 共享存储型缓存 NFS 与 GlusterFS
- NFS 共享目录(适合轻量、小规模):
- 在共享存储节点:
sudo yum install nfs-utils -y,编辑 /etc/exports 如 /mnt/nas_cache 10.0.0.0/24(rw,sync,no_root_squash),启动 NFS 服务。
- 在各应用节点:
sudo yum install nfs-utils -y,挂载 sudo mount -t nfs 10.0.0.1:/mnt/nas_cache /mnt/local_cache。
- 注意网络、权限与防火墙策略,确保缓存目录对应用可读写。
- GlusterFS(适合更大规模与更高可用):
- 安装:
sudo yum install glusterfs-server glusterfs-client -y,启动 glusterd。
- 创建卷:
gluster volume create cache_volume transport tcp <server_ip>:/glusterfs/brick1 force,然后 gluster volume start cache_volume。
- 挂载:
sudo mount -t glusterfs <server_ip>:/cache_volume /mnt/cache。
- 适用提示:共享存储型方案便于“缓存落地/共享文件”,但需自行处理并发写、缓存失效与一致性策略,性能通常低于内存缓存。
方案四 反向代理层共享缓存 Nginx 与 Varnish
- Nginx 代理缓存示例:
- 配置
proxy_cache_path 与 proxy_cache,在 location 中使用 proxy_cache my_cache; 指定共享的 keys_zone。
- 适合 HTML/图片/API 响应等“边缘层”共享命中,减少源站压力。
- Varnish:通过 VCL 定制缓存策略,作为高性能 HTTP 加速器在反向代理层共享响应缓存。
- 适用提示:该方式主要优化内容分发层,并不等同于应用对象缓存的跨节点共享。
选型与注意事项
- 选型建议:
- 纯键值、超高吞吐、容忍丢失:优先 Memcached。
- 需要持久化、丰富结构、高可用与集群:优先 Redis(Sentinel/Cluster)。
- 已有共享存储、成本敏感或需缓存落地:考虑 NFS/GlusterFS。
- 主要是静态内容与边缘命中:使用 Nginx/Varnish。
- 一致性:集中式缓存需设计合理的 TTL/失效 与 主动失效 机制;共享文件缓存需处理并发写与锁。
- 高可用:Redis 建议 Sentinel/Cluster;Memcached 可通过多实例+客户端一致性哈希提升容错。
- 网络与安全:开启 防火墙/安全组 仅放通 11211(Memcached)/6379(Redis) 等必要端口;必要时启用 TLS/ACL。
- 监控与容量:监控 命中率、内存使用、连接数、慢查询,结合业务设置合理 maxmemory 与淘汰策略(如 LRU/LFU)。