二十一,Redis搭建主从

75 阅读3分钟

一,搭建主从架构

1.1 主从集群结构

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

主从集群架构如图:

image

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 全量同步

image-20240730204612233

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 增量同步

image-20240730205607372

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

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

image-20240730205824754