[toc]

一、主从复制概念

主从复制简单来说,是指将一台 Redis 服务器上的数据复制到其他的 Redis 服务器中。前者称为 Master 节点,后者称为 slave 节点,并且数据的复制只能由主到从,主节点一般负责写请求,而从节点一般负责读请求。默认情况下,每个 redis 都是主节点

一个主节点可以没有从节点或有多个从节点,但一个从节点只能对应一个主节点

使用读写分离的主要原因是因为一个网站大部分是读操作,分离后可以很大程度上减轻服务器压力

主从复制的作用主要包括:

  1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式
  2. 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余
  3. 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务 ( 即写 Redis 数据时应用连接主节点,读 Redis 数据时连接从节点 ),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量
  4. 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是 Redis 高可用的基础

二、主从复制环境搭建

本redis系列使用windows学习,主从复制使用windows版本,操作步骤同Linux

1. 查看redis集群信息

在没有配置任何集群信息的环境下,先查看redis的集群信息

127.0.0.1:6379> info replication # 查看集群信息
# Replication
role:master # 当前redis角色(默认为master)
connected_slaves:0 # 连接的从节点为零个
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379>

2. 复制三份redis配置信息

image.png

3. 修改redis配置

三份redis配置文件全部修改,端口划分为6379、6380、6381,修改过程只演示6379

  1. 修改端口
    修改端口为指定的6379,剩下俩份同理
    port 6379
    image.png

  2. 修改pid
    Linux环境下修改,本次在windows下不支持pid文件
    pidfile /var/run/redis.pid
    image.png

  3. 修改日志文件
    logfile "6379.log"
    image.png

  4. 修改默认rdb文件名称
    dbfilename dump6379.rdb
    image.png

4. 启动服务端

# 启动79服务
redis-server.exe redis.windows-79.conf
# 启动80服务
redis-server.exe redis.windows-80.conf
# 启动81服务
redis-server.exe redis.windows-81.conf

image.png

5. 启动客户端

# 启动79客户端
redis-cli.exe -p 6379
# 启动80客户端
redis-cli.exe -p 6380
# 启动81客户端
redis-cli.exe -p 6381

image.png

三、一主俩从集群配置

image.png

1. slaveof命令
命令形式配置一主俩从,命令如下:
通过执行 SLAVEOF host port 命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。

如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。

另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。

利用“SLAVEOF NO ONE 不会丢弃同步所得数据集”这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。

2. role命令
返回实例在复制中担任的角色, 这个角色可以是 master 、 slave 或者 sentinel 。 除了角色之外, 命令还会返回与该角色相关的其他信息, 其中:

  1. 主服务器将返回属下从服务器的 IP 地址和端口。
  2. 从服务器将返回自己正在复制的主服务器的 IP 地址、端口、连接状态以及复制偏移量。
  3. Sentinel 将返回自己正在监视的主服务器列表。

1. 查看主节点79

redis默认为master节点

E:\programs\redis\redisInstall>redis-cli.exe -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379>

2. 配置80和81为从节点

slaveof 127.0.0.1 6379

image.png

查看79主节点

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=239,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=239,lag=0
master_repl_offset:239
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:238
127.0.0.1:6379>

四、集群间的主从复制

全量备份和增量备份
Slave 启动成功,连接到 Master 后,会发送一个 sync 命令

Master 接到命令后,启动后台的存储进程,收集所有接收到的用于修改数据集的命令,在后台的存储经执行完毕后,Master 将传输整个数据文件到 slave,完成一次全量备份

全量备份:Master 将所有收集到的命令传给 Slave,Slave 在接收到数据库文件数据后,将其持久化并加载到内存中

增量备份:连接后 ( 完成了全量备份后 ),Master 继续将新的收集到的写命令同步到 Slave 执行

只要是重新连接到 Master,就会进行一次全量备份

1. 集群间值的复制

主节点存值,从节点取值
image.png

2. 主节点宕机,集群复制变化

模拟主机宕机,从节点的变化和从节点、主节点之间的区别
image.png

3. 从节点宕机,集群复制变化

模拟80服务宕机,结果发现对集群其他没有影响
image.png

五、链路集群配置

image.png

1. 配置集群

配置集群80位79的从节点,集群81位80的从节点

# 80划分为79的从节点
slaveof 127.0.0.1 6379

# 81划分为80的从节点
slaveof 127.0.0.1 6380

80为特殊节点,隶属于79,但又管辖于81,角色上依旧是slave,所以不能写数据。

image.png

2. 集群间取值

该模型也是可以集群间数据同步
image.png

Q.E.D.


只有创造,才是真正的享受,只有拚搏,才是充实的生活。