Redis 主从复制

本文最后更新于:2024年3月18日 凌晨

Redis 主从复制

概念

  • 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器,前者称为主节点(master/leader) ,后者称为从节点(slave/follower)
  • 默认情况下,每台Redis服务器都是主节点,且一个主节点可以有0或多个从节点,但一个从节点只能有一个主节点,数据的复制是单向的,只能由主节点到从节点。
  • 作用
    • 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
    • 读写分离:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
    • 高可用基础:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
  • 原理:对于主从复制来说,主从刚刚连接的时候,进行全量同步(RDB),全同步结束后,进行增量同步(AOF)
    1. Slave与Master建立连接。
    2. Slave向Master发起同步请求(SYNC)
    3. Master执行bgsave命令生成rdb数据快照,发给Slave
    4. Slave加载RDB数据快照,还原数据,主从保持一致。
    5. 之后Master执行的写操作都会发往Slave执行,保持数据同步。

搭建Redis主从复制集群

  • 只配置从库,不用配置主库。
  • 主节点可以读写,从节点只能读取。
  • 主节点的修改会被同步至从节点。

配置从节点

命令行(暂时)

  • 同时启动多个主节点,在需要设置为从节点的主机上配置主节点的ip和端口。
1
127.0.0.1 redis> SLAVEOF host port

配置文件

  • 修改从节点的配置文件,并使用该配置文件启动从节点。
  • 主节点不需要修改。
1
replicaof host port

查看服务器信息

1
2
3
4
5
6
7
8
9
10
11
12
13
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:7f088b851f4b015022a8eba1fc8824c0e4854a65
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379>

意外宕机

  • 主节点断开连接,从节点依旧指向主节点,此时集群只能进行读操作,如果主节点恢复连接,从节点可以自动连接主节点。
  • 从节点断开连接,如果没有通过配置文件配置,则重新启动从节点会自动重置为主节点,即脱离原Redis集群。

链式主从复制

  • 与传统的主从复制不同,所有的从节点不再全部连在主节点上,从节点可以连接在从节点上,形成一条链路,该链路的起点是主节点,终点是从节点。
  • 中间的节点为从节点,但可在主节点宕机时,手动配置为主节点,并提供写操作。
1
127.0.0.1 redis> SLAVEOF no one
  • 如果主节点恢复连接时,集群并不会回复宕机前的主从状态,需要手动配置。

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!