目录
一、Redis高可用
在Redis中实现高可用的技术主要有持久化、主从复制、哨兵和集群
1、主从复制
主从复制是Redis高可用的基础,哨兵和集群都是在主从复制的基础上实现的。主从复制主要实现了数据的舵机备份以及对于读操作的负载均衡和简单的故障恢复。但还是有极大的限制:故障恢复无法自动化;写操作无法负载均衡;存储能力受单机性能的限制。
①概念
主从复制是指将一台Redis服务器的数据复制到其他的Redis服务器(主从节点)数据的复制只能由主节点到从节点,是单向的。默认情况下,每台Redis服务器都是主节点且每一个主节点可有多个或者没有从节点,但是每一个从节点只能有一个主节点。
②作用
由主从复制实现了数据的热备份,是持久化以外的一种数据冗余方式。当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复(实际上是一种服务器的冗余)。在主从复制的基础上,配合读写分离,可以由主节点提供写服务,从节点提供读服务,分担服务器的负载,尤其在写少读多的情况下,通过多个从节点分担读负载可以大大提高Redis服务器的并发量。
③流程
开启redis服务,从服务器向主服务器发送SYNC同步请求。主服务器会fork一个子进程产生一个RDB文件(客户端仍旧写入新命令)。RDB文件持久化完成后,主服务器会将RDB文件和缓存起来的命令推送给从服务器。
2、哨兵(至少三台redis)
在主从复制的基础上,哨兵实现了自动化的故障恢复。
缺陷:写操作无法负载均衡;存储能力依然受单机性能的限制。
①概念
哨兵是一个分布式系统,用于对主从结构种的每台服务器进行监控。在主从复制的基础上,哨兵引入了主节点的自动故障转移,当出现故障时通过投票是否离线来选择新的master节点并将所有slave连接到新的master。
②作用
哨兵会不断地检查主节点和从系欸但是否正常。当主节点不能正常工作时哨兵会开始故障转移操作,通过将一个从节点升级为新的主节点并将原从节点指向新master,同时可以将故障转移结果发送给客户端。
③结构
哨兵由两部分组成:哨兵节点和数据节点。由一个或多个哨兵节点组成一个哨兵系统,不储存数据。主节点和从节点都是数据节点。
④故障转移机制
由哨兵节点定期监控主节点是否发生故障。每个哨兵节点每隔1s向主节点、从节点以及其他烧饼节点发送一个ping命令做一次心跳检测,如果主节点在一定时间范围内不回复或者时回复一个错误信息,那么就认为这个主节点主观下线。当超过半数的哨兵节点认为该主节点主观下线,则视为该主节点客观下线。此时哨兵节点会通过Raft算法实现选举机制共同选举出一个哨兵节点为leader来负责处理主节点的故障转移和通知。
需要注意的是客观下线是主节点才有的概念,如果从节点和哨兵节点发生故障,被哨兵主观下线后不会再有后续的客观下线和故障转移操作。
⑤主节点选举
过滤掉不健康的、没有回复哨兵ping响应的从节点;选择配置文件中从节点优先级配置最高的;选择复制偏移量最大,复制最完整的从节点。
3、集群(推荐至少6台redis)
通过集群,Redis解决了写操作无法负载均衡以及存储能力受单机限制的问题,是一个较为完善的高可用方案。
①简介
redis集群模式是一个可以解决写的操作无法负载均衡、存储受单机限制以及故障自动切换功能的一个集群。由多个节点组成,redis的数据分布在这些节点中。节点分为主节点和从节点,只有主节点复制读写请求和集群信息的维护,从节点只进行主节点数据和状态信息的复制。
②作用
数据分区(分片)是居群最核心的功能。
集群将数据分散到多个系欸但,一方面突破了redis单机内存大小的限制,存储容量大大增加,另一方面每个主节点都可以对外提供读写服务,提高了集群的响应能力。
③集群模式的数据分片
redis集群引入了哈希槽的概念,每个集群由16384个哈希槽(编号0-16383),集群中的每个节点负责一部分哈希槽。每个key通过CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值去找对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。
总的来说就是集群是分布式的,它可以将多个master当作一个整体来存放数据并且集群中由16384个哈希槽,集群中的master来平分这些槽位。当需要由数据来存储到集群中时