当前位置: 首页 > 科技观察

主从、哨兵、分片集群简介

时间:2023-03-17 21:08:20 科技观察

Redis的应用场景非常多,无论是数据存储还是分布式锁等,本文主要对主从、哨兵、分片集群做简单介绍。分析,不要太深。主从模式主从模式的应用场景有点类似于数据库的主从集群。主从常用于读写分离、备份等目的,所谓主从模式简单的说就是有多个节点,其中包含主节点和从节点的结构如下如下:从节点保持连接后,每隔一段时间该节点会主动与主节点通信并发送同步请求,然后进行同步。其实在整个过程中,最重要的就是数据之间的同步。主要有两种同步方式,即全量同步和增量同步。全同步:全同步一般在从节点刚连接到主节点时使用全复制。当然,你也可以根据自己的需要主动进行全同步。增量同步:Redis增量复制是指从节点在初始化后开始正常工作,将主服务器上发生的写操作同步到从服务器的过程。增量复制的过程主要是主服务器每执行一次写命令就向从服务器发送相同的写命令,从服务器接收并执行收到的写命令,一般使用缓冲区、队列(先进先出)out)等方法辅助执行增量同步。哨兵模式哨兵模式是为了保证redis的高可用而创建的一种架构。简单来说就是通过建立一个或多个哨兵来监控节点。如果master出现故障下线,哨兵会在其中进行投票。2.8之后采用Raft算法进行选主。其实这个算法在zookeeper和一些网络拓扑中也有使用。简单的说就是在选举过程中可通信的节点达成共识后,投票选出master,然后进行failover操作。哨兵单独在redis中作为一个进程运行,哨兵之间也是通过这个进程进行通信的。这个和zookeeper的原理类似。假设一个有6个节点,3个sentinel的集群结构应该是这样的:那么sentry是如何监控master下线的呢?还看到哨兵会进行集群检测,哨兵之间相互监听,但是哨兵不需要做任何配置,因为哨兵巧妙的利用了master的发布/订阅机制,自动发现其他同样监听的哨兵节点统一master在监控master上一般分为两种:SubjectivelyDown(简称SDOWN)是指单个Sentinel实例对服务器做出的离线判断。ObjectivelyDown(简称ODOWN)是指多个Sentinel实例对同一台服务器进行SDOWN判断并通过命令相互通信后得到的服务器离线判断。一个Sentinel可以通过向另一个Sentinel发送命令来询问它是否认为给定服务器离线。shard集群上部不管是redis主从还是高可用sentinel哨兵模式。我们所做的工作只是为了保证数据备份和高可用。至此,我们的程序一直都是往一个redis写入数据,其他redis只是备份。在实际使用中,shardedclusters一般用的比较多。为什么我要特别强调分片集群?其实上面说的master-slave和sentinel都是集群,只不过都是备份集群。实际的数据是由一个For控件提供的,所谓sharding其实就是将不同的数据按照一定的分布规则分布在不同的机器上。在redis中,我们的应用程序在访问数据时,需要根据一定的算法(一致性哈希)进行数据的计算和检索。访问,那么在redis中如何实现数据分片呢?首先,Redis中至少有3个数据分片,每个分片称为master。假设整个集群有N个节点,每个节点都与其他N-个节点保持连接和心跳,节点之间的通信主要确认节点是否存活,节点的数据版本,投票选出新的master,等等那么我们最终的集群结构大致如下: