高可用之哨兵与多主多从、高并发之redis集群

2,399 阅读3分钟

哨兵

image.png

sentinel是运行在特殊模式下的redis服务器,redis3.0以前的集群一般都是借助哨兵sentinel工具来监控master节点的状态,如果master节点一场,则会进行主备切换,将slave节点升级为master节点,性能和高可用方面表现一般,特别是在主从切换瞬间。

sentinel对节点的判断

1)主观下线:某个sentinel节点认为(info命令)某个redis节点为不可用状态

2)客观下线:多个sentinel(sentinel集群)认为某个redis节点为主观下线状态(sentinel收集到足够多的主观下线投票之后),将redis节点判断为客观下线,并发起一次针对主服务器的故障转移操作

工作原理 1)sentinel读入用户指定的配置文件,为每个要被监视的redis节点创建相应的实例结构,并创建连向sentinel的命令连接(用于sentinel连接redis,向redis发送命令请求)和订阅连接(用于接收_sentinel_:hello频道消息)

2)每10秒每个sentinel对redis master和slave执行info replication命令,该命令用来确认主从关系和发现slave节点

3)每2秒每个sentinel向redis节点的_sentinel_:hello频道发送消息,并根据这些信息为其他sentinel创建相应的实例结构,以及命令连接

4)每1秒每个sentinel对其他sentinel和redis执行ping命令,用于心跳检测

多主多从

image.png

以上借鉴某云平台的架构设计图,该模式采用代理模式,客户端的请求由代理节点转发至数据分片,可享受代理节点带来的负载均衡(数据分片)、读写分离、故障转移、代理查询缓存、长连接(通常情况下,Proxy通过与数据分片建立长连接来处理请求)等特性能力,相比代理模式,直连模式节约了通过代理处理请求的时间,可以在一定程度上提高Redis服务的响应速度。

集群

redis集群是redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供赋值和故障转移功能。

主从同步

为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,以下是级联结构

image.png

1)全量同步:一般发生在slave初始化阶段,slave将master上所有数据都复制一份

2)增量同步:slave初始化后开始正常工作时主服务器发生的写操作同步的过程,主服务器执行每个写命令将同步到从服务器

主从同步流程.png

gossip算法(级联结构实现原理): 主要用在分布式数据库系统中各个副本节点同步数据之用,这种场景的一个最大特点就是组成的网络的节点都是对等节点

数据分片

redis集群通过分片的方式来保存数据库中的键值对:集群的整个数据库被分为16384个槽。

redis3.0前采用一致性hash算法实现数据分片,3.0以后将key hash(CRC16)后对16384取模后决定放入哪个槽。