Redis主从架构
一、主从架构搭建
在单机安装的基础上,再启动一个端口号为6380的redis实例作为从节点
搭建步骤:
1.复制redis.conf配置文件
2.修改redis.conf配置文件
port 6380
# 把pid进程号写入pidfile配置的文件
pidfile /var/run/redis_6380.pid
logfile "6380.log"
# 指定数据存放目录
dir /usr/local/redis/6380/
# bind 127.0.0.1
# 从本机6379的redis实例复制数据,Redis 5.0之前使用slaveof
replicaof 192.168.0.60 6379
# 配置从节点只读
replica‐read‐only yes
3.启动从节点
./bin/redis‐server ./6380/redis.conf
4.查看从节点是否启动成功及从节点是否同步主节点数据
二、Redis主从工作原理
1.主从复制(全量复制)流程
- 如果你为master配置了一个slave,不管这个slave是否是第一次连接上master,它都会发送一个PSYNC命令给master请求复制数据
- master收到PSYNC命令后,会在后台进行数据持久化通过bgsave生成最新的RDB快照文件,持久化期间,master会继续接收客户端的请求,它会把这些可能修改的数据集的请求缓存到内存中,当持久化进行完毕后,master会把这份rdb文件数据集发送给slave
- slave会把接收到数据进行持久化生成rdb,然后再加载到内存中
- master再将之前缓存到内存中的命令发送给slave
- slave节点执行缓存的写命令,将数据写入到内存中
- master通过socket长链接持续的将写命令发送到从节点,保证主从节点的数据一致性
2.主从复制(部分复制,断点续传)流程
Redis2.8版本开始,redis支持部分数据复制的命令PSYNC去master同步数据,slave与master能够在网络连接断开重连后只进行部分数据复制
master会在其内存中创建一个复制数据用的缓存队列,缓存最近一段时间数据,master和它所有的slave都维护了复制的数据下表offset和master的进程id
当网络断开重连后,slave会请求master进行未完成的复制,从所记录的下标开始
如果master进程id变化了,或者从节点下标offset太旧,已经不在master的缓存队列中了,那么将会进行一次全量复制