需手动部署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 全部放行。
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 秒内升为主并接管槽位。










