Redis集群和主从复制的搭建思路及实现细节分享
- 问答
- 2026-01-01 11:00:53
- 3
Redis主从复制的搭建思路及实现细节
主从复制是Redis实现高可用的基础,它的核心思路很简单:让一个Redis服务器(从节点)去复制另一个Redis服务器(主节点)的数据,主节点负责处理写操作,从节点负责处理读操作,并且自动同步主节点的数据,这样做的好处主要有两个:一是读写分离,减轻主节点的压力,提升整体性能;二是数据备份,即使主节点宕机,从节点也有一份完整的数据副本,可以快速恢复服务。
搭建主从复制的实现细节非常直接,主要工作量在从节点的配置上,假设我们已经启动了一个主节点(比如在6379端口),现在要启动一个从节点(比如在6380端口)。
我们正常启动从节点Redis服务器,最关键的一步是告诉这个从节点它要追随哪个主节点,这有两种方式可以实现,第一种是修改从节点的配置文件(redis.conf),找到 replicaof(在旧版本中可能是 slaveof)这个配置项,取消注释并填上主节点的IP地址和端口,replicaof 127.0.0.1 6379,之后重启从节点服务,它就会自动去连接主节点并开始同步数据。
第二种方式更为灵活,不需要重启服务,在从节点启动后,我们通过Redis的命令行客户端(redis-cli)连接到这个从节点,然后直接执行一条命令:REPLICAOF 127.0.0.1 6379,执行这条命令后,从节点会立即开始复制过程。
无论用哪种方式,我们都可以通过 INFO replication 命令来查看主从复制的状态,在主节点上执行,可以看到它下面连接了哪些从节点及其状态;在从节点上执行,可以看到它正在复制的master的信息以及复制偏移量等,如果看到 role:slave 和 master_link_status:up,就表示主从连接正常。
这里有一个重要的细节:当从节点第一次连接主节点时,会触发一次全量同步,主节点会生成当前数据的快照(RDB文件),发送给从节点,从节点清空自己的数据后加载这个RDB文件,之后,主节点会把期间新的写命令缓存在一个缓冲区里,待从节点加载完RDB后,再把这些增量命令发送给从节点,从而保证数据一致性,之后,主节点上的任何写命令都会实时地(异步)发送给从节点,这就是增量同步。

Redis集群的搭建思路及实现细节
当数据量非常大,或者对高可用的要求更高时,单个主节点加上几个从节点可能就不够用了,这时就需要用到Redis集群,Redis集群的思路是数据分片和高可用的结合。
它的设计思想是把整个数据集自动分割到多个节点(分片)上,Redis集群默认有16384个哈希槽(hash slot),我们可以将每个键通过CRC16算法计算后再对16384取模,得到一个槽位编号,从而决定这个键存储在哪个分片上,每个分片由一个主节点和若干个从节点组成,这些主从节点共同组成一个集群,这样,写请求可以分散到不同的主节点上,实现了数据的分布式存储和负载均衡,每个分片内部又通过主从复制来保证数据冗余和高可用,如果某个主节点宕机了,它的从节点会自动晋升为新的主节点,继续提供服务。
搭建一个最简单的Redis集群(至少需要三个主节点,每个主节点至少配一个从节点,所以最少需要6个节点)的实现细节如下:

我们需要准备6个Redis实例,这可以是6台不同的服务器,也可以是一台服务器上启动6个不同端口的进程,为每个实例创建一个配置文件(如redis-7000.conf, redis-7001.conf ... redis-7005.conf),这些配置文件除了端口号不同外,都必须开启集群模式,这是最关键的一步,在配置文件中加入或修改以下几行:
port 7000 # 每个实例的端口要不同
cluster-enabled yes # 开启集群模式
cluster-config-file nodes-7000.conf # 集群生成的配置文件,每个实例要不同
cluster-node-timeout 15000 # 节点超时时间
appendonly yes # 建议开启,持久化
逐个启动这6个Redis实例,我们需要将这些独立的实例组装成一个集群,在Redis 5.0版本之前,这需要借助一个叫 redis-trib.rb 的Ruby脚本,比较麻烦,但从Redis 5.0开始,官方直接内置了 redis-cli 命令来创建集群,大大简化了流程。
我们只需要执行一条命令(在任意一台安装了Redis-cli的机器上执行,确保能访问到这6个节点):
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
这条命令的意思是:用后面列出的6个节点创建一个集群,--cluster-replicas 1 表示每个主节点配1个从节点。redis-cli 会自动帮我们分配哪些节点是主,哪些是从,以及哈希槽是如何在这三个主节点间分配的,它会给出一个分配方案,我们输入 yes 确认后,集群就开始创建和握手了。
创建完成后,我们就可以用 redis-cli -c -p 7000(-c表示以集群模式连接)连接到集群进行测试了,集群会自动将我们的命令路由到正确的节点上,我们可以通过 CLUSTER NODES 命令查看集群中所有节点的状态和关系。
主从复制解决了数据备份和读扩展的问题,搭建简单,而集群则通过分片解决了海量数据存储和写扩展的问题,并集成了主从复制的高可用能力,搭建步骤稍多,但有了官方工具后也变得相对直观。
本文由盘雅霜于2026-01-01发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/72412.html
