当前位置: 首页
数据库
Redis Cluster部署实践

Redis Cluster部署实践

热心网友 时间:2026-04-29
转载

一、我们要做什么?

今天的目标很明确:在一台服务器(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的方法
来源:https://www.jb51.net/database/362229k8p.htm

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
mysql执行sql语句时内存溢出_如何设置排序区buffer优化内存使用

mysql执行sql语句时内存溢出_如何设置排序区buffer优化内存使用

MySQL排序内存溢出?别慌,先搞懂sort_buffer_size怎么调 sort_buffer_size并非越大越好,盲目调高易引发OOM;它按需分配、每连接独占,建议会话级设为4MB而非全局调整,并优先优化索引避免filesort。 MySQL排序内存不足报 Out of memory 怎么调

时间:2026-04-29 22:41
mysql如何清理过大的binlog日志_设置expire_logs_days自动删除

mysql如何清理过大的binlog日志_设置expire_logs_days自动删除

MySQL Binlog清理:为什么设置了过期天数,日志文件却纹丝不动? 不少DBA都遇到过这个令人困惑的场景:明明在配置文件里白纸黑字地设置了expire_logs_days = 7,重启后检查变量也确认生效了。可一周过去,磁盘空间告急,一查发现那些本该被自动清理的旧binlog文件,居然还老老实

时间:2026-04-29 22:40
mysql主从同步报错1062怎么解决_使用set global sql_slave_skip_counter跳过错误

mysql主从同步报错1062怎么解决_使用set global sql_slave_skip_counter跳过错误

MySQL主从同步报错1062:从应急跳转到根治数据冲突的完整指南 遇到主从同步卡在1062错误,很多DBA的第一反应就是“跳过它”。但跳过之后呢?问题往往卷土重来。今天,我们就来彻底拆解这个经典的“Duplicate entry”冲突,把应急操作和根治方案一次讲清楚。 MySQL主从同步报错106

时间:2026-04-29 22:40
MySQL生产环境误操作drop表_通过Binlog闪回恢复数据

MySQL生产环境误操作drop表_通过Binlog闪回恢复数据

MySQL生产环境误删表数据?别急,利用Binlog日志实现精准闪回恢复 在MySQL数据库运维中,最令人紧张的场景莫过于生产环境误执行了DROP TABLE命令。面对突发状况,保持冷静是关键。只要数据库满足两个核心条件,被删除的数据就有极高的恢复可能性。这两个必要条件是什么?即MySQL的二进制日

时间:2026-04-29 22:40
mysql如何解决由于外键导致的更新死锁_在高性能场景下拆除外键

mysql如何解决由于外键导致的更新死锁_在高性能场景下拆除外键

MySQL外键:高性能场景下的隐形死锁制造者与安全拆除指南 先明确一个核心结论:在高并发写入的场景下,数据库外键约束极易成为性能瓶颈和死锁的源头。简单来说,外键的UPDATE操作会因校验参照完整性而对关联记录加共享锁(S锁);若要安全拆除,则需遵循确认依赖、手动校验、在线删除三步走;拆除后,必须通过

时间:2026-04-29 22:40
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 日榜
  • 周榜
  • 月榜
热门教程
更多
  • 游戏攻略
  • 安卓教程
  • 苹果教程
  • 电脑教程