Redis详解6.主从模式

一年又一年,字节跳动 Lark(飞书) 研发团队又双叒叕开始招新生啦!
【内推码】:GTPUVBA
【内推链接】:https://job.toutiao.com/s/JRupWVj
【招生对象】:20年9月后~21年8月前 毕业的同学
【报名时间】:6.16-7.16(提前批简历投递只有一个月抓住机会哦!)
【画重点】:提前批和正式秋招不矛盾!面试成功,提前锁定Offer;若有失利,额外获得一次面试机会,正式秋招开启后还可再次投递。

章节目录

Redis详解1.安装及使用
Redis详解2.数据结构
Redis详解3.发布订阅
Redis详解4.事务
Redis详解5.数据持久化
Redis详解6.主从模式
Redis详解7.哨兵模式
Redis详解8.Cluster模式

1 简介

Redis有三种集群模式:主从模式、“哨兵”模式、Cluster集群模式。本节我们首先介绍主从模式。
在需要扩展读请求的时候,或者在需要写入临时数据的时候,用户可以通过设置额外的Redis从服务器来保存数据集的副本。在接收到主服务器发送的数据初始副本之后,客户端每次向主服务器进行写入时,从服务器都会实时地得到更新。在部署好主从服务器之后,客户端就可以向任意一个从服务器发送读请求了,而不必再像之前一样,总是把每个读请求都发送给主服务器。

2 Redis复制的启动过程

image.png

3 主从的配置

单机配置一主多从
  1. 主服务器通过默认的redis.conf启动redis-server
  2. 复制主服务器的redis.conf为两个新的文件redis_slave1.conf和redis_slave2.conf
  3. 分别添加如下配置
# 端口
# 或者port 6381
port 6382
# AOF和快照文件文件夹
# dir /usr/local/var/db/redis_slave1/
dir /usr/local/var/db/redis_slave2/
# 从节点要跟随的主节点
slaveof 127.0.0.1 6379
# 如果设置了密码,就要设置
masterauth master-password
  1. 从服务器分别通过redis_slave1.conf和redis_slave2.conf启动
单机一主多从结果
# 主节点
32314:M 13 Feb 2019 18:19:34.807 * Replica 127.0.0.1:6381 asks for synchronization
32314:M 13 Feb 2019 18:19:34.807 * Full resync requested by replica 127.0.0.1:6381
32314:M 13 Feb 2019 18:19:34.807 * Starting BGSAVE for SYNC with target: disk
32314:M 13 Feb 2019 18:19:34.807 * Background saving started by pid 33175
33175:C 13 Feb 2019 18:19:34.808 * DB saved on disk
32314:M 13 Feb 2019 18:19:34.838 * Background saving terminated with success
32314:M 13 Feb 2019 18:19:34.839 * Synchronization with replica 127.0.0.1:6381 succeeded

32314:M 13 Feb 2019 18:22:01.275 * Replica 127.0.0.1:6382 asks for synchronization
32314:M 13 Feb 2019 18:22:01.275 * Full resync requested by replica 127.0.0.1:6382
32314:M 13 Feb 2019 18:22:01.275 * Starting BGSAVE for SYNC with target: disk
32314:M 13 Feb 2019 18:22:01.276 * Background saving started by pid 33436
33436:C 13 Feb 2019 18:22:01.277 * DB saved on disk
32314:M 13 Feb 2019 18:22:01.359 * Background saving terminated with success
32314:M 13 Feb 2019 18:22:01.360 * Synchronization with replica 127.0.0.1:6382 succeeded
# 从节点
33174:S 13 Feb 2019 18:19:34.806 * MASTER <-> REPLICA sync started
33174:S 13 Feb 2019 18:19:34.806 * Non blocking connect for SYNC fired the event.
33174:S 13 Feb 2019 18:19:34.807 * Master replied to PING, replication can continue...
33174:S 13 Feb 2019 18:19:34.807 * Partial resynchronization not possible (no cached master)
33174:S 13 Feb 2019 18:19:34.807 * Full resync from master: deb0cb0abde947bba19c5224a3664e27c90a6b65:0
33174:S 13 Feb 2019 18:19:34.839 * MASTER <-> REPLICA sync: receiving 175 bytes from master
33174:S 13 Feb 2019 18:19:34.839 * MASTER <-> REPLICA sync: Flushing old data
33174:S 13 Feb 2019 18:19:34.839 * MASTER <-> REPLICA sync: Loading DB in memory
33174:S 13 Feb 2019 18:19:34.839 * MASTER <-> REPLICA sync: Finished with success
33174:S 13 Feb 2019 18:19:34.839 * Background append only file rewriting started by pid 33176
33174:S 13 Feb 2019 18:19:34.863 * AOF rewrite child asks to stop sending diffs.
33176:C 13 Feb 2019 18:19:34.863 * Parent agreed to stop sending diffs. Finalizing AOF...
33176:C 13 Feb 2019 18:19:34.863 * Concatenating 0.00 MB of AOF diff received from parent.
33176:C 13 Feb 2019 18:19:34.863 * SYNC append only file rewrite performed
33174:S 13 Feb 2019 18:19:34.909 * Background AOF rewrite terminated with success
33174:S 13 Feb 2019 18:19:34.910 * Residual parent diff successfully flushed to the rewritten AOF (0.00 MB)
33174:S 13 Feb 2019 18:19:34.910 * Background AOF rewrite finished successfully
不同机器上配置一主多从

如果redis-server在不同的机器上,只需要以下两个配置即可

# 从节点要跟随的主节点
slaveof 127.0.0.1 6379
# 如果设置了密码,就要设置
masterauth master-password

4 通过命令设置从服务器

  1. 可以通过向运行中的从服务器发送SLAVEOF命令来将其设置为从服务器。
  2. 如果用户使用的是 SLAVEOF配置选项,那么Redis在启动时首先会载入当前可用的任何快照文件或者AOF文件,然后连接主服务器并执行上述的复制过程。如果用户使用的是SLAVEOF命令,那么Redis会立即尝试连接主服务器,并在连接成功之后,开始上述复制过程。

5 其他细节

  1. 采用异步复制
  2. 从服务器在与主服务器进行初始连接时,数据库中原有的所有数据都将丢失,并被替换成主服务器发来的数据。
  3. Reds不支持主主复制,被互相设置为主服务器的两个Redis实例只会持续地占用大量处理器资源并且连续不断地尝试与对方进行通信,根据客户端连接的服务器的不同,客户端的请求可能会得到不一致的数据,或者完全得不到数据。
  4. 当多个从服务器尝试连接同一个主服务器的时候,可能出现两种情况:如果步骤3尚未执行,所有从服务器都会接收到相同的快照文件和相同的缓冲区写命令;如果已经正在执行或已经执行,当主服务器与较早进行连接的从服务器执行完复制所需的5个步骤之后,主服务器会与新连接的从服务器执行一次新的步骤1至步骤5。
  5. 从服务器也可以有自己从服务器。
  6. 可以通过INFO命令查看配置的详情,如下所示:
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6381,state=online,offset=2086,lag=0
slave1:ip=127.0.0.1,port=6382,state=online,offset=2086,lag=1

你可能感兴趣的:(Redis详解6.主从模式)