Redis 场景应用设计
1. Redis主从原理剖析
1.1. 主从结构的目的
部署Redis主从结构,是为了Redis服务的高可用。主从的所存取数据是一样的。
在复制的概念中,数据库分为两类,一类是主数据库(master),另一类是从数据库(slave)。主数据库可以进行读写操作,当写操作导致数据变化时会自动将数据同步给从数据库。而从数据库一般是只读的,并接受主数据库同步过来的数据。一个主数据库可以拥有多个从数据库,而一个从数据库只能拥有一个主数据库。
1.2. 常用的主从结构
- 一主一从:用于主节点故障转移从节点,当主节点的“写”命令并发高且需要持久化,可以只在从节点开启AOF(主节点不需要)
- 一主多从:针对“读”较多的场景,“读”由多个从节点来分担,但节点越多,主节点同步到多节点的次数也越多,影响带宽,也加重主节点的稳定
- 树状主从:一主多从的缺点(主节点推送次数多压力大)可用些方案解决,主节点只推送一次数据到从节点1,再由从节点2推送到11,减轻主节点推送的压力
2. Redis 哨兵机制
在主从架构中,当主数据库遇到异常中断服务后,开发者可以通过手动的方式选择一个从数据库来升格为主数据库,以使得系统能够继续提供服务。然而整个过程相对麻烦且需要人工介入,难以实现自动化。
Redis 2.8中提供了哨兵工具来实现自动化的系统监控和故障恢复功能。哨兵的作用就是监控redis主、从数据库是否正常运行,主出现故障自动将从数据库转换为主数据库。
2.1. 高可用
- 它与被认为是不间断操作的容错技术有所不同。是目前企业防止核心系统因故障而无法工作的最有效保护手段
高可用一般指服务的冗余,一个服务挂了,可以自动切换到另外一个服务上,不影响客户体验
2.2. 主从如何进行故障转移
主节点(master)故障,从节点slave-1端执行 slaveof no one后变成新主节点;
- 其它的节点成为新主节点的从节点,并从新节点复制数据;
- 需要人工干预,无法实现高可用
2.3. 哨兵机制(sentinel)实现高可用
原理:当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性3. Redis 集群
使用哨兵,redis每个实例也是全量存储,每个redis存储的内容都是完整的数据,这样会造成浪费内存。为了最大化利用内存,可以采用集群,就是分布式存储。即每台redis分别存储不同的内容,共有16384个slot。每个redis分得一些slot,通过算法hash_slot = crc16(key) mod 16384
找到对应slot,从而知道数据是存在那个redis节点中。