【redis教程】13、redis的主从复制

Azura ·
更新时间:2024-09-20
· 972 次阅读

互联网的三高架构(高并发、高性能、高可用)。下面说一下高可用,比如说一年之中服务器宕机了1天,那么高可用就是(365-1)/ 365= 99.73%,注意单位要一致,一般到秒一级。业界可用性目标5个9,即99.999%,服务器年宕机时长低于315秒,约5.25分钟。

单机redis的风险与问题

机器故障,数据丢失 容量瓶颈,内存不足

为了避免单机redis服务器故障,准备多台机器,同步保存多个副本,实现redis的高可用,同时实现数据冗余备份。

一、什么是主从复制

主从复制即将master机器中的数据即时有效的复制到slave机器中,一个master可以拥有多个slave,一个slave只对应一个master。
master 写数据,将数据变化自动同步到slave中
slave 读数据,禁止写

二、主从复制的三个阶段

主从复制有三个阶段,第一阶段是slave连接master,连上以后就是第二阶段即把数据同步给slave,最后是反复同步,反复同步是后期收到的数据不停的发送给slave,这一阶段叫命令传播阶段。
在这里插入图片描述

2.1 建立连接(阶段一)

快速体验主从复制

slave连接master的方式有多种

方式一,发送命令 slaveof master_ip master_port 方式二,启动时使用参数--slaveof master_ip master_port 方式三,服务器配置 slaveof master_ip master_port

下面我使用方式三即配置文件的方式来建立slave与master之间的连接。这里我使用6380端口的redis来作为slave服务器,
3680的配置文件内容:

port 6380 daemonize yes logfile "redis-6380.log" dir /an-dev/redis-4.0.14/data slaveof 127.0.0.1 6379

6379端口的redis作为master。
在这里插入图片描述
登录master客户端,看到master有数据,
在这里插入图片描述
现在登录slave客户端,看到数据复制了过来,
在这里插入图片描述
授权访问
在这里插入图片描述

2.2 数据同步(阶段二)

在这里插入图片描述
数据同步阶段注意事项

如果master数据量巨大,注意避开流量高峰期 复制缓冲区的大小设置要合理,太小了会导致数据溢出,部分复制(增量复制)的时候发现存在丢失情况,必须进行第二次全量复制,可能致使slave陷入死循环状态。 2.3 命令传播(阶段三)

在这里插入图片描述

三、主从复制的心跳机制

进入命令传播阶段的时候,master与slave之间要进行信息交换,使用心跳机制进行维护,实现双方连接保持在线。

master心跳
指令:PING
周期:由repl-ping-slave-period决定,默认10秒
作用:判断slave是否在线
查询:INFO replication 获取slave最后一次连接间隔 slave心跳任务
指令:REPLCONF ACK {offset}
周期:1秒
作用1:汇报slave自己的复制偏移量,获取最新的数据变更指令
作用2:判断master是否在线

当slave多数掉线,或者延迟过高,master为保障数据稳定性,将拒绝所有信息同步操作。

min-slaves-to-write 2 min-slaves-max-lag 8

slave数量少于2个,或者所有slave延迟都大于8秒时,强制关闭master写功能,停止数据同步。


作者:江南雨敲窗



主从复制 redis教程 Redis

需要 登录 后方可回复, 如果你还没有账号请 注册新账号