1. Redis读写分离原理
为了解决单实例Redis在高并发下的性能问题,所以需要对单实例Redis进行扩展,将其扩展为一个(master)主节点负责写入以及多个从节点(slave)负责读取,所以读写分离架构是一种主从架构。
- 当slave节点初始化时,会ping向master,一旦ping通了,slave就会从master节点进行数据复制,这是一种基于RDB持久化机制的全量的数据复制模式,slave节点把master节点的RDB文件复制到slave节点上,然后把RDB文件加载到内存中去。
- 后期master有写操作的时候,master会把相应的命令传输到slave,slave执行同样的命令保证数据同步。
2. Redis读写分离架构搭建
首先准备三个节点,在每个节点上执行info replication
,都会出现如下结果。可以看出,在单节点下,每个节点的角色都是master,待连接的从节点都是0个。
现在以Node1为主,Node2和Node3为从节点搭建读写分离结构:
- Node1不用配置,只需要配置Node2和Node3的从节点配置即可;
- 打开Node2的Redis.conf文件,将如下参数:
replicaof <masterip> <masterport> #修改为主节点的地址和端口
masterauth <master-password> #主节点的密码
replica-read-only yes #这是个默认配置,意思是所有的从节点是只读的,这样在从节点的写操作是写不进去的
- 重启Redis,Node3同理
在查看主节点信息如下,表明有两个从节点连接了:
3. Redis无磁盘化主从复制原理解析
Redis无磁盘化复制是指通过socket的方式,从master的内存把数据直接复制到slave的内存中,无磁盘化复制是为了适应磁盘读写效率低下的场景。
通过修改redis.conf中的如下属性进行配置:
repl-diskless-sync yes #启动无磁盘化复制
repl-diskless-sync-delay 5 #在进行同步之前,等待所有slave节点ping通的时间,默认是5秒