需手动部署6节点Redis集群实现高可用与扩展:创建多端口实例、启用集群模式、用redis-cli初始化、开放双端口、配置PHP集群连接、调优故障恢复与持久化参数。

如果您在宝塔面板中部署 Redis 服务,但需要实现缓存高可用与横向扩展能力,则需脱离单机模式,构建 Redis 集群。宝塔面板本身不直接提供 Redis 集群图形化配置界面,需通过手动部署与参数调优完成。以下是实现该目标的具体步骤:
一、安装多个独立 Redis 实例
Redis 集群要求至少 6 个节点(3 主 3 从)以满足故障转移与数据分片基本条件。每个实例必须运行在不同端口且启用集群模式。需在服务器上手动编译或使用宝塔软件商店安装 Redis 后,复制多份配置并分别启动。
1、进入宝塔面板【软件商店】,安装 Redis(建议版本 7.0+)。
2、在命令行中创建实例目录:mkdir -p /www/server/redis\_cluster/{7000,7001,7002,7003,7004,7005}。
3、为每个端口生成独立配置文件,例如 /www/server/redis\_cluster/7000/redis.conf,内容包含:port 7000、cluster-enabled yes、cluster-config-file nodes-7000.conf、cluster-node-timeout 5000、appendonly yes。
4、依次为 7001 至 7005 复制配置,仅修改 port 和 cluster-config-file 对应值。
二、启动全部 Redis 节点并初始化集群
所有节点必须处于运行状态后,才能执行集群握手与槽分配。此过程依赖 redis-cli 的 --cluster 子命令,不可跳过任一节点的启动验证。
1、逐个启动实例:/www/server/redis/src/redis-server /www/server/redis\_cluster/7000/redis.conf,依此类推启动全部 6 个端口。
2、确认进程存活:ps aux | grep redis | grep -E '700[0-5]',应显示 6 行有效进程。
3、执行集群初始化命令:/www/server/redis/src/redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1。
4、在交互提示中输入 yes 确认槽位分配。
三、配置宝塔防火墙与安全组放行端口
Redis 集群节点间需双向通信,除客户端访问端口外,还需开放集群总线端口(即客户端端口 + 10000),否则节点无法完成握手与心跳检测。
1、进入宝塔面板【安全】页面,添加入站规则:7000-7005 及 17000-17005 全部放行。
吐槽大师(Roast Master) - 终极 AI 吐槽生成器,适用于 Instagram,Facebook,Twitter,Threads 和 Linkedin
2、若服务器部署于云平台(如阿里云、腾讯云),同步在云控制台安全组中开放对应端口范围。
3、验证端口连通性:telnet 127.0.0.1 7000 与 telnet 127.0.0.1 17000 均应返回成功连接响应。
四、配置 PHP 或应用服务连接集群
单机 Redis 扩展(phpredis)默认不支持集群直连,需启用 Redis Cluster 模式或改用支持集群的客户端库。宝塔环境下需确保 PHP 扩展兼容并正确设置引导节点。
1、确认 phpredis 版本 ≥ 5.3.4:php --ri redis | grep "Redis Version"。
2、在 PHP 代码中使用集群连接方式:$redis = new RedisCluster(null, ['127.0.0.1:7000', '127.0.0.1:7001']);。
3、若使用 Laravel 框架,在 config/database.php 中将 redis.client 设为 predis,并配置 clusters 键指向全部主节点地址。
4、测试写入:执行 $redis->set('test\_key', 'cluster\_ok'),再从任意节点读取验证一致性。
五、配置节点故障自动恢复与持久化策略
Redis 集群主节点宕机后,从节点升主依赖于超时机制与多数派投票。需调整关键参数避免脑裂,并强制 AOF 持久化保障重启后数据可恢复。
1、编辑全部节点 redis.conf,设置:cluster-node-timeout 5000、cluster-require-full-coverage no、appendonly yes、appendfsync everysec。
2、禁用主从全量覆盖保护:echo 'cluster-require-full-coverage no' >> /www/server/redis\_cluster/7000/redis.conf,其余节点同理追加。
3、为每个实例配置 systemd 服务文件,实现崩溃自动拉起:systemctl enable redis\_7000.service,确保服务开机自启。
4、手动触发一次主节点宕机测试:执行 kill -9 $(pgrep -f 'redis-server.*7000'),观察 7003(其从节点)是否在 10 秒内升为主并接管槽位。
测试写入和读取验证数据一致性,这个步骤不能少。我配完后用set和get试了一下,各节点都能读到数据。
Manual Redis cluster setup on Baota panel is well documented here. The 6-node requirement is standard for production Redis clusters.
Laravel框架配置predis那段很实用。现在很多项目用Laravel,文章给出了具体的配置方式。
The step about enabling systemd services ensures the cluster starts automatically after reboot. Critical for production.
配置文件的cluster-config-file要每个节点不同,文章里用了nodes-7000.conf这种命名方式,不容易混淆。
The telnet verification steps for both client and cluster bus ports are essential for debugging connectivity issues.
作为运维,集群节点故障自动恢复这个功能太重要了。文章里的测试方法可以直接拿来验证配置是否生效。
Using phpredis 5.3.4 or higher is important. Older versions don't support RedisCluster properly. The article mentions the version check.
按照文章步骤操作,从创建目录到初始化集群,大概半个小时就能配好一个6节点的Redis集群。
The guide covers everything from installation to testing. The failover test with kill -9 is the ultimate validation that the cluster works.
在宝塔安全页面和云服务器安全组要双重放行端口,这个提醒很重要。只开一个地方端口还是不通。