Redis Cluster部署实践
一、我们要做什么?
今天的目标很明确:在一台服务器(IP地址是192.168.166.9)上,手动搭建一个3主3从的Redis集群。这意味着我们需要启动6个Redis实例:
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
- 3个主节点(Master):端口号分别是6379、6381、6383。
- 3个从节点(Sla ve):端口号分别是6380、6382、6384。
听起来有点复杂?别担心,跟着步骤走,其实就像搭积木一样清晰。
二、准备工作(傻瓜式操作)
1. 先搞一个模板配置文件
万事开头难,但第一步很简单。我们以系统默认的Redis配置文件为基础,创建一个模板:
- 将
/etc/redis.conf复制一份,命名为/etc/redis/6379.conf。 - 这个文件已经包含了端口、日志路径、数据目录等基础参数,是我们后续批量操作的基础。
2. 一键生成6个配置文件
有了模板,剩下的就是复制粘贴。一条命令就能搞定:
for i in {6380..6384}; do cp 6379.conf $i.conf; done
看,是不是瞬间就生成了从6380到6384的5个配置文件,加上原来的6379,正好6个。
3. 批量改配置(用循环搞定)
每个实例的配置不能完全一样,尤其是端口和文件路径。我们可以用一个简单的循环,批量修改每个配置文件中的关键项。下面这张表清晰地列出了需要修改的地方:
| 配置项 | 改成什么 |
|---|---|
| 端口 | 6379 → 6380、6381… |
| 数据目录 | /var/lib/redis/6379 → 各自端口 |
| 日志文件 | /var/log/redis/6379.log → 各自端口 |
| PID 文件 | /var/run/redis/6379.pid → 各自端口 |
| 保护模式 | yes → no |
| 后台运行 | no → yes |
| 监听地址 | 127.0.0.1 → 192.168.166.9 |
这里有几个关键点:关闭保护模式和绑定真实IP是为了让节点间能够互相通信,这是集群组建的前提。
4. 加上集群配置(每个配置文件末尾追加)
要让Redis实例以集群模式运行,还需要在每个配置文件的末尾加上这三行核心配置:
cluster-enabled yes cluster-config-file nodes-端口.conf cluster-node-timeout 15000
这三行的作用分别是:开启集群模式、指定集群节点配置的存储文件、设置节点间心跳超时时间为15秒。超时后,集群会认为该节点可能故障了。
三、启动所有实例
配置妥当,是时候让它们跑起来了。同样,一条命令启动所有6个实例:
for i in {6379..6384}; do redis-server /etc/redis/$i.conf; done
检查一下进程,如果能看到6个`redis-server`在运行,那么恭喜,第一步的“单兵作战”已经完成。
四、组成集群(手动搓)
现在我们有6个独立的Redis服务,但它们彼此还不认识。接下来,我们要把它们组织成一个真正的集群。
1. 让所有节点互相认识
我们需要让其中一个节点作为“介绍人”,去认识其他所有节点。这里选择6379端口这个实例:
for i in {6380..6384}; do redis-cli -h 192.168.166.9 -p 6379 cluster meet 192.168.166.9 $i; done
执行完这条命令,这6个节点就建立起了联系,知道了彼此的存在。但此时,它们还不知道各自在集群里该干什么。
2. 分配槽位(16384个槽,平均分给3个Master)
这是Redis Cluster的核心设计。整个集群有16384个哈希槽(slot),所有数据都通过key的CRC16校验和对16384取模,映射到某个槽上。现在,我们需要把这16384个“货架”平均分配给3个主节点来管理。
| 节点 | 槽位范围 | 槽数量 |
|---|---|---|
| 6379 | 0 ~ 5461 | 5462 |
| 6381 | 5462 ~ 10922 | 5461 |
| 6383 | 10923 ~ 16383 | 5461 |
分配命令如下:
redis-cli -h 192.168.166.9 -p 6379 cluster addslots {0..5461}
redis-cli -h 192.168.166.9 -p 6381 cluster addslots {5462..10922}
redis-cli -h 192.168.166.9 -p 6383 cluster addslots {10923..16383}
切记:必须分配完所有16384个槽,集群才能进入可用状态。
3. 建立主从关系(谁是谁的备胎)
光有主节点还不够,我们需要为每个主节点配一个从节点,以实现高可用。首先,需要获取每个主节点的唯一ID:
redis-cli -h 192.168.166.9 -p 6379 cluster nodes
在输出的信息中找到端口为6379、6381、6383的节点,记下它们长长的ID。然后,执行复制命令:
# 让6380成为6379的从节点 redis-cli -h 192.168.166.9 -p 6380 cluster replicate <6379的ID> # 让6382成为6381的从节点 redis-cli -h 192.168.166.9 -p 6382 cluster replicate <6381的ID> # 让6384成为6383的从节点 redis-cli -h 192.168.166.9 -p 6384 cluster replicate <6383的ID>
至此,一个3主3从的Redis集群就手动搭建完成了。
五、验证集群
搭建完了,怎么知道成不成功?用这两个命令检查一下:
redis-cli -h 192.168.166.9 -p 6379 cluster nodes redis-cli -h 192.168.166.9 -p 6379 cluster info
第一条命令会列出所有节点的详细信息,包括角色(master/sla ve)、状态和负责的槽位范围。第二条命令则展示集群的整体状态,确保`cluster_state`是`ok`。如果一切正常,那么你的集群就已经在健康运行了。
六、故障恢复(自动的)
Redis Cluster最大的魅力之一就是自动故障转移。我们来模拟一下:
模拟故障
kill -9 <某个master的进程ID>
自动发生的事
- 集群会检测到该主节点失联。
- 经过选举,该主节点对应的从节点会自动晋升为新的主节点。
- 集群继续对外提供服务,整个过程对客户端几乎透明。
恢复后
- 当那个宕机的主节点重新启动后,它会发现自己原来的“位置”已经被从节点接替了。
- 于是,它会自动以从节点(Sla ve)的身份重新加入集群,成为新主节点的副本。
- 整个过程无需人工干预,非常智能。
七、常用命令速查表(大白话版)
为了方便后续管理和排查,这里整理了一份集群常用命令指南:
| 命令 | 大白话解释 |
|---|---|
| cluster meet IP 端口 | 把某个节点拉进群 |
| cluster nodes | 看看群里都有谁,谁是什么角色 |
| cluster addslots 槽位 | 把一批槽分给当前节点 |
| cluster replicate 节点ID | 让当前节点给指定节点当备胎 |
| cluster info | 看看集群整体状态好不好 |
| cluster failover | 手动让备胎上位(强制切换) |
| cluster keyslot key | 看这个 key 属于哪个槽 |
| cluster forget 节点ID | 把某个节点踢出群 |
八、核心注意点(避坑指南)
手动搭建集群虽然灵活,但细节决定成败。下面这些坑,前人已经踩过了:
| 坑 | 解决办法 |
|---|---|
| 启动 Redis 不用绝对路径 | 必须用绝对路径,否则 nodes.conf 会乱 |
| 保护模式没关 | 必须设置 protected-mode no |
| 监听 127.0.0.1 | 改成真实 IP,否则其他节点连不上 |
| 槽位没分完 | 16384 个槽必须全部分配,集群才能用 |
| 主节点没有从节点 | 每个 Master 最好配一个 Sla ve,否则挂了就丢数据 |
九、总结一句话
手动搭建Redis Cluster的流程可以高度概括为:准备6份配置 → 启动所有实例 → 节点互相发现 → 分配哈希槽 → 建立主从关系。最终,你得到的是一个具备数据分片和自动故障转移能力的高可用3主3从集群。
这个过程虽然比用`redis-cli --cluster create`一键创建要繁琐,但对于理解Redis Cluster的底层机制非常有帮助。希望这份手把手的指南能为你提供清晰的参考。
您可能感兴趣的文章:- docker实现redis-cluster模式集群部署的示例代码
- Docker-compose部署redis-cluster集群的完整步骤
- 基于Redis6.2.6版本部署Redis Cluster集群的问题
- k8s部署redis cluster集群的实现
- 使用Ruby脚本部署Redis Cluster集群步骤讲解
- 如何用docker部署redis cluster的方法
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
mysql执行sql语句时内存溢出_如何设置排序区buffer优化内存使用
MySQL排序内存溢出?别慌,先搞懂sort_buffer_size怎么调 sort_buffer_size并非越大越好,盲目调高易引发OOM;它按需分配、每连接独占,建议会话级设为4MB而非全局调整,并优先优化索引避免filesort。 MySQL排序内存不足报 Out of memory 怎么调
mysql如何清理过大的binlog日志_设置expire_logs_days自动删除
MySQL Binlog清理:为什么设置了过期天数,日志文件却纹丝不动? 不少DBA都遇到过这个令人困惑的场景:明明在配置文件里白纸黑字地设置了expire_logs_days = 7,重启后检查变量也确认生效了。可一周过去,磁盘空间告急,一查发现那些本该被自动清理的旧binlog文件,居然还老老实
mysql主从同步报错1062怎么解决_使用set global sql_slave_skip_counter跳过错误
MySQL主从同步报错1062:从应急跳转到根治数据冲突的完整指南 遇到主从同步卡在1062错误,很多DBA的第一反应就是“跳过它”。但跳过之后呢?问题往往卷土重来。今天,我们就来彻底拆解这个经典的“Duplicate entry”冲突,把应急操作和根治方案一次讲清楚。 MySQL主从同步报错106
MySQL生产环境误操作drop表_通过Binlog闪回恢复数据
MySQL生产环境误删表数据?别急,利用Binlog日志实现精准闪回恢复 在MySQL数据库运维中,最令人紧张的场景莫过于生产环境误执行了DROP TABLE命令。面对突发状况,保持冷静是关键。只要数据库满足两个核心条件,被删除的数据就有极高的恢复可能性。这两个必要条件是什么?即MySQL的二进制日
mysql如何解决由于外键导致的更新死锁_在高性能场景下拆除外键
MySQL外键:高性能场景下的隐形死锁制造者与安全拆除指南 先明确一个核心结论:在高并发写入的场景下,数据库外键约束极易成为性能瓶颈和死锁的源头。简单来说,外键的UPDATE操作会因校验参照完整性而对关联记录加共享锁(S锁);若要安全拆除,则需遵循确认依赖、手动校验、在线删除三步走;拆除后,必须通过
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

