- 分布式缓存——Redis主从架构
- 一、搭建主从架构:
- 1、背景:
- 2、主从节点搭建:
- 2.1 开启多个Redis服务
- 2.2 建立这些Redis之间的主从关系:
- 2.3 查看结果:
- 二、主从数据同步原理:
- 1、 主从同步的第一步——全量同步:
- 2、全量同步的流程:
- 3、slave重启后的同步——增量同步:
- 4、优化Redis主从架构:
- 5、总结:
分布式缓存——Redis主从架构
一、搭建主从架构:
1、背景:
单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。
因为Redis在大多情况下都是读多写少的场景, 所以使用主从集群,可以实现它的读写分离,一主多从,多个从节点共同承担读操作,从而提升读的并发能力。
2、主从节点搭建:
主从节点搭建以后,主节点可以读和写,从节点只能读不能写。
2.1 开启多个Redis服务
2.2 建立这些Redis之间的主从关系:
有临时和永久两种模式:
修改配置文件(永久生效),在redis.conf中添加一行配置:
slaveof
使用redis-cli客户端连接到redis服务,执行slaveof命令(重启后失效):
slaveof
2.3 查看结果:
二、主从数据同步原理:
1、 主从同步的第一步——全量同步:
master如何判断slave是不是第一次来同步数据?
replid,是数据集的标记,id一致则说明是同一数据集。每一个master都有唯一的replid,slave则会继承master节点的replid。
offset:偏移量,随着记录在repl_baklog中的数据增多而逐渐增大。slave完成同步时也会记录当前同步的offset。如果slave的offset小于master的offset,说明slave数据落后于master,需要更新。
因此slave做数据同步,必须向master声明自己的replication id 和offset,master才可以判断到底需要同步哪些数据
slave在第一次同步的时候,会向master发送自己的ip,master判断到它的id和自己不一样,则是第一次请求同步数据,需要做全量同步数据。master先把自己的ip和offset返回给slave同步,然后再通过bgsave生成RDB文件,同时记录RDB期间的所有命令,然后把RDB发送给slave同步,再把repl_baklog中的命令发给slave进行同步。
2、全量同步的流程:
3、slave重启后的同步——增量同步:
4、优化Redis主从架构:
可以从以下几个方面来优化Redis主从集群:
- 在master中配置repl-diskless-sync yes启用无磁盘复制,避免全量同步时的磁盘IO。
- Redis单节点上的内存占用不要太大,减少RDB导致的过多磁盘IO
- 适当提高repl_baklog的大小,发现slave宕机时尽快实现故障恢复,尽可能避免全量同步
- 限制一个master上的slave节点数量,如果实在是太多slave,则可以采用主-从-从链式结构,减少master压力