互联网的三高架构(高并发、高性能、高可用)。下面说一下高可用,比如说一年之中服务器宕机了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写功能,停止数据同步。