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的方法
相关攻略
一、我们要做什么? 今天的目标很明确:在一台服务器(IP地址是192 168 166 9)上,手动搭建一个3主3从的Redis集群。这意味着我们需要启动6个Redis实例: 3个主节点(Master):端口号分别是6379、6381、6383。 3个从节点(Sla ve):端口号分别是6380、63
生产环境禁用 KEYS+DEL,因其会阻塞 Redis 主线程;应使用带游标和分批的 SCAN+DEL Lua 脚本或 Ja va 中通过 RedisConnection 执行 SCAN 迭代删除,避免连接泄漏。 直接使用 KEYS 配合 DEL 来批量删除特定前缀的 Key,听起来很直接,对吧?但
Redis为什么会出现内存泄漏的假象?排查Lua脚本中未设置过期的临时变量 Redis内存持续上涨可能源于Lua脚本中未设置过期时间的临时键,如set、hset、zadd写入后遗漏expire,导致“孤儿键”累积;需用redis-cli --scan结合object freq和ttl定位,并按业务语
Redis如何实现基于发布订阅的配置热更新 Redis Pub Sub 能否可靠用于配置热更新? 直接拿来用?恐怕不行。Redis 的 PUBLISH SUBSCRIBE 本质上是一种“即发即弃”的模型:消息不持久、没有确认机制、订阅者离线期间的消息会彻底丢失。想象一下,你的服务因为重启或者网络短暂
理解 repl-diskless-sync-delay:它并非“分批同步”的开关 先明确一个核心概念:repl-diskless-sync-delay 这个参数,其设计初衷并非为了实现“分批同步”。它的真实作用,是在主库开启了无磁盘同步(即配置了 repl-diskless-sync yes)后,控
热门专题
热门推荐
《识质存在》中后期配装与打法全解析:从生存到精通 进入《识质存在》的中后期,战场环境陡然严峻。敌人的伤害与生存压力同步攀升,单纯的武器升级已不足以应对挑战。真正的战力构建,是一个系统工程,它涵盖了武器、道具、模块天赋与侵入节点的协同搭配。如果你正为如何配装而困惑,下面的攻略或许能为你指明方向。 一、
《黑袍纠察队》主演揭秘阿什莉隐藏的勇敢!她如何从傀儡CEO到副总统,注射五号化合物长出第二张脸,在祖国人阴影下求生。第五季剧情解析,点击查看! 在埃里克·克里普克打造的《黑袍纠察队》宇宙里,科尔比·米尼菲饰演的阿什莉·巴雷特,绝对算得上最让人过目不忘的角色之一。尽管她在沃特国际的企业和整治阶梯上步步
一路向西斩妖除魔 《遥遥西土》Steam好评如潮 最近Steam上杀出了一匹黑马:由法国独立工作室Evil Raptor开发的4人合作射击游戏《遥遥西土(Far Far West)》,一登陆抢先体验就收获了玩家“好评如潮”的顶级评价。看看数据就知道有多夸张:在超过2700条玩家评价中,好评率稳稳站在
探索Midnight Season 1最快地城排名:S-Tier Collegiate Calamity等攻略,优化刷本效率,提升装备和进度 开门见山地说,在《Midnight》第一赛季里,并非所有地城(Delves)的“性价比”都一样。有的流程紧凑,一路畅通无阻;有的则弯弯绕绕,耗时费力。为了帮你
SpringBoot2 7 x将logback升级到1 3 x以上版本的全过程解析 不少开发者在尝试将SpringBoot 2 7 x项目中的Logback升级到1 3 x或更高版本时,都会遇到一个典型的启动报错。这背后的原因其实很明确:SpringBoot 2 7 x默认依赖的是logback-c





