需手动部署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 秒内升为主并接管槽位。
The redis-cli --cluster create command with --cluster-replicas 1 is the key step. It automatically assigns slots and sets up master-slave relationships.
持久化配置也讲到了,appendonly yes加上appendfsync everysec,数据安全性和性能平衡得不错。
cluster-require-full-coverage设置为no很关键。默认yes的话,部分节点故障整个集群就不可用了,生产环境必须改。
6个实例手动启动确实有点麻烦,但为了高可用值得。文章里的systemd配置能让实例自动拉起,服务器重启后不用手动启动了。
The fault recovery test at the end is excellent. Killing a master node and verifying the slave promotes within 10 seconds confirms the cluster works.
PHP连接集群需要RedisCluster类,普通Redis类连不上。文章里给出了代码示例,new RedisCluster(null, ['127.0.0.1:7000'])这个写法很标准。
The step about testing with telnet to verify cluster bus connectivity is very practical. Many tutorials skip this. Good to see it included.
在宝塔里配置Redis集群,关键是防火墙要放对端口。我之前就是忘了开17000端口,节点一直连不上。文章里专门提醒了这点,很贴心。
The cluster bus port (client port + 10000) is often overlooked. The article emphasizes opening both 7000-7005 and 17000-17005 ports. That's crucial for node communication.
集群节点要6个这个门槛不低,3主3从是最低要求。文章里从创建目录到启动实例,再到初始化集群,流程很完整。我用的是7.2版本,照着配没问题。
宝塔面板里配置Redis集群确实没有图形化界面,这篇文章的步骤很详细。手动创建6个实例,配置端口和集群模式,每一步都写清楚了。照着做了一遍,成功跑起来了。