Redis主从架构
主从架构的主要优势在于:
1)、高可用性:当主节点发生故障或不可用时,从节点可以自动接替主节点的角色,确保系统的持续可用性。这种故障转移
的机制可以极大地减少服务中断时间,提高应用的可靠性
2)、数据备份:从节点复制主节点的数据,充当了主节点数据的备份。在主节点数据丢失或损坏的情况下,可以使用从节点
的数据进行恢复,确保数据的完整性和可靠性。
3)、扩展性:通过添加多个从节点,可以扩展系统的读取能力。读取操作可以在多个从节点上并行执行,从而提高系统的读
取吞吐量和响应速度。
4)、负载均衡:主节点负责写入操作,从节点负责读取操作,将读写操作分担到不同的节点上,实现负载均衡,提高系统整
体性能。
1、redis主从架构搭建
准备两个虚拟机:
我的主节点ip为:192.168.0.29
从节点ip为:192.168.0.30
1)、#编辑配置文件:
[root@localhost redis-6.2.7]# vim redis.conf
#修改配置
#配置主从复制
# 从192.168.0.29 6379的redis实例复制数据,Redis 5.0之前使用slaveof
replicaof 192.168.0.29 6379
# 配置从节点只读
replica‐read‐only yes
2)、#在启动主节点之后,再启动从节点
[root@localhost redis-6.2.7]# src/redis-server redis.conf
#连接从节点:
[root@localhost redis-6.2.7]# src/redis-cli
3)、#测试在192.168.0.29 6379实例上写数据,192.168.0.30 6379 实例是否能及时同步新修改数据
#192.168.0.29 6379 写数据
127.0.0.1:6379> set tdKey 666
#192.168.0.30 6379 实例上是否能获取数据
127.0.0.1:6379> get tdKey
2、Redis主从工作原理
如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它
都会发送一个PSYNC 命令给master请求复制数据。
master收到PSYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb
快照文件,持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的
请求缓存在内存中。当持久化进行完毕以后,master会把这份rdb文件数据集发送给slave,
slave会把接收到的数据进行持久化生成rdb,然后再加载到内存中。然后,master再将
之前缓存在内存中的命令发送给slave。
当master与slave之间的连接由于某些原因而断开时,slave能够自动重连Master,
如果master收到了多个slave并发连接请求,它只会进行一次持久化,而不是一个连接一
次,然后再把这一份持久化的数据发送给多个并发连接的slave。
2.1、主从复制(全量复制)流程图:
数据部分复制:
当master和slave断开重连后,一般都会对整份数据进行复制。但从redis2.8版本开始,
redis改用可以支持部分数据复制的命令PSYNC去master同步数据,slave与master能够在
网络连接断开重连后只进行部分数据复制(断点续传)。
master会在其内存中创建一个复制数据用的缓存队列,缓存最近一段时间的数据,
master和它所有的 slave都维护了复制的数据下标offset和master的进程id,因此,当网络
连接断开后,slave会请求master 继续进行未完成的复制,从所记录的数据下标开始。如果
master进程id变化了,或者从节点数据下标 offset太旧,已经不在master的缓存队列里了,
那么将会进行一次全量数据的复制
2.2、主从复制(部分复制,断点续传)流程图:
如果有很多从节点,为了缓解主从复制风暴(多个从节点同时复制主节点导致主节点压力过
大),可以做如下架构,让部分从节点与从节点(与主节点同步)同步数据