精华内容
下载资源
问答
  • redis集群和哨兵有什么区别呢?哨兵的作用就是监控Redis系统的运行状况。它的功能包括以下两个。(推荐学习:Redis视频教程)监控主数据库和从数据库是否正常运行。主数据库出现故障时自动将从数据库转换为主数据库。...

    redis集群和哨兵有什么区别呢?

    哨兵的作用就是监控Redis系统的运行状况。它的功能包括以下两个。(推荐学习:Redis视频教程)

    监控主数据库和从数据库是否正常运行。

    主数据库出现故障时自动将从数据库转换为主数据库。

    sentinel发现master挂了后,就会从slave中重新选举一个master。

    哨兵模式强调高可用

    Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:

    监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

    提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

    自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

    客户端中不会记录redis的地址(某个IP),而是记录sentinel的地址,这样我们可以直接从sentinel获取的redis地址,因为sentinel会对所有的master、slave进行监控,它是知道到底谁才是真正的master的,例如我们故障转移,这时候对于sentinel来说,master是变了的,然后通知客户端。而客户端根本不用关心到底谁才是真正的master,只关心sentinel告知的master。

    集群

    即使使用哨兵,redis每个实例也是全量存储,每个redis存储的内容都是完整的数据,浪费内存且有木桶效应。为了最大化利用内存,可以采用集群,就是分布式存储。即每台redis存储不同的内容,共有16384个slot。每个redis分得一些slot,hash_slot = crc16(key) mod 16384 找到对应slot,键是可用键,如果有{}则取{}内的作为可用键,否则整个键是可用键

    集群至少需要3主3从,且每个实例使用不同的配置文件,主从不用配置,集群会自己选。

    cluster是为了解决单机Redis容量有限的问题,将数据按一定的规则分配到多台机器。

    集群模式提高并发量。

    更多Redis相关技术文章,请访问Redis数据库使用入门教程栏目进行学习!

    展开全文
  • 一、主从复制1 概念Redis多副本,采用主从(replication)部署结构,相较于单副本而言最大的特点就是主从实例间数据实时同步,并且提供数据持久化备份策略。主从实例部署在不同的物理服务器上,根据公司的基础环境...

    一、主从复制

    1 概念

    Redis多副本,采用主从(replication)部署结构,相较于单副本而言最大的特点就是主从实例间数据实时同步,并且提供数据持久化和备份策略。主从实例部署在不同的物理服务器上,根据公司的基础环境配置,可以实现同时对外提供服务和读写分离策略。

    818aa65a0e9348ff8df03902bd0b9588

    一般来说,要将Redis运用于工程项目中,只使用一台Redis是万万不能的,原因如下: 从结构上,单个Redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大; 从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内容容量为256G,也不能将所有内容用作Redis存储内存,一般来说,单台Redis最大使用内存不应该超过20G。

    考虑如下一种场景:电子商务网站上的商品,一般都是一次上传,无数次浏览的,说专业点也就是”多读少写”。

    对于这种场景,我们可以使如下这种架构:

    c5363e58985244ea896f0e3a3b02da9d

    如图所示,将一台Redis服务器作主库(Matser),其他三台作为从库(Slave),主库只负责写数据,每次有数据更新都将更新的数据同步到它所有的从库,而从库只负责读数据。 这样一来,就有了两个好处: 读写分离,不仅可以提高服务器的负载能力并且可以根据读请求的规模自由增加或者减少从库的数量棒极了; 数据被复制成了了好几份,就算有一台机器出现故障,也可以使用其他机器的数据快速恢复。 需要注意的是:在Redis主从模式中,一台主库可以拥有多个从库,但是一个从库只能隶属于一个主库。

    2 redis主从复制特点

    1、Master可以拥有多个Slave;2、多个salve可以连接同一个Master,还可以链接到其他的slave3、主从复制不会阻塞Master,在同步数据时,master可以继续处理client请求4、提供系统的伸缩性。

    优点:

    • 高可靠性:一方面,采用双机主备架构,能够在主库出现故障时自动进行主备切换,从库提升为主库提供服务,保证服务平稳运行;另一方面,开启数据持久化功能和配置合理的备份策略,能有效的解决数据误操作和数据异常丢失的问题;
    • 读写分离策略:从节点可以扩展主库节点的读能力,有效应对大并发量的读操作。

    缺点:

    • 故障恢复复杂,如果没有RedisHA系统(需要开发),当主库节点出现故障时,需要手动将一个从节点晋升为主节点,同时需要通知业务方变更配置,并且需要让其它从库节点去复制新主库节点,整个过程需要人为干预,比较繁琐;
    • 主库的写能力受到单机的限制,可以考虑分片;
    • 主库的存储能力受到单机的限制,可以考虑Pika;
    • 原生复制的弊端在早期的版本中也会比较突出,如:Redis复制中断后,Slave会发起psync,此时如果同步不成功,则会进行全量同步,主库执行全量备份的同时可能会造成毫秒或秒级的卡顿;又由于COW机制,导致极端情况下的主库内存溢出,程序异常退出或宕机;主库节点生成备份文件导致服务器磁盘IO和CPU(压缩)资源消耗;发送数GB大小的备份文件导致服务器出口带宽暴增,阻塞请求,建议升级到最新版本。

    二 哨兵模式

    1 概念

    Redis Sentinel是社区版本推出的原生高可用解决方案,其部署架构主要包括两部分:Redis Sentinel集群和Redis数据集群。

    其中Redis Sentinel集群是由若干Sentinel节点组成的分布式集群,可以实现故障发现、故障自动转移、配置中心和客户端通知。Redis Sentinel的节点数量要满足2n+1(n>=1)的奇数个。

    f85efb8d552648d1a55085f2fee277fe
    904d6043e9334584bf5b5f115603f827

    Redis-Sentinel(哨兵模式)是官方推荐的高可用解决方案,当redis在做master-slave的高可用方案时,假如master宕机了,redis本身(以及其很多客户端)都没有实现自动进行主备切换,而redis-sentinel本身也是独立运行的进程,可以部署在其他与redis集群可通讯的机器中监控redis集群。

    有了主从复制的实现之后,我们如果想从服务器进行监控,那么在redis2.6以后提供了一个”哨兵“机制,并在2.8版本以后功能稳定起来。

    哨兵:顾名思义,就是监控Redis系统的运行状况

    哨兵模式的特点

    1. 不时地监控redis是否按照预期良好地运行;
    2. 如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
    3. 能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。
    4. 哨兵为客户端提供服务发现,客户端链接哨兵,哨兵提供当前master的地址然后提供服务,如果出现切换,也就是master挂了,哨兵会提供客户端一个新地址。

    哨兵(sentinel)本身也是支持集群的

    很显然,单个哨兵会存在自己挂掉而无法监控整个集群的问题,所以哨兵也是支持集群的,通常用三台哨兵机器来监控一组redis集群。

    2 哨模式的优缺点

    优点:

    • Redis Sentinel集群部署简单;
    • 能够解决Redis主从模式下的高可用切换问题;
    • 很方便实现Redis数据节点的线形扩展,轻松突破Redis自身单线程瓶颈,可极大满足Redis大容量或高性能的业务需求;
    • 可以实现一套Sentinel监控一组Redis数据节点或多组数据节点。

    缺点:

    • 部署相对Redis主从模式要复杂一些,原理理解更繁琐;
    • 资源浪费,Redis数据节点中slave节点作为备份节点不提供服务;
    • Redis Sentinel主要是针对Redis数据节点中的主节点的高可用切换,对Redis的数据节点做失败判定分为主观下线和客观下线两种,对于Redis的从节点有对节点做主观下线操作,并不执行故障转移。
    • 不能解决读写分离问题,实现起来相对复杂。

    三、集群模式

    1 概念

    集群模式是实际使用最多的模式。

    Redis Cluster是社区版推出的Redis分布式集群解决方案,主要解决Redis分布式方面的需求,比如,当遇到单机内存,并发和流量等瓶颈的时候,Redis Cluster能起到很好的负载均衡的目的。

    Redis Cluster集群节点最小配置6个节点以上(3主3从),其中主节点提供读写操作,从节点作为备用节点,不提供请求,只作为故障转移使用。

    Redis Cluster采用虚拟槽分区,所有的键根据哈希函数映射到0~16383个整数槽内,每个节点负责维护一部分槽以及槽所印映射的键值数据。

    6f837ff2e6604a1aa4d96df6b3bf803b

    集群模式的优缺点

    优点:

    • 无中心架构;
    • 数据按照slot存储分布在多个节点,节点间数据共享,可动态调整数据分布;
    • 可扩展性:可线性扩展到1000多个节点,节点可动态添加或删除;
    • 高可用性:部分节点不可用时,集群仍可用。通过增加Slave做standby数据副本,能够实现故障自动failover,节点之间通过gossip协议交换状态信息,用投票机制完成Slave到Master的角色提升;
    • 降低运维成本,提高系统的扩展性和可用性。

    缺点:

    • Client实现复杂,驱动要求实现Smart Client,缓存slots mapping信息并及时更新,提高了开发难度,客户端的不成熟影响业务的稳定性。目前仅JedisCluster相对成熟,异常处理部分还不完善,比如常见的“max redirect exception”。
    • 节点会因为某些原因发生阻塞(阻塞时间大于clutser-node-timeout),被判断下线,这种failover是没有必要的。
    • 数据通过异步复制,不保证数据的强一致性。
    • 多个业务使用同一套集群时,无法根据统计区分冷热数据,资源隔离性较差,容易出现相互影响的情况。
    • Slave在集群中充当“冷备”,不能缓解读压力,当然可以通过SDK的合理设计来提高Slave资源的利用率。
    • Key批量操作限制,如使用mset、mget目前只支持具有相同slot值的Key执行批量操作。对于映射为不同slot值的Key由于Keys不支持跨slot查询,所以执行mset、mget、sunion等操作支持不友好。
    • Key事务操作支持有限,只支持多key在同一节点上的事务操作,当多个Key分布于不同的节点上时无法使用事务功能。
    • Key作为数据分区的最小粒度,不能将一个很大的键值对象如hash、list等映射到不同的节点。
    • 不支持多数据库空间,单机下的redis可以支持到16个数据库,集群模式下只能使用1个数据库空间,即db 0。
    • 复制结构只支持一层,从节点只能复制主节点,不支持嵌套树状复制结构。
    • 避免产生hot-key,导致主库节点成为系统的短板。
    • 避免产生big-key,导致网卡撑爆、慢查询等。
    • 重试时间应该大于cluster-node-time时间。
    • Redis Cluster不建议使用pipeline和multi-keys操作,减少max redirect产生的场景。
    展开全文
  • AOF机制服务尽量少中断:增加副本冗余主从模式Redis提供了主从库模式,增加冗余的副本来提高Redis集群的高可靠性。主从库之间采用读写分离的方式,写请求只能在主库,读请求在主从库都可以完成。读操作:主库、从库...

    主从库模式

    Redis的高可靠性主要包括两方面:

    • 数据尽量少丢失:RDB & AOF机制

    • 服务尽量少中断:增加副本冗余

    主从模式

    Redis提供了主从库模式,增加冗余的副本来提高Redis集群的高可靠性。主从库之间采用读写分离的方式,写请求只能在主库,读请求在主从库都可以完成。

    • 读操作:主库、从库

    • 写操作:主库 --> 主库写完后同步从库

    9631a97b1a848939234ff3bb085f339d.png

    写请求为什么只能在主库上,若从库和主库上都可以进行读写会发生什么?

    • 1. 若有3个写请求先后都是对key1进行操作,并且分别请求到了不同实例上,对应修改的值分别为v1,v2,v3,那么key1对应的值在每个实例上都是不一致的。读数据时,可能会读到旧的值。

    • 2. 若要保持这个数据在3个实例上都是一致的,旧要涉及到加锁、实例间协商是否完成修改等一系列操作,但这会带来巨额的开销,得不偿失。

    主从库之间是如何同步的

    全量同步:当从库是第一次建立连接并开始同步,该种情况下的同步如下图:

    3f2431021a654245cf49936f2abf07e6.png

    • 从库和主库建立起连接,并告诉主库即将进行同步,主库确认回复后,主从库间就可以开始同步了。首先,从库给主库发送 psync 命令,表示要进行数据同步,主库根据这个命令的参数来启动复制。psync 命令包含了主库的 runID 和复制进度 offset 两个参数。
      (1)runID,是每个 Redis 实例启动时都会自动生成的一个随机 ID,用来唯一标记这个实例。当从库和主库第一次复制时,因为不知道主库的 runID,所以将 runID 设为“?”。
      (2)offset,此时设为 -1,表示第一次复制。

    • FULLRESYNC 响应表示第一次复制采用的全量复制,也就是说,主库会把当前所有的数据都复制给从库。在第二阶段,主库将所有数据同步给从库。从库收到数据后,在本地完成数据加载。这个过程依赖于内存快照生成的 RDB 文件。为了保证主从库的数据一致性,主库会在内存中用专门的 replication buffer,记录 RDB 文件生成后收到的所有写操作。

    • 主库会把第二阶段执行过程中新收到的写命令,再发送给从库。具体的操作是,当主库完成 RDB 文件发送后,就会把此时 replication buffer 中的修改操作发给从库,从库再重新执行这些操作。这样一来,主从库就实现同步了。

    增量同步:

    Redis增量复制是指replica初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。

    Redis的主节点创建和维护一个环形缓冲复制队列(即repl_backlog_buffer),从节点部分复制(增量复制)的数据均来自于repl_backlog_buffer。主节点只有一个repl_backlog_buffer,所有从节点共享。

    主-从-从模式减少主库全量同步时的压力

    主从库模式中,所有的从库都是和主库连接,所有的全量复制也都是和主库进行的。现在,我们可以通过“主 - 从 - 从”模式将主库生成 RDB 和传输 RDB 的压力,以级联的方式分散到从库上。如下图:

    c6152e7608d25f64d4ac5fe1757f58e9.png

    主从库网络中断怎么办

    Redis的主节点创建和维护一个环形缓冲复制队列(即repl_backlog_buffer),从节点部分复制(增量复制)的数据均来自于repl_backlog_buffer。主节点只有一个repl_backlog_buffer,所有从节点共享。

    当主从库断连后,主库每次都会把收到的写操作命令,写入 replication buffer,同时也会把这些操作命令也写入 repl_backlog_buffer 这个缓冲区。主库会记录自己写到的位置,从库则会记录自己已经读到的位置。主库来的偏移量是master_repl_offset,对从库来说从库已复制的偏移量是slave_repl_offset,正常情况下,这两个偏移量基本相等。

    主从库的连接恢复之后,从库首先会给主库发送 psync 命令,并把自己当前的 slave_repl_offset 发给主库,主库会判断自己的 master_repl_offset 和 slave_repl_offset 之间的差距。在网络断连阶段,主库可能会收到新的写操作命令,所以,一般来说,master_repl_offset 会大于 slave_repl_offset。此时,主库只用把 master_repl_offset 和 slave_repl_offset 之间的命令操作同步给从库就行。

    哨兵

    哨兵其实就是一个运行在特殊模式下的 Redis 进程,主从库实例运行的同时,它也在运行。哨兵主要负责的就是三个任务:监控、选主(选择主库)和通知,哨兵节点其实就是一个特殊的Redis实例节点。

    • 监控:判断主从库下线

    • 选主:选出新主库

    • 通知:让从库与主库同步,通知客户端与主库连接

    1c678258424f1da6a98455e67ef197b9.png

    哨兵与没一个主库和从库相连接,并且哨兵节点之间行成集群。

    6c30e78ded16be75ffe83a2bd53bcfdf.png

    监控

    哨兵与没一个Redis节点相连接并通过PING命令检测它自己和主、从库的网络连接情况,用来判断实例的状态。没一个Redis节点的状态可以分为”主观下线“和”客观下线“。

    如果检测的是从库,那么,哨兵简单地把它标记为“主观下线”就行了,因为从库的下线影响一般不太大,集群的对外服务不会间断。

    如果检测的是主库,那么,哨兵还不能简单地把它标记为“主观下线”,开启主从切换。因为很有可能存在这么一个情况:那就是哨兵误判了,其实主库并没有故障。可是,一旦启动了主从切换,后续的选主和通知操作都会带来额外的计算和通信开销。

    在判断主库是否下线时,不能由一个哨兵说了算,只有大多数的哨兵实例,都判断主库已经“主观下线”了,主库才会被标记为“客观下线”,这个叫法也是表明主库下线成为一个客观事实了。这个判断原则就是:少数服从多数。同时,这会进一步触发哨兵开始主从切换流程。

    选主

    当主库挂了以后,哨兵会在从库中进行选主,选主主要包括以下三个原则。

    • 首先,优先级最高的从库得分高。

    • 其次,和旧主库同步程度最接近的从库得分高。

    • 最后,ID 号小的从库得分高。

    用户可以通过 slave-priority 配置项,给不同的从库设置不同优先级。比如,你有两个从库,它们的内存大小不一样,你可以手动给内存大的实例设置一个高优先级。在选主时,哨兵会给优先级高的从库打高分,如果有一个从库优先级最高,那么它就是新主库了。如果从库的优先级都一样,那么哨兵开始进行第二个原则判断。

    这个规则的依据是,如果选择和旧主库同步最接近的那个从库作为主库,那么,这个新主库上就有最新的数据。主从库同步时有个命令传播的过程。在这个过程中,主库会用 master_repl_offset 记录当前的最新写操作在 repl_backlog_buffer 中的位置,而从库会用 slave_repl_offset 这个值记录当前的复制进度。

    每个实例都会有一个 ID,这个 ID 就类似于这里的从库的编号。目前,Redis 在选主库时,有一个默认的规定:在优先级和复制进度都相同的情况下,ID 号最小的从库得分最高,会被选为新主库。

    分片集群

    当数据容量越来越大时,如Redis集群的数据量有5G增长到了25G,那么需要考虑集群的扩容问题,在扩容时一般有两种方案:

    • 纵向扩展:升级单个 Redis 实例的资源配置,包括增加内存容量、增加磁盘容量、使用更高配置的 CPU。将磁盘容量扩展到50G
      简单直接,但是增加了硬件和成本的限制、当使用 RDB 对数据进行持久化时,如果数据量增加,需要的内存也会增加,主线程 fork 子进程时就可能会阻塞

    • 横向扩展:横向增加当前 Redis 实例的个数,就像下图中,原来使用 1 个 *GB 内存、10GB 磁盘的实例,现在使用三个相同配置的实例。

    05e87e4446e8b23c213a51b85fac262b.png

    分片和实例的对应分布关系

    在分片集群中,数据需要分布在不同实例上,那么,数据和实例之间如何对应呢?这就和接下来我要讲的 Redis Cluster 方案有关了。不过,我们要先弄明白切片集群和 Redis Cluster 的联系与区别。

    Redis Cluster 方案采用哈希槽(Hash Slot,接下来我会直接称之为 Slot),来处理数据和实例之间的映射关系。在 Redis Cluster 方案中,一个切片集群共有 16384 个哈希槽,这些哈希槽类似于数据分区,每个键值对都会根据它的 key,被映射到一个哈希槽中。

    • 首先根据键值对的 key,按照CRC16 算法计算一个 16 bit 的值;

    • 然后,再用这个 16bit 值对 16384 取模,得到 0~16383 范围内的模数,每个模数代表一个相应编号的哈希槽。

    以只有五个槽为例,展示,数据、哈希槽、实例这三者的映射分布情况,如下图:

    be7f16d2f42c421923625692ee15a693.png

    客户端如何定位数据

    客户端和集群实例建立连接后,实例就会把哈希槽的分配信息发给客户端。但是,在集群刚刚创建的时候,每个实例只知道自己被分配了哪些哈希槽,是不知道其他实例拥有的哈希槽信息的。那么,客户端为什么可以在访问任何一个实例时,都能获得所有的哈希槽信息呢?这是因为,Redis 实例会把自己的哈希槽信息发给和它相连接的其它实例,来完成哈希槽分配信息的扩散。当实例之间相互连接后,每个实例就有所有哈希槽的映射关系了。客户端收到哈希槽信息后,会把哈希槽信息缓存在本地。当客户端请求键值对时,会先计算键所对应的哈希槽,然后就可以给相应的实例发送请求了。

    实例和哈希槽的对应关系并不是一成不变的,最常见的变化有两个:

    • 在集群中,实例有新增或删除,Redis 需要重新分配哈希槽

    • 为了负载均衡,Redis 需要把哈希槽在所有实例上重新分布一遍

    Redis Cluster 方案提供了一种重定向机制,所谓的“重定向”,就是指,客户端给一个实例发送数据读写操作时,这个实例上并没有相应的数据,客户端要再给一个新实例发送操作命令。

    f1ab2f168be9ebfc711ee7aa639cbf82.png

    需要注意的是,在上图中,当客户端给实例 2 发送命令时,Slot 2 中的数据已经全部迁移到了实例 3。在实际应用时,如果 Slot 2 中的数据比较多,就可能会出现一种情况:客户端向实例 2 发送请求,但此时,Slot 2 中的数据只有一部分迁移到了实例 3,还有部分数据没有迁移。在这种迁移部分完成的情况下,客户端就会收到一条 ASK 报错信息。

    这个结果中的 ASK 命令就表示,客户端请求的键值对所在的哈希槽 13320,在实例3上,但是这个哈希槽正在迁移。此时,客户端需要先给 实例3这个实例发送一个 ASKING 命令。这个命令的意思是,让这个实例允许执行客户端接下来发送的命令。然后,客户端再向这个实例发送 GET 命令,以读取数据。

    eedd9467462baf1e05c7b89f095262cc.png

    在下图中,Slot 2 正在从实例 2 往实例 3 迁移,key1 和 key2 已经迁移过去,key3 和 key4 还在实例 2。客户端向实例 2 请求 key2 后,就会收到实例 2 返回的 ASK 命令。ASK 命令表示两层含义:第一,表明 Slot 数据还在迁移中;第二,ASK 命令把客户端所请求数据的最新实例地址返回给客户端,此时,客户端需要给实例 3 发送 ASKING 命令,然后再发送操作命令。ASK 命令并不会更新客户端缓存的哈希槽分配信息。


    作者:买个橘子
    链接:https://juejin.im/post/6894048481422344199

    展开全文
  • 哨兵模式强调高可用Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:监控(Monitoring): Sentinel 会不断地检查你的主服务器从服务器是否运作正常。提醒(Noti...

    监控主数据库和从数据库是否正常运行。

    主数据库出现故障时自动将从数据库转换为主数据库。

    sentinel发现master挂了后,就会从slave中重新选举一个master。

    哨兵模式强调高可用

    Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:

    监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

    提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

    自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

    客户端中不会记录redis的地址(某个IP),而是记录sentinel的地址,这样我们可以直接从sentinel获取的redis地址,因为sentinel会对所有的master、slave进行监控,它是知道到底谁才是真正的master的,例如我们故障转移,这时候对于sentinel来说,master是变了的,然后通知客户端。而客户端根本不用关心到底谁才是真正的master,只关心sentinel告知的master。

    集群

    即使使用哨兵,redis每个实例也是全量存储,每个redis存储的内容都是完整的数据,浪费内存且有木桶效应。为了最大化利用内存,可以采用集群,就是分布式存储。即每台redis存储不同的内容,共有16384个slot。每个redis分得一些slot,hash_slot = crc16(key) mod 16384 找到对应slot,键是可用键,如果有{}则取{}内的作为可用键,否则整个键是可用键

    集群至少需要3主3从,且每个实例使用不同的配置文件,主从不用配置,集群会自己选。

    cluster是为了解决单机Redis容量有限的问题,将数据按一定的规则分配到多台机器。

    集群模式提高并发量。

    展开全文
  • 集群分片 比如 5主5从,也就是说 数据过来之后会均匀的分配到5台服务器上面,5台服务器上面的数据是不同的,但是每...关于哨兵模式,就类似于zookeeper的选举模式一样,5个服务器需要一个管理的主机,他们需要选举出...
  • Redis 主从、哨兵和集群 区别

    千次阅读 2019-03-06 13:39:50
    Redis 复制功能的几个重要方面: 一个主服务器可以有多个从服务器。 不仅主服务器可以有从服务器, 从服务器也可以有自己的从服务器, 多个从服务器之间可以构成一个图状结构。 复制功能不会阻塞主服务器: 即使有...
  • redis搭建模式主从模式,哨兵模式,三主三从集群模式集群模式 aofrdb区别 https://www.cnblogs.com/shizhengwen/p/9283973.html https://www.cnblogs.com/itdragon/p/7906481.html 主从模式 ...
  • 谈到Redis服务器的高可用,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制。哨兵(Sentinel):可以管理多个Redis服务器,它提供了监控,提醒...哨兵(sentinal)哨兵Redis集群架构中非常重...
  • Redis Cluster 集群模式原理动态扩容

    千次阅读 2020-01-08 16:00:55
    Redis Cluster原理 详细参考 Redis cluster集群模式的原理, 在这里补充下要点 16384个slot, 平均分布在各个master,...redis cluster默认是不支持slave节点读或者写的, 这和哨兵模式区别 基于slot的请求重定向: 客...
  • 一、Redis哨兵模式在SpringBoot中的使用哨兵模式变化的就是配置信息;其他的单机版的没有区别。spring: redis: # redis集群的密码 password: 123456 # 超时时间,单位毫秒 timeout: 3000 # 数据库编号 database: 0...
  • 1.Redis 主从复制、哨兵和集群这三个有什么区别 1.主从模式:读写分离,备份,一个Master可以有多个Slaves。 2.哨兵sentinel:监控,自动转移,哨兵发现主服务器挂了后,就会从slave中重新选举一个主服务器。 3....
  • Redis集群的认识

    2020-01-16 22:52:41
    集群的特点两大关键特性两大能力》》》》》》》面试题 :集群分布式区别为什么redis要做集群如果要做集群 应该怎么做方案一 主从复制优缺点方案二: 哨兵模式优缺点方案三: Redis-Clusterredis集群搭建步骤 ...
  • 写在前面的话:对于redis来说,它有四种部署模式,分别是单机模式、主从模式、哨兵模式和集群模式,他们的使用场景有些区别,当然也是越来越复杂,可靠性越来越高。本文从实际操作的角度,来介绍...
  • redis的两种集群模式

    2020-06-24 14:24:33
    一、哨兵模式和集群模式 从节点 的区别 哨兵模式中的从节点默认是可读的。 集群模式中的从节点默认是不可读的,只是主节点的热备。 如果想要从集群模式中的从节点读取数据,需要客户端在建立连接之后先发送一个...
  • 文章目录前期准备哨兵模式和集群模式区别单机模式主从模式哨兵模式集群模式 前期准备 centos 7 系统 docker 拉取镜像并且改名 docker pull registry.cn-hangzhou.aliyuncs.com/sasiki/redis:v5 docker tag...
  • Redis 发布订阅 关注频道 ...将redis发布订阅模式用做消息队列rabbitmq的区别: 可靠性 redis :没有相应的机制保证消息的可靠消费,如果发布者发布一条消息,而没有对应的订阅者的话,这条消息将丢...
  • 本文从实际操作的角度,来介绍和讲解下,这几种模式的特点,鉴于篇幅的问题,文章分成两篇,一篇用来介绍:单机模式、主从模式和哨兵模式;本篇文章是,另外一个模式的介绍:集群模式。一、集群模式解决什么问题呢?...
  • Redis

    2021-03-12 00:24:49
    缓存雪崩缓存穿透缓存击穿哨兵模式是什么?起什么作用?持久化方式Redis的数据结构,aofrdb的存储过程,Redis的连接池 应用场景 秒杀、双十一、突发时政要闻、在线人数、单服务器升级集群 是一个内存数据库,读写...
  • cluster-enabled yes(启动集群模式) cluster-config-file nodes9001.conf(9001port要对应) cluster-node-timeout 15000 appendonly yes (aof配置) 剩下5个修改端口号即可 由于 Redis 集群需要使用 ...
  • 深入理解Redis

    千次阅读 2020-05-19 00:27:33
    文章目录为什么要用RedisRedis的线程模型redis memcached 的区别多路I/O复用(epoll)单线程模型单线程高效原因Redis的五种数据结构各种数据结构及使用场景Redis的底层数据结构Redis五大数据类型的实现原理Redis...
  • Redis常见的架构模式(1) 单机模式(2) 主从复制模式(3) 哨兵模式(4) 集群模式9. Redis如何实现分布式锁10. 缓存使用场景11. 常用的缓存使用模式12. 什么是缓存穿透13. 什么是缓存击穿14. 什么是缓存雪崩15. 连接...
  • 写在前面的话:对于redis来说,它有四种部署模式,分别是单机模式、主从模式、哨兵模式和集群模式,他们的使用场景有些区别,当然也是越来越复杂,可靠性越来越高。本文从实际操作的角度,来介绍...
  • 文章目录异常类型概念与分析雪崩概念处理方案穿透概念缓存击穿的区别处理方案 异常类型 雪崩 穿透 高并发 概念与分析 ...redis Sentinel(哨兵模式)+redis集群实现redis的高可用。 限流降级...
  • Redis其他知识点一、Redis持久化方式1.1 什么是Redis持久化1.2 Redis 持久化存储方式1.2.1 RDB持久化1.2.2 AOF持久化1.2.3 AOF与RDB区别RDB:AOF:二、Redis主从复制复制的过程原理当主Redis宕机时三、Redis哨兵模式...
  • 面试题 文档:面试题:redis 链接:笔记 179.redis 是什么?...181.redis memecache 有什么区别? https://www.sohu.com/a/234779580_130419 相同点:内存数据库 不同点: 数据类型上来看: meme
  • 9.21 有赞 二面 介绍实习情况 ...Redis集群模式 哨兵挂了怎么办(所以哨兵应该也是集群) Redis集群选举master过程(这个不会,说了MySQL集群的选主过程) MQ是怎么防止消息丢失的 介绍一下线程池
  • 缓存相关

    2019-12-13 11:25:42
    缓存相关 redismemcached的区别。 redis支持哪些数据结构。 ... redis是单线程的么,所有的工作都是单线程么... redis的哨兵模式,一个key值如何在redis集群中找到存储在哪里。 redis持久化策略。 ...
  • 4.redis集群部署的几种模式 5.redis哪几种数据类型 6.redis的hash数据类型的底层实现 7.redis哨兵模式的工作机制 8.分布式场景下实现唯一订单号 9.分布式锁的理解运用 10.zookeeper调优 11.zookeepereureka的...
  • 疏漏总结(八)

    2020-04-19 20:44:40
    1、密集索引和稀疏索引的区别 密集索引文件中的搜索码...详情见此篇文章,Pipeline及主从同步模式和哨兵模式 4、DNS解析的流程 5、TCP三次握手过程是否传输数据 6、Spring中的设计模式 7、Spring Bean生命周期 8、...
  • 第01节、Vector与ArrayList区别和HasTable与HasMap线程安全源码分析 第02节、ConcurrentHashMap原理分析 第03节、CountDownLatch用法 第04节、CyclicBarrier用法 第05节、Semaphore信号量 第06节、并发队列...

空空如也

空空如也

1 2
收藏数 35
精华内容 14
关键字:

redis集群模式和哨兵模式区别

redis 订阅