网站Logo 苏叶的belog

Redis配置主从

wdadwa
2
2026-03-30

一,搭建主从架构

1.1 主从集群结构

单节点 Redis 的并发能力是有上限的,要进一步提高 Redis 的并发能力,就需要搭建主从集群,实现读写分离。

主从集群架构如图:

2953321-20240730203726824-273378562.png

1.2 准备实例和配置

在一台虚拟机开启 3 个实例,实例信息如下

IPport角色
192.168.150.1017001master
192.168.150.1027002slave
192.168.150.1037003slave
  1. 创建三个文件夹,用来存放三个 redis 的配置文件,数据存储文件,日志文件

    mkdir 7001 7002 7003
    cd 7001
    mkdir conf data logs
    cd 7002
    mkdir conf data logs
    cd 7003
    mkdir conf data logs
    
  2. 将 redis.conf 文件拷贝三份到三个目录里面

    cp redis.conf 7001/conf
    cp redis.conf 7002/conf
    cp redis.conf 7003/conf
    
  3. 修改每个配置文件里面的端口工作目录日志存放目录,关闭里面的 AOF 开启 RDB

  4. 修改每个实例的声明 ip

    因为虚拟机本身有多个 IP,为了防止混乱,我们需要在redis.conf文件中指定每一个实例的绑定 ip 信息,格式如下

    # redis实例声明ip
    replica-announce-ip 192.168.150.101
    

1.3 启动

redis-server 7001/redis.conf
redis-server 7002/redis.conf
redis-server 7003/redis.conf

1.4 开启主从关系

现在三个实例还没有任何的关系,要配置主从可以使用replicaof或者slaveof(5.0 以前)命令

有临时和永久两种模式:

  • 修改配置文件(永久生效)

    在从节点中的redis.conf中添加一行:slaveof <masterIp><masterPort>

  • 使用 redis-cli 客户端执行slaveof命令(重启后失效)

    slaveof masterIp masterPort
    

注意:在 5.0 以后新增 replicaof 效果和 slaveof 一样

1.5 测试

在 7001 主节点上的 redis 客户端执行

Info replication

即可查看是否链接成功

二,主从数据库同步原理

2.1 全量同步

2953321-20240730204613797-1909635099.png

master 如何判断 slave 是不是第一次来同步数据? 这里会用到两个很重要的概念:

  • Replicationld:简称replid,是数据集的标记,id一致则说明是同一数据集。每一个master都有唯一的replid,slave则会继承master节点的replid
  • offset:偏移量,随着记录在repl_baklog中的数据增多而逐渐增大。slave完成同步时也会记录当前同步的offset。如果slave的offset小于master的offset,说明slave数据落后于master,需要更新。

因此 Slave 做数据同步,必须向 master 声明自己的replication id 和 offset,master 才可以判断到底需要同步哪些数据。

2.2 增量同步

2953321-20240730205609331-312135176.png

可以从以下几个方面来优化 Redis 主从就集群:

  • 在master中配置repl-diskless-syncyes启用无磁盘复制,避免全量同步时的磁盘IO
  • Redis单节点上的内存占用不要太大,减少RDB导致的过多磁盘IO
  • 适当提高repl_baklog的太小,发现slave宕机时尽快实现故障恢复,尽可能避免全量同步
  • 限制一个master上的slave节点数量,如果实在是太多slave,则可以采用主-从-从链式结构,减少master压力

2953321-20240730205826261-686168708.png

动物装饰