专栏首页Web技术布道师推荐7-Redis中主从、哨兵、分片集群入门篇

推荐7-Redis中主从、哨兵、分片集群入门篇

redis的应用场景很多,不管是在数据存储还是分布式锁等方面,本篇文章主要对主从、哨兵、分片集群做一个简单的分析,不会讲的太深。

主从模式

主从模式的应用场景有点类似于数据库的主从集群,主从往往是为了读写分离、backup 等目的才使用的,所谓主从模式简单的说就是有多个节点,里面包含主节点和从节点,结构如下图:

从节点在保持连接后每隔一个时间节点会主动的和主节点通信并发送同步请求,而后进行同步。

其实在整个流程中,最需要主要的就是数据间的同步,主要的同步方式有两种也就是全量同步和增量同步。

全量同步:全量同步一般使用在从节点刚接入主节点时进行全量复制,当然你也可以根据你的需求进行主动的全量同步

增量同步:Redis增量复制是指从节点初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令,一般使用缓冲区、队列(先进先出)等方式辅助进行增量的同步。

哨兵模式

哨兵模式是为了保证redis的高可用产生的架构,简单地说就是通过构建1个或多个哨兵对节点进行监控,如果master发生故障下线之后,哨兵之间会进行投票,在2.8之后使用的是Raft算法进行master选举,关于这个算法其实这个算法也应用于zookeeper和某些网络拓扑中,简单说就是在选举的过程可通信节点达成共识后那个投票选举master,而后进行故障转移操作。

哨兵是作为一个进程单独运行在redis中,哨兵之间也是通过该进程进行通信的,这一点和zookeeper的原理也是类似的,假设一个6节点3个哨兵的集群的结构应该如下图:

那么哨兵是如何监控master下线的呢?

前面也有看到哨兵之间会进行集群的检测和哨兵之间的互相监测,但是哨兵不用做什么配置,因为哨兵巧妙的利用了master的发布/订阅机制去自动发现其它也监控了统一master的sentinel节点,在监测master方面一般分为两种:

主观下线(Subjectively Down, 简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断。

客观下线(Objectively Down, 简称 ODOWN)指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断, 并且通过命令互相交流之后, 得出的服务器下线判断。一个 Sentinel 可以通过向另一个 Sentinel 发送命令来询问对方是否认为给定的服务器已下线。

分片集群

在上面的部分不管redis主从,还是高可用的 sentinel 哨兵模式。我们所做的这些工作只是保证了数据备份以及高可用,目前为止我们的程序一直都是向1台redis写数据,其他的redis只是备份而已。在实际使用中一般分片集群使用较多,我为什么要特意强调是分片集群呢,其实上面所说的主从和哨兵都是集群但是他们都是备份式的集群,实际数据是由一台进行控制的,所谓分片其实是将不同的数据按照一定的分布规则分布在不同的机器上

在redis中,我们的应用在存取数据的时候需要根据一定的算法(一致性hash)进行计算和存取 ,那么在redis中如何实现数据分片的呢? 首先Redis至少存在三个数据分片,每个分片称为master,假设整个cluster有N个节点,那么每个节点都和其他N-1个节点保持连接和心跳,节点之间相互通信主要确认节点是否存活、节点的数据版本、投票选择新的master等

那么我们最终的集群结构大致如下:

本文分享自微信公众号 - PHP技术大全(phpgod)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 阿里JAVA面试题剖析:Redis 集群模式的工作原理能说一下么?

    redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?

    猿哥
  • laravel-nestedset:多级无限分类正确姿势

    laravel-nestedset是一个关系型数据库遍历树的larvel4-5的插件包

    猿哥
  • Redis 5.0 主从复制协议握手流程

    最近研究了一下 Redis 5.0 主从复制部分的代码,其同步协议的握手流程比较繁琐,兼容了不同版本协议的差异,支持了增量同步数据。

    猿哥
  • 红黑树(二):删除操作

    构造上,节点会有三种可能:其一是删除节点的孩子都为Nil,其二是删除节点的一个孩子节点为Nil,其三是删除节点的两个孩子节点都不为Nil。而如果两个节点都不为N...

    每天学Java
  • 纸上谈兵: 图 (graph)

    图(graph)是一种比较松散的数据结构。它有一些节点(vertice),在某些节点之间,由边(edge)相连。节点的概念在树中也出现过,我们通常在节点中储存数...

    Vamei
  • Rafy 领域实体框架 - 树型实体功能(自关联表)

    在 Rafy 领域实体框架中,对自关联的实体结构做了特殊的处理,下面对这一功能进行讲解。 场景 在开发数据库应用程序时,往往会遇到自关联表的场景。例如,分类信息...

    用户1172223
  • GR运维手册 - 第一册 苦海岸边,GR的基础知识

    作者简介: ? 刘伟 云和恩墨开源解决方案事业部首席架构师 多年一线互联网企业DBA经历,对MySQL、NoSQL,PostgreSQL等各类开源数据库均有涉猎...

    数据和云
  • PHP数据结构(六) ——树与二叉树之概念及存储结构

    PHP数据结构(六)——树与二叉树之概念及存储结构 (原创内容,转载请注明来源,谢谢) 一、树的含义 1、树为非线性结构,是n(n>=0)个节点的有限集,非空树...

    用户1327360
  • Elasticsearch 6.6 官方文档 之「节点」

    每次启动 Elasticsearch 实例时,都会启动一个节点。连接节点的集合称之为「集群」。如果你运行的是单个 Elasticsearch 节点,那么你也就拥...

    CG国斌
  • Zookeeper 分布式应用

    这篇文章是旨在为那些想要利用Zookeeper协调服务能力进行分布式应用创建的开发者的入门指导,包括一些理论性和实践性的内容。

    WindWant

扫码关注云+社区

领取腾讯云代金券