1.Redis读写分离
1.1Redis性能
- TPS(吞吐量)
系统在单位时间内处理请求的数量
- RT(响应时间)
系统对请求作出响应的时间。在讨论一个系统的响应时间时,一般指系统所有功能的平均时间或者所有功能的最大响应时间
- QPS(每秒查询率)
1.2Redis读写分离
本机redis性能测试QPS为17万,而一些大型项目需要千万级别的QPS,这时需要采用读写分离突破性能瓶颈。通过运行新的服务器
(从服务器)连接主服务器,然后主服务器发送数据副本给从服务器,这样就有新的服务器处理读请求。通过读写分离,用户将有新的服务器专门处理读请求,提高了redis性能。
1.3Redis同步原理
- RDB全量持久化
- AOF增量持久化
数据同步步骤
- 旧版本使用SYNC,完整重同步非常耗费资源
- 新版本使用PSYNC,使用完整重同步和部分重同步,效率较高
2.Redis高可用Sentinel
2.1高可用介绍
高可用是分布式系统架构设计中非常重要的因素,高可用就是减少系统不可用的时间,高可用一般遵循以下几点:
- 避免单点故障。某个功能的实现不能只有一台服务器,否则出现故障整个系统就不可用
- 保证冗余。增加重复的部分,对数据库等有备份
- 保证自动故障转移。每次故障人工修复会增加不可用的时间,所以要实现自动故障转移
redis主从复制后将主节点的数据复制给从节点,从节点此时具有的功能有:
- 分担主节点的读写压力
- 主节点故障后,从节点可以代替主节点从而实现高可用
2.2手动主从切换
当主节点故障后,我们可通过手动主从切换让某一从节点成为主节点继续工作。其中需要手动修改配置文件和修改主从配置等,十分繁琐
2.3Sentinel实现高可用
2.3.1Sentinel介绍
哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
哨兵的三大工作任务:
- 监控:通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
- 提醒:当某个redis发生故障,哨兵可通过API通知管理员
- 自动故障转移:当主服务器失效时,sentinel会进行一次自动故障转移,sentinel会将主服务器的一个从服务器自动升级为主服务器,并且让失效主服务器的其他从服务器改为复制新的主服务器
自动故障转移的过程:
当哨兵1检测到有服务器宕机,仅仅哨兵1判断服务器宕机我们称之为主观下线。当有多于n个(n可以自己设置)哨兵判断服务器宕机,此时为客观下线,之后会进行自动主从切换,故障转移。
互联网冷备和热备
- 冷备
冷备发生在数据库完全关闭的情况下,备份快速安全,易于维护
- 热备
热备发生在数据库开启的情况下,难于维护
3.Redis内置集群(cluster)
3.1集群原理
原理:
1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
2、节点的fail是通过集群中超过半数的节点检测失效时才生效。
3、客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
4、redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。
5、Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。
Redis集群的主从复制模型
为了保证集群的高可用性,redis每个节点都有至少一个复制节点。
Redis一致性保证
为了提高性能,主节点先回复命令再复制给从节点数据,这样有可能造成主从不一致情况,为了性能作出的必要取舍。
4.Redis集群扩展
4.1集群现状
- 很多公司在使用自己的redis高可用集群方案,并没有使用redis内置集群(上线较晚)
- 网络通讯问题。
- 数据迁移问题
4.2一致性哈希算法
4.3虚拟节点