文章目录
简介
对于redis的单机故障和容量瓶颈问题而无法实现“Redis”的高可用。需要的解决方法是:
- 准备多台服务器,互相连通。将数据复制多个副本保存在不同的服务器上,连接在一起,并保证数据是同步的。即使有其中一台服务器宕机,其他服务器依然可以继续提供服务,实现Redis的高可用,同时实现数据冗余备份。
多台服务器连接的方案
- 提供数据方:master
主服务器,主节点,主库
主客户端 - 接收数据方:slave
从服务器,从节点,从库
从客户端 - 需要解决的问题:
数据同步 - 核心工作:
master的数据复制到slave中(即所谓的主从复制) - 下图是一个最简单的分布式部署
主从复制说明
主从复制即将master中的数据即时、有效的复制到slave
特征:一个master可以拥有多个slave,一个slave只对应一个master
职责:
- master
- 写数据
- 执行写操作时,将出现变化的数据自动同步到slave
- 读数据(可忽略)
- slave
- 读数据
- 写数据(禁止)
主从复制作用
- 读写分离:master写、slave读,提高服务器的读写负载能力
- 负载均衡:基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数量,通过多个从节点分担数据读取负载,大大提高Redis服务器并发量与数据吞吐量
- 故障恢复:当master出现问题时,由slave提供服务(转变为临时master),实现快速的故障恢复
- 数据冗余:实现数据热备份,是持久化之外的一种数据冗余方式
- 高可用基石:基于主从复制,构建哨兵模式与集群,实现Redis的高可用方案
主从复制工作流程
主从复制过程大体上分为三个阶段
- 建立连接阶段(即准备阶段)
- 数据同步阶段
- 命令传播阶段
建立连接阶段
主要建立slave到master的连接,使master能够识别slave,并保存slave端口号
步骤
- slave设置master的地址和端口,保存master信息
- slave与master建立socket连接
- slave发送ping命令(定时器任务)
- 身份验证(可省略,redis一般用于内网)
- 发送slave端口信息
连接后状态:
slave:保存master的地址与端口
master:保存slave的端口
总体:之间创建了连接的socket
流程图如下: