标签
SQL Server
Redis
MySQL
其它
Oracle
外部链接
redis主从复制

主从复制的作用

标注:主-master,从-slave

1、数据备份,提供多个副本

2、扩展读的性能

3、主从的数据流向是单向的,是从master到slave

主从复制两种方式

1、slaveof命令

a)从节点执行slaveof命令关联主节点,成为主节点的从节点(语法:slaveof 127.0.0.1 6379)127.0.0.1 6379是主节点服务器地址和端口

slaveof命令是一个异步的命令

b)取消主从节点的关联,使用slave no one

取消后从节点不会清除数据,只是不在从主节点同步数据了,清除数据需要使用命令flushall

2、配置

在配置文件中的slaveof ip port项配置主节点地址,还需要配置从节点为只读的操作配置项为slave-read-only yes

3、命令和配置的对比

a)命令:无须重启,不便于管理

b)配置:统一配置,需要重启

主从节点偏移量

偏移量是用来监测主从复制状态的一个对比标识,使用info replication来查询节点信息,可以看到主节点偏移量是master_repl_offset:1950,从节点的偏移量是slave_repl_offset:1982

全量复制

将主节点的RDB同步给从节点,同时记录主节点同步过程写入的值,通过偏移量对比后写入到从节点

注释:这个同步过程写入的值会记录在redis的一个缓冲区域

全景复制的开销

1、bgsave的时间

2、RDB文件网络传输的时间

3、从节点清空数据的时间

4、从节点加载RDB的时间

5、可能的AOF重写时间(加载RDB成功后,AOF开启会做一个重写)

部分复制

连接断开了后,master会将数据写入到一个缓存区,然后等到网络恢复了,lsave会进行一个异步的请求,并将偏移量offset和运行IDrunid传递给master,如果偏移量在master缓冲区范围内则会返回一个continue,然后将将offset偏移量内的数据从master上同步下来这样就实现了部分复制,如果偏移量超出了缓冲区的范围则说明错失了很多数据,这时进行的就是全量复制。

故障处理

1、slave故障,将故障的客户端连接到其它的slave上

2、master故障,将主节点连接的一台slave断开复制关系,并指定它为新的主节点,在将其它的从节点指向新的节点

主从节点开发运维中的问题

1、读写分离,slave负责读,master负责写

存在的问题:复制数据延迟、读到过期数据、从节点故障

2、配置不一致

存在的问题:maxmemary不一致,丢失数据(主从最大内存配置不一致)、数据结构优化参数hash-max-ziplist-entries

3、规避全量复制

a)第一次全量复制不可避免,之后的可以采取小节点分片,在使用低热的时候做全量复制

b)节点运行ID不匹配,主节点重启后运行ID会变化,故障转移,例如哨兵或集群

c)复制积压缓存不足,网络中断,部分复制无法满足、可以增大复制缓冲区配置,rel_backlog_size:网络“增强”

4、规避复制风暴

a)从节点过多时,同时区同步主节点会产生复制风暴,集中执行复制会对机器造成压力,可以通过更换复制拓扑的方式来解决,意思就是将主节点同步到一台从节点上,然后其它的从节点去同步这个拓扑出来的从节点就好了

b)单机复制风暴,一台机器上多个主节点,会进行大量的全量复制,将master分散部署多台机子,或使用高可用方法,将其它的slave晋升为master。

扫一扫手机看
点击排行
订阅号
...