告别单点瓶颈:Redis主从架构与读写分离实战

张开发
2026/4/8 18:27:52 15 分钟阅读

分享文章

告别单点瓶颈:Redis主从架构与读写分离实战
大家好在之前的文章中我们深入探讨了Redis的持久化机制RDB和AOF解决了数据“丢不丢”的问题。但随着业务量的增长我们很快会面临另一个挑战“快不快”。单台Redis服务器虽然性能强劲但毕竟受限于CPU和网络带宽其并发处理能力QPS是有上限的通常在3万-5万左右。当面对“双11”这种海量读请求时单节点很容易成为瓶颈。怎么办既然“一夫当关”太累那我们就组建一支“军队”今天我们就来学习Redis最基础的集群模式——主从复制通过“人多力量大”来实现读写分离大幅提升系统的并发能力。什么是主从架构主从架构的核心思想非常简单一主多从读写分离。主节点Master它是集群的“大脑”负责处理所有的写操作如SET、DEL。它会将接收到的写命令实时同步给所有的从节点。从节点Slave/Replica它们是主节点的“分身”负责处理读操作如GET。它们不能直接写入数据除非特殊配置只能被动接收主节点的数据同步。注在Redis 5.0之前从节点被称为Slave后来为了消除“主奴”色彩官方改称为Replica但两者指代的是同一个东西。通过这种架构我们可以将巨大的读压力分散到多个从节点上而主节点则专注于写操作从而成倍地提升系统的整体吞吐量。实战演练单机模拟三节点集群在生产环境中主从节点通常部署在不同的物理机上。但为了学习和测试我们可以在一台虚拟机上通过不同端口来模拟三个Redis实例。环境规划IP地址192.168.80.134本机也就是你虚拟机的ipMaster节点端口 7001Slave节点1端口 7002Slave节点2端口 7003准备工作创建目录在/tmp下创建7001、7002、7003三个文件夹作为各自的工作目录。准备配置文件将原始的redis.conf复制三份分别放入这三个文件夹中。修改配置修改port分别改为7001、7002、7003。修改dir指向各自的工作目录如dir /tmp/7001/。关闭AOF为了演示方便暂时设置appendonly no生产环境建议开启。声明IP添加replica-announce-ip 192.168.80.134确保节点间能正确识别IP。启动实例分别启动三个Redis实例redis-server /tmp/7001/redis.confredis-server /tmp/7002/redis.confredis-server /tmp/7003/redis.conf此时它们是三个互不相关的独立Redis实例。一件重要的事防火墙相关端口一定要开放或者直接关闭主节点中配置bind用bind 127.0.0.1 192.168.80.134这个很重要不然后续会失败因为这里博主一开始也没注意到排了半天错虽然从节点和主节点在同一台物理机上但网络数据包的走向是从节点 - 网卡 - 回环 - 主节点。如果主节点的配置里写着bind 127.0.0.1这就相当于主节点对外宣布“我只听 127.0.0.1 的话别的 IP包括 192.168.80.134找我我一律不理。”为什么同一个虚拟机也不行从节点的视角你告诉从节点replicaof 192.168.80.134 7001。网络包的流向从节点会把数据包发给192.168.80.134。主节点的视角主节点监听的是127.0.0.1。结果虽然都在同一台机器里但入口 IP 不匹配。主节点觉得“我不认识 192.168.80.134 这个地址进来的请求”于是拒绝连接或者在防火墙/保护模式下直接丢弃建立“血缘”关系实例启动后我们需要手动建立主从关系。这可以通过命令临时生效也可以写入配置文件永久生效。方式一命令行临时配置推荐测试用我们登录到从节点告诉它“谁是你的老大”。连接7002redis-cli -p 7002执行命令slaveof 192.168.80.134 7001注Redis 5.0后推荐使用replicaof 192.168.80.134 7001效果一样。连接7003redis-cli -p 7003执行命令replicaof 192.168.80.134 7001方式二配置文件永久生效推荐生产用在从节点的redis.conf中添加一行配置replicaof 192.168.80.134 7001这样重启后主从关系依然存在。验证状态在主节点7001上执行info replication你应该能看到类似这样的输出role:masterconnected_slaves:2slave0:ip192.168.150.101,port7002...slave1:ip192.168.150.101,port7003...这说明主从关系搭建成功读写分离测试现在让我们看看主从架构是如何工作的。1. 写操作只能在Master我们在主节点7001写入数据127.0.0.1:7001 set num 300OK2. 读操作可以在Slave接着我们去从节点7002和7003读取数据127.0.0.1:7003 get num123数据已经成功同步3. 从节点写保护如果你尝试在从节点写入数据127.0.0.1:7002 set number 666系统会报错(error) READONLY You cant write against a read only replica.这是Redis的保护机制防止从节点的数据与主节点不一致。知识小结为了方便大家复习我整理了本节的重点速查表知识点核心内容避坑/考点架构角色Master负责写Slave负责读实现读写分离提升读性能配置命令slaveof ip port或replicaof需在从节点上执行数据流向单向复制Master → Slave从节点数据是只读的副本状态查看info replication关注connected_slaves数量术语演变Redis 5.0前叫Slave后叫Replica考试或面试时需注意版本差异

更多文章