精华内容
下载资源
问答
  • Redis集群三种方式

    2020-07-03 19:31:08
    三种模式 主从模式 哨兵模式 Cluster模式 主从模式 为什么要用主从复制 单机redis的风险与问题 问题一:机器故障 硬盘故障,系统崩溃 本质:数据丢失,可能对业务造成灾难性打击 问题二:容

    为什么要有集群

    单个Redis存在不稳定性,当Redis服务宕机或硬盘故障,系统崩溃之后,就没有可用的服务了,还会造成数据的丢失
    单个Redis的读写能力也是有限的
    还由于互联网的三高架构,高并发,高性能,高可用

    概念

    通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定,高效的状态

    三种模式

    • 主从模式
    • 哨兵模式
    • Cluster模式

    主从模式

    在这里插入图片描述

    为什么要用主从复制

    单机redis的风险与问题

    问题一:机器故障

    • 硬盘故障,系统崩溃
    • 本质:数据丢失,可能对业务造成灾难性打击

    问题二:容量瓶颈

    • 内存不足,一台redis内存是有限的

    解决方案:

    为了避免单点Redis服务器故障,准备多台服务器,互相联通,将数据复制多个副本保存在不同服务器上,连接在一起,并保证数据是同步的,即使有其中一台服务器宕机,其他服务器依然可以继续提供服务,实现Redis的高可用,同时实现数据冗余备份

    特征

    • 一个master可以拥有多个slave,一个slave只对应一个master
    • 主从复制即将master中的数据及时,有效的复制到slave中

    职责

    master

    • 写数据
    • 执行写操作时,将出现变化的数据自动同步到slave
      slave:
    • 读数据,禁止写数据

    作用

    • 读写分离:master写,slave度,提高服务器的读写负载能力
    • 负载均衡:基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数据,通过多个结点分担数据读取负载,大大提高Redis服务器并发量与数据吞吐量
    • 故障恢复:当master出现问题时,由slave提供服务,实现快速的故障恢复
    • 数据冗余:实现数据热备份,是持久化之外的一种数据冗余方式
    • 高可用基石:基于主从复制,构建哨兵模式与集群,实现Redis的高可用方案

    工作流程

    分三个阶段

    • 建立连接阶段-建立slave到master的连接,使master能够识别slave,并保存slave端口号
    • 数据同步阶段-在slave初次连接master后,复制master中的所有数据到slave
    • 命令传播阶段-当master数据库状态被修改后,导致主从服务器数据库状态不一致,此时需要让主从数据同步到一致的 状态

    建立连接阶段

    在这里插入图片描述

    数据同步阶段

    要想了解这一阶段,先了解这几个知识点:复制缓冲区

    复制缓冲区

    复制缓冲区,又名复制积压缓冲区,是一个先进先出的队列,用于存储服务器执行过的命令,每次传播命令,master都会将传播的命令记录下来,并存储在复制缓冲区
    工作原理
    组成:

    • 偏移量(offset),用来记录已发送的信息对应的偏移量,作为下次发送信息的坐标依据
    • 字节值,存放的用户的操作命令
      原理:
      通过偏移量区分不同的slave当前数据传播的差异(每个slave可能接受到master的命令的数量还不一样)
      总结
      复制缓冲区存的是全量复制之后的用户的一些操作,因为rdb不是实时的,需要有一个地方存储在全量复制更新期间,用户的一些操作命令,全量复制之后,这些命令都会发到slave,但不是一次性全发过去,而是有一定的规则去发,分好几次发送,每次都会记录命令发到了哪个位置,下回发送就从这个地方发送

    在这里插入图片描述

    注意事项
    • 如果master数据量巨大,数据同步阶段应避开流量高峰期,避免造成master阻塞,影响业务正常执行
    • 复制缓冲区大小设定不合理,会导致数据溢出。如进行全量复制周期太长,进行部分复制时发现数据已经存在丢失的清空,必须进行第二次全量复制
    • master单机内存占用主机内存的比例不应过大,建议使用50%-70%的内存,留下30%-50%的内存用于执行bgsave命令和创建复制缓冲区

    命令传播阶段

    要想了解这一阶段,先了解这几个知识点:复制缓冲区、服务器运行ID、心跳机制

    服务器运行ID

    服务器运行ID是每一台服务器每次运行的身份识别码,一台服务器多次运行可以生成多个运行id
    组成:运行id由40位字符组成,是一个随机的十六进制字符 例如:fdc9ff13b9bbaab28db42b3d50f852bb5e3fcdce
    作用:运行id被用于在服务器间进行传输,识别身份 如果想两次操作均对同一台服务器进行,必须每次操作携带对应的运行id,用于对方识别
    实现方式:运行id在每台服务器启动时自动生成的,master在首次连接slave时,会将自己的运行ID发 送给slave,slave保存此ID,通过info Server命令,可以查看节点的runid

    心跳机制

    进入命令传播阶段候,master与slave间需要进行信息交换,使用心跳机制进行维护,实现双方连接保持在
    master心跳:

    • 指令:PING
    • 周期:由repl-ping-slave-period决定,默认10秒
    • 作用:判断slave是否在线
    • 查询:INFO replication 获取slave最后一次连接时间间隔,lag项维持在0或1视为正常
      slave心跳任务
    • 指令:REPLCONF ACK {offset}
    • 周期:1秒
    • 作用1:汇报slave自己的复制偏移量,获取最新的数据变更指令
    • 作用2:判断master是否在线

    在这里插入图片描述

    常见问题
    • master数据巨大的时候,一旦master重启,runid将会发生变化,会导致全部的slave的全量复制操作
    • 复制缓冲区过小,断网后slave的offset越界,触发全量复制

    总结

    • 主数据库可以进行读写操作,当读写操作导致数据变化时会自动将数据同步给从数据库
    • 从数据库一般都是只读的,并且接收主数据库同步过来的数据
    • 一个master可以拥有多个slave,但是一个slave只能对应一个master
    • slave挂了不影响其他slave的读和master的读和写,重新启动后会将数据从master同步过来
    • master挂了以后,不影响slave的读,但redis不再提供写服务,master重启后redis将重新对外提供写服务
    • master挂了以后,不会在slave节点中重新选一个master,只能手动的一个一个改,不合适,就有了之后的哨兵

    哨兵模式

    在这里插入图片描述

    哨兵(sentinel)是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master

    为什么有哨兵

    主机宕机,如何能够高可用的恢复正常,不用人为进行干预

    作用

    • 监控
      • 不断地检查master和slave是否正常运行
      • master存活检测,master与slave运行清空检测
    • 通知(提醒)
      • 当被监控地服务器出现问题时,向其他(哨兵、客户端)发送通知
    • 自动故障转移
      • 断开master与slave连接,选取一个slave作为master,将其他slave连接到新地master,并告知客户端新地服务器地址

    注意:

    • 哨兵也是一台redis服务器,只是不提供数据服务
    • 通常哨兵配置数量为单数

    工作原理博客

    Cluster

    redis最开始使用主从模式做集群,若master宕机需要手动配置slave转为master;后来为了高可用提出来哨兵模式,该模式下有一个哨兵监视master和slave,若master宕机可自动将slave转为master,但它也有一个问题,就是不能动态扩充,哨兵模式还是只有一个master;所以在3.x提出cluster集群模式。

    在这里插入图片描述

    redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。
    那么redis 是如何合理分配这些节点和数据的呢?
    Redis 集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384。

    在redis-cluster架构中,redis-master节点一般用于接收读写,而redis-slave节点则一般只用于备份,其与对应的master拥有相同的slot集合,若某个redis-master意外失效,则再将其对应的slave进行升级为临时redis-master。

    redis-cluster集群详细博客1
    redis-cluster集群详细博客2

    展开全文
  • 关注我,你的眼睛会怀孕一、常见使用方式Redis 的几常见使用方式包括:Redis 单副本Redis 多副本(主从)Redis Sentinel(哨兵)Redis ClusterRedis 自研二、各种使用方式的优缺点1、Redis 单副本Redis 单副本,采用...

    关注我,你的眼睛会怀孕

    8b56a608039d8b3d0ea51fdbf9a665a2.png

    29e16fdca033c5d3c0ecf44b43ebd873.png

    一、常见使用方式

    Redis 的几种常见使用方式包括:

    • Redis 单副本

    • Redis 多副本(主从)

    • Redis Sentinel(哨兵)

    • Redis Cluster

    • Redis 自研

    二、各种使用方式的优缺点

    1、Redis 单副本

    2308ad1b27d77cff030994057e1e7b80.gif

    Redis 单副本,采用单个 Redis 节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数据可靠性要求不高的纯缓存业务场景。

    6190a379a689069329ba413596c9ebce.png 

    优点:

    架构简单,部署方便;

    高性价比:缓存使用时无需备用节点(单实例可用性可以用 supervisor 或 crontab 保证),当然为了满足业务的高可用性,也可以牺牲一个备用节点,但同时刻只有一个实例对外提供服务;

    高性能。

    缺点:

    不保证数据的可靠性;

    在缓存使用,进程重启后,数据丢失,即使有备用的节点解决高可用性,但是仍然不能解决缓存预热问题,因此不适用于数据可靠性要求高的业务;

    高性能受限于单核 CPU 的处理能力(Redis 是单线程机制),CPU 为主要瓶颈,所以适合操作命令简单,排序、计算较少的场景。也可以考虑用 Memcached 替代。

    2、Redis 多副本(主从)

    2308ad1b27d77cff030994057e1e7b80.gif

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

    b3188d35eb18c86137bb2fc43fd681d6.png 

    优点:

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

    读写分离策略:从节点可以扩展主库节点的读能力,有效应对大并发量的读操作。

    缺点:

    故障恢复复杂,如果没有 RedisHA 系统(需要开发),当主库节点出现故障时,需要手动将一个从节点晋升为主节点,同时需要通知业务方变更配置,并且需要让其它从库节点去复制新主库节点,整个过程需要人为干预,比较繁琐;

    主库的写能力受到单机的限制,可以考虑分片;

    主库的存储能力受到单机的限制,可以考虑 Pika;

    原生复制的弊端在早期的版本中也会比较突出,如:Redis 复制中断后,Slave 会发起 psync,此时如果同步不成功,则会进行全量同步,主库执行全量备份的同时可能会造成毫秒或秒级的卡顿;又由于 COW 机制,导致极端情况下的主库内存溢出,程序异常退出或宕机;主库节点生成备份文件导致服务器磁盘 IO 和 CPU(压缩)资源消耗;发送数 GB 大小的备份文件导致服务器出口带宽暴增,阻塞请求,建议升级到最新版本。

    3、Redis Sentinel(哨兵)

    2308ad1b27d77cff030994057e1e7b80.gif

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

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

    cfde64e57ee32349c8f44c0286985e3d.png 
    805cda906d5f03781f1c0d7d85232a5a.png 

    优点:

    Redis Sentinel 集群部署简单;

    能够解决 Redis 主从模式下的高可用切换问题;

    很方便实现 Redis 数据节点的线形扩展,轻松突破 Redis 自身单线程瓶颈,可极大满足 Redis 大容量或高性能的业务需求;

    可以实现一套 Sentinel 监控一组 Redis 数据节点或多组数据节点。

    缺点:

    部署相对 Redis 主从模式要复杂一些,原理理解更繁琐;

    资源浪费,Redis 数据节点中 slave 节点作为备份节点不提供服务;

    Redis Sentinel 主要是针对 Redis 数据节点中的主节点的高可用切换,对 Redis 的数据节点做失败判定分为主观下线和客观下线两种,对于 Redis 的从节点有对节点做主观下线操作,并不执行故障转移。

    不能解决读写分离问题,实现起来相对复杂。

    建议:

    如果监控同一业务,可以选择一套 Sentinel 集群监控多组 Redis 数据节点的方案,反之选择一套 Sentinel 监控一组 Redis 数据节点的方案。

    sentinel monitor配置中的建议设置成 Sentinel 节点的一半加 1,当 Sentinel 部署在多个 IDC 的时候,单个 IDC 部署的 Sentinel 数量不建议超过(Sentinel 数量 – quorum)。

    合理设置参数,防止误切,控制切换灵敏度控制:

    a. quorum

    b. down-after-milliseconds 30000

    c. failover-timeout 180000

    d. maxclient

    e. timeout

    部署的各个节点服务器时间尽量要同步,否则日志的时序性会混乱。

    Redis 建议使用 pipeline 和 multi-keys 操作,减少 RTT 次数,提高请求效率。

    自行搞定配置中心(zookeeper),方便客户端对实例的链接访问。

    4、Redis Cluster

    2308ad1b27d77cff030994057e1e7b80.gif

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

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

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

    c0cfb41a3bc882e8cef3f3a3f7f2aa39.png 

    优点:

    无中心架构;

    数据按照 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 产生的场景。

    5、Redis 自研

    2308ad1b27d77cff030994057e1e7b80.gif

    Redis 自研的高可用解决方案,主要体现在配置中心、故障探测和 failover 的处理机制上,通常需要根据企业业务的实际线上环境来定制化。

    51789ca6d0b2ccd043f96f55c2b6868d.png 
    c981e46debdc12d382dcfd8759bb40eb.png 

    优点:

    高可靠性、高可用性;

    自主可控性高;

    贴切业务实际需求,可缩性好,兼容性好。

    缺点:

    实现复杂,开发成本高;

    需要建立配套的周边设施,如监控,域名服务,存储元数据信息的数据库等;

    维护成本高。

    来源:https://stor.51cto.com/art/201910/604653.htm#topx

    年度热文

    f333b9e5ab28a9cba610ce0d67880796.png

    【必看】一次心惊肉跳的服务器入侵排查....

    【必看】IT行业常用专业术语,你get到了吗?

    【必看】网络工程师技能图谱,这些你都会吗?

    【干货】服务器性能优化的8种常用方法

    【干货】网工常见面试题集锦(一)

    【收藏】网工常见面试题集锦(二)

    【必看】这些Linux命令能解决95%以上的问题

    【必看】超全Linux工作规划线路图

    【必看】网工面试必答问题,看完OFFER轻松拿

    【干货】华为交换机端口vlan详解

    【干货】什么样的网络需要划分VLAN?

    【干货】组播原理协议讲解

    【收藏】网络故障处理手册大全,看完再也不怕出问题了



    e85f58096fe6d8a3cddd1e1db83a8b42.png

    系统集成/认证培训

    买设备,找我们

    IT维保,找我们

    IT培训,找我们

    展开全文
  • 为了避免单点Redis服务器故障,准备多台服务器,互相...redis包含三种集群策略主从复制哨兵集群1、主从复制主数据库可以进行读写操作,当读写操作导致数据变化时会自动将数据同步给从数据库从数据库一般都是只读的,...

    5811e8e4cf911dad853d5e1f745815a7.png

    为了避免单点Redis服务器故障,准备多台服务器,互相连通。将数据复制多个副本保存在不同的服务器上,连接在一起,并保证数据是同步的。即使有其中一台服务器宕机,其他服务器依然可以继续提供服务,实现Redis的高可用,同时实现数据冗余备份。

    redis包含三种集群策略

    • 主从复制

    • 哨兵

    • 集群

    1、主从复制

    主数据库可以进行读写操作,当读写操作导致数据变化时会自动将数据同步给从数据库
    从数据库一般都是只读的,并且接收主数据库同步过来的数据

    特征:一个master可以拥有多个slave,一个slave只对应一个master

    职责:

    • master:

    • 写数据

    • 执行写操作时,将出现变化的数据自动同步到slave

    • 读数据(可忽略)

    • slave:

      • 读数据

      • 写数据(禁止)

    主从复制的作用

    • 读写分离:master写、slave读,提高服务器的读写负载能力

    • 负载均衡:基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数量,通过多个从节点分担数据读取负载,大大提高Redis服务器并发量与数据吞吐量

    • 故障恢复:当master出现问题时,由slave提供服务,实现快速的故障恢复

    • 数据冗余:实现数据热备份,是持久化之外的一种数据冗余方式

    • 高可用基石:基于主从复制,构建哨兵模式与集群,实现Redis的高可用方案

    主从复制原理

    • 从服务器连接主服务器,发送SYNC命令;

    • 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;

    • 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;

    • 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;

    • 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;

    • 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;(从服务器初始化完成)

    • 主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令(从服务器初始化完成后的操作)

    主从复制工作机制

    主从复制过程大体可以分为3个阶段

    1. 建立连接阶段(即准备阶段)

    建立slave到master的连接,使master能够识别slave,并保存slave端口号

    1. 数据同步阶段

      在slave初次连接master后,复制master中的所有数据到slave

      将slave的数据库状态更新成master当前的数据库状态

    2. 命令传播阶段

      当master数据库状态被修改后,导致主从服务器数据库状态不一致,此时需要让主从数据同步到一致的状态,同步的动作称为命令传播,master将接收到的数据变更命令发送给slave,slave接收命令后执行命令

    c288e960decb355570db71dad4d301b0.png

    建立连接阶段

    f815001a21cb0d8dbc1a7538560a40d3.png

    数据同步阶段

    ea730b260681fd8fe5c68c9a4cb8040d.png

    命令传播阶段

    命令传播阶段的部分复制

    • 命令传播阶段出现了断网现象

    • 网络闪断闪连------------------------忽略

    • 短时间网络中断---------------------部分复制

    • 长时间网络中断----------------------全量复制

    部分复制的三个核心要素

    1. 服务器运行ID(runid)

      概念:服务器运行ID是每一台服务器每次运行的身份识别码,一台服务器多次运行可以生成多个运行id

      组成:运行id由40位字符组成,是一个随机的十六进制字符

      例如:fdc9ff13b9bbaab28db42b3d50f852bb5e3fcdce

      作用:运行id被用于在服务器间进行传输,识别身份

      如果想两次操作均对同一台服务器进行,必须每次操作携带对应的运行id,用于对方识别

      实现方式:运行id在每台服务器启动时自动生成的,master在首次连接slave时,会将自己的运行ID发送给slave,slave保存此ID,通过info Server命令,可以查看节点的runid

    2. 复制缓冲区

      概念:复制缓冲区,又名复制积压缓冲区,是一个先进先出(FIFO)的队列,用于存储服务器执行过的命令,每次传播命令,master都会将传播的命令记录下来,并存储在复制缓冲区

      复制缓冲区默认数据存储空间大小是1M,由于存储空间大小是固定的,当入队元素的数量大于队列长度时,最先入队的元素会被弹出,而新元素会被放入队列

      由来:每台服务器启动时,如果开启有AOF或被连接成为master节点,即创建复制缓冲区

      作用:用于保存master收到的所有指令(仅影响数据变更的指令,例如set,select)

      数据来源:当master接收到主客户端的指令时,除了将指令执行,会将该指令存储到缓冲区中

    3. 主从服务器复制偏移量(offset)

      概念:一个数字,描述复制缓冲区中的指令字节位置

      分类

      数据来源

      作用:同步信息,比对master与slave的差异,当slave断线后,恢复数据使用

    • master端:发送一次记录一次

    • slave端:接收一次记录一次

    • master复制偏移量:记录发送给所有slave的指令字节对应的位置(多个)

    • slave复制偏移量:记录slave接收master发送过来的指令字节对应的位置(一个)

    79fc079c663d787ff2499c9ebed1ec1e.png

    心跳机制

    进入命令传播阶段候,master与slave间需要进行信息交换,使用心跳机制进行维护,实现双方连接保持在线

    master心跳

    • 指令:PING

    • 周期:由repl-ping-slave-period决定,默认10秒

    • 作用:判断slave是否在线

    • 查询:INFO replication

      获取slave最后一次连接时间间隔,lag项维持在0或1视为正常

    slave心跳任务

    • 指令:REPLCONF ACK

    • 周期:1秒

    • 作用1:汇报slave自己的复制偏移量,获取最新的数据变更指令

    • 作用2:判断master是否在线

    主从复制常见问题

    频繁的全量复制(1)

    伴随着系统的运行,master的数据量会越来越大,一旦master重启,runid将发生变化,会导致全部slave的全量复制操作

    内部优化调整方案

    作用:本机保存上次runid,重启后恢复该值,使所有slave认为还是之前的master

    1. master内部创建master_replid变量,使用runid相同的策略生成,长度41位,并发送给所有slave

    2. 在master关闭时执行命令 shutdown save,进行RDB持久化,将runid与offset保存到RDB文件中

    • repl-id repl-offset

    • 通过redis-check-rdb命令可以查看该信息

    master重启后加载RDB文件,恢复数据

    重启后,将RDB文件中保存的repl-id与repl-offset加载到内存中

    • master_repl_id = repl master_repl_offset = repl-offset

    • 通过info命令可以查看该信息

    频繁的全量复制(2)

    • 问题现象

      网络环境不佳,出现网络中断,slave不提供服务

    • 问题原因

    复制缓冲区过小,断网后slave的offset越界,触发全量复制

    • 最终结果

      slave反复进行全量复制

    • 解决方案

      修改复制缓冲区大小

      repl-backlog-size

    • 建议设置如下

      测算从master到slave的重连平均时长second

      获取master平均每秒产生写命令数据总量write_size_per_second

      最优复制缓冲区空间 = 2 * second * write_size_per_second

    频繁的网络中断(1)

    • 问题现象

      master的CPU占用过高 或 slave频繁断开连接

    • 问题原因

      1、slave每1秒发送REPLCONF ACK命令到master

      2、当slave接到了慢查询时(keys * ,hgetall等),会大量占用CPU性能

      3、master每1秒调用复制定时函数replicationCron(),比对slave发现长时间没有进行响应

    • 最终结果

      master各种资源(输出缓冲区、带宽、连接等)被严重占用

    • 解决方案

    通过设置合理的超时时间,确认是否释放slave

    repl-timeout 该参数定义了超时时间的阈值(默认60秒),超过该值,释放slave

    频繁的网络中断(2)

    • 问题现象

      slave与master连接断开

    • 问题原因

    master发送ping指令频度较低、master设定超时时间较短、ping指令在网络中存在丢包

    • 解决方案

      提高ping指令发送的频度

      repl-ping-slave-period超时时间repl-time的时间至少是ping指令频度的5到10倍,否则slave很容易判定超时

    数据不一致

    • 问题现象

      多个slave获取相同数据不同步

    • 问题原因

      网络信息不同步,数据发送有延迟

    • 解决方案

      优化主从间的网络环境,通常放置在同一个机房部署,如使用阿里云等云服务器时要注意此现象

      监控主从节点延迟(通过offset)判断,如果slave延迟过大,暂时屏蔽程序对该slave的数据访问

      slave-serve-stale-data yes|no开启后仅响应info、slaveof等少数命令(慎用,除非对数据一致性要求很高)

    2、哨兵模式

    当主服务器中断服务后,可以将一个从服务器升级为主服务器,以便继续提供服务,但是这个过程需要人工手动来操作。为此,Redis 2.8中提供了哨兵工具来实现自动化的系统监控和故障恢复功能。

    哨兵的作用就是监控Redis系统的运行状况。它的功能包括以下两个

    (1)监控主服务器和从服务器是否正常运行。
    (2)主服务器出现故障时自动将从服务器转换为主服务器。

    注意

    • 哨兵也是一台redis服务器,只是不提供数据服务

    • 通常哨兵配置数量为单数

    哨兵的工作方式

    • 每个Sentinel(哨兵)进程以每秒钟一次的频率向整个集群中的Master主服务器,Slave从服务器以及其他Sentinel(哨兵)进程发送一个 PING 命令。

    • 如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel(哨兵)进程标记为主观下线(SDOWN)

    • 如果一个Master主服务器被标记为主观下线(SDOWN),则正在监视这个Master主服务器的所有 Sentinel(哨兵)进程要以每秒一次的频率确认Master主服务器的确进入了主观下线状态

    • 当有足够数量的 Sentinel(哨兵)进程(大于等于配置文件指定的值)在指定的时间范围内确认Master主服务器进入了主观下线状态(SDOWN), 则Master主服务器会被标记为客观下线(ODOWN)

    • 在一般情况下, 每个 Sentinel(哨兵)进程会以每 10 秒一次的频率向集群中的所有Master主服务器、Slave从服务器发送 INFO 命令。

    • 当Master主服务器被 Sentinel(哨兵)进程标记为客观下线(ODOWN)时,Sentinel(哨兵)进程向下线的 Master主服务器的所有 Slave从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。

    • 若没有足够数量的 Sentinel(哨兵)进程同意 Master主服务器下线, Master主服务器的客观下线状态就会被移除。若 Master主服务器重新向 Sentinel(哨兵)进程发送 PING 命令返回有效回复,Master主服务器的主观下线状态就会被移除。

    哨兵模式的优缺点

    优点:

    • 哨兵模式是基于主从模式的,所有主从的优点,哨兵模式都具有。

    • 主从可以自动切换,系统更健壮,可用性更高。

    缺点:

    • Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。

    3、Redis-Cluster集群

    edis的哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下每台redis服务器都存储相同的数据,很浪费内存,所以在redis3.0上加入了cluster模式,实现的redis的分布式存储,也就是说每台redis节点上存储不同的内容。

    Redis-Cluster采用无中心结构,它的特点如下

    • 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

    • 节点的fail是通过集群中超过半数的节点检测失效时才生效。

    • 客户端与redis节点直连,不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

    工作方式:

    在redis的每一个节点上,都有这么两个东西,一个是插槽(slot),它的的取值范围是:0-16383。还有一个就是cluster,可以理解为是一个集群管理的插件。当我们的存取的key到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

    为了保证高可用

    redis-cluster集群引入了主从模式,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点。当其它主节点ping一个主节点A时,如果半数以上的主节点与A通信超时,那么认为主节点A宕机了。如果主节点A和它的从节点A1都宕机了,那么该集群就无法再提供服务了。

    展开全文
  • Redis 用过吗?”“用过。”“能谈谈对 Redis 集群的认识吗?”“额……”这是一段真实的面试经历。...Redis 集群方式共有三种:主从模式,哨兵模式, cluster (集群) 模式。下面我们来一起看卡这...

    01bb2e4d9b89a14ebaeb4bc8f6ec59b7.png

    “Redis 用过吗?”

    “用过。”

    “能谈谈对 Redis 集群的认识吗?”

    “额……”

    这是一段真实的面试经历。

    最近,各大互联网公司都开始了裁员,导致大量互联网从业人员又开始了艰辛的求职路。老手自不必说,但对于久在项目里但基本只是使用 Redis 的程序员们来说,估计这问题得难倒一部分人。Redis 集群方式共有三种:主从模式哨兵模式 cluster (集群) 模式。下面我们来一起看卡这三种模式分别是如何工作的吧。

    主从模式

    主从模式是三种集群方式里最简单的。它主要是基于 Redis 的主从复制特性架构的。通常我们会设置一个主节点,N 个从节点。
    62385d30761a8f63a0a4d80dd26087d6.png
    主从模式
    默认情况下,主节点负责处理使用者的 IO 操作,而从节点则会对主节点的数据进行备份,并且也会对外提供读操作的处理。这样做有两个目的:备份数据负载均衡

    1、备份数据

    2、主从模式下,当某一节点损坏时,因为其会将数据备份到其它 Redis 实例上,这样做在很大程度上可以恢复丢失的数据。

    3、负载均衡

    4、主从模式下,主节点和从节点是读写分离的。使用者不仅可以从主节点上读取数据,还可以很方便的从从节点上读取到数据,这在一定程度上缓解了主机的压力。

    当然,从节点也是能够支持写入数据的,只不过从从节点写入的数据不会同步到主节点以及其它的从节点下从以上,我们不难看出 Redis 在主从模式下,必须保证主节点不会宕机 —— 一旦主节点宕机,其它节点不会竞争称为主节点,此时,Redis 将丧失写的能力。这点在生产环境中,是致命的。所以 Redis 为我们引入了另一种集群模式 —— 哨兵模式。

    哨兵模式

    哨兵模式是基于主从模式做的一定变化,它能够为 Redis 提供了高可用性。在实际生产中,服务器难免不会遇到一些突发状况:服务器宕机,停电,硬件损坏等。这些情况一旦发生,其后果往往是不可估量的。而哨兵模式在一定程度上能够帮我们规避掉这些意外导致的灾难性后果。其实,哨兵模式的核心还是主从复制。只不过相对于主从模式在主节点宕机导致不可写的情况下,多了一个竞选机制 —— 从所有的从节点竞选出新的主节点。竞选机制的实现,是依赖于在系统中启动一个 sentinel 进程。
    03a408c27a6229b0d798eede6c5a8376.png
    哨兵模式

    sentinel 特点

    1、监控

    2、它会监听主服务器和从服务器之间是否在正常工作。

    3、通知

    4、它能够通过 API 告诉系统管理员或者程序,集群中某个实例出了问题。

    5、故障转移

    6、它在主节点出了问题的情况下,会在所有的从节点中竞选出一个节点,并将其作为新的主节点。

    7、提供主服务器地址

    8、它还能够向使用者提供当前主节点的地址。这在故障转移后,使用者不用做任何修改就可以知道当前主节点地址。

    就 sentinel 而言,其当然也具备一定集群能力,Redis Sentinel 本身就是一个分布式系统。但 sentinel 集群,和其他的集群有点不一样。sentinel 可以通过发布与订阅来自动发现 Redis 集群上的其它 sentinel。sentinel 在发现其它 sentinel 进程后,会将其放入一个列表中,这个列表存储了所有已被发现的 sentinel。集群中的所有 sentinel 不会并发着去对同一个主节点进行故障转移故障转移只会从第一个 sentinel 开始,当第一个故障转移失败后,才会尝试下一个。当选择一个从节点作为新的主节点后,故障转移即成功了 (而不会等到所有的从节点配置了新的主节点后)。这过程中,如果重启了旧的主节点,那么就会出现无主节点的情况,这种情况下,只能重启集群。当竞选出新的主节点后,被选为新的主节点的从节点的配置信息会被 sentinel 改写为旧的主节点的配置信息。完成改写后,再将新主节点的配置广播给所有的从节点。

    Cluster (集群) 模式

    Cluster (集群) 模式的出现是为了解决 Redis 单机容量有限的问题的。该种模式会将 Redis 中数据按照一定规则划分到多台机器上。这种模式有两个特点:

    1、能够在多个节点之间自动拆分数据集。

    2、当节点的子集遇到故障或无法与群集的其余部分通信时,能够继续操作。

    Redis 集群中有 16384 个散列槽。而 Redis 群集中的每个节点只负责哈希槽的一个子集。

    例如,您可能拥有一个包含 3 个节点的集群,其中:

    • 节点 A 包含从 0 到 5500 的散列槽。

    • 节点 B 包含从 5501 到 11000 的散列槽。

    • 节点 C 包含从 11001 到 16383 的散列槽。

    这允许使用者轻松添加和删除集群中的节点。例如,如果我想添加一个新节点 D,我需要将一些哈希槽从节点 A,B,C 移动到 D. 同样,如果我想从群集中删除节点 A,我只需移动 A 服务的哈希槽。到 B 和 C. 当节点 A 为空时,我可以完全从集群中删除它。因为将哈希槽从一个节点移动到另一个节点不需要停止操作,添加和删除节点,或者更改节点所持有的哈希槽的百分比,所以不需要任何停机时间。

    原文: https://m.toutiaocdn.com/i6678917823957303815


    -END-

    如果看到这里,喜欢这篇文章的话,帮忙"转发"或者点个"在看",行吗?祝你们 2020 暴富。微信搜索「一个优秀的废人」,欢迎关注。

    回复「1024」送你一套完整的 java、python、c++、go、前端、linux、算法、大数据、人工智能、小程序以及英语教程。回复「电子书」送你 50+ 本 java 电子书。

    2827a9fcafddded81096288e29e41c96.png

    展开全文
  • Redis三种集群方式:主从复制,哨兵模式和集群。主从复制主从复制原理从服务器连接主服务器,发送SYNC命令;主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;主...
  • 一、常见使用方式Redis 的几常见使用方式包括:Redis 单副本Redis 多副本(主从)Redis Sentinel(哨兵)Redis ClusterRedis 自研二、各种使用方式的优缺点1、Redis 单副本Redis 单副本,采用单个 Redis 节点部署...
  • 一、常见使用方式Redis 的几常见使用方式包括:Redis 单副本Redis 多副本(主从)Redis Sentinel(哨兵)Redis ClusterRedis 自研二、各种使用方式的优缺点1、Redis 单副本Redis 单副本,采用单个 Redis 节点部署架构...
  • 作者:优知学院原文:https://www.toutiao.com/a6611108111048507908/ 一、常见使用方式Redis 的几常见使用方式包括:Redis 单副本Redis 多副本(主从)Redis Sentinel(哨兵)Redis ClusterRedis 自研二、各种使用...
  • redis三种集群方式 redis三种集群方式:主从复制,哨兵模式和集群。 1.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行...
  • redis集群只要有三种Redis主从:主从又分单副本和多副本,单副本也就是只有主机;多副本也就是常说的主从复制Redis Sentinel(哨兵)Redis Cluster一.Redis主从模式:单机模式:这种单机模式一般只适用于程序员...
  • 的实现方式有3,分别是:1、基于Redis的setnx的操作,给指定的key设置了过期实践;2、基于Redis的数据结构zset,将请求打造成一个zset数组;3、基于Redis的令牌桶算法,输出速率大于输入速率,就要限流。第一:...
  • “Redis用过吗?”“用过。”“能谈谈对Redis集群的认识吗?”“额……”这是一段真实的面试...Redis集群方式共有三种:主从模式,哨兵模式,cluster(集群)模式。下面我们来一起看卡这三种模式分别是如何工作的吧。...
  • 一,集群三种方式 1.1,主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE...
  • 五、集群三种方式 1、主从复制 主从模式是三种模式中最简单的,在主从复制中,数据库分为两类:主数据库(master)和从数据库(slave)。 (1)、特点 ①、主数据库可以进行读写操作,当读写操作导致数据变化时...
  • 作者:大熊聊源码“Redis用过吗?”“用过。”“能谈谈对Redis集群的认识吗?”“额……”这是一段真实的面试经历。最近,各大互联网公司都开始了裁员,导致大量互联网从业人员又开始了...Redis集群方式共有三种:主...
  • 主从复制原理: 当主服务器中断服务后,可以将一个从服务器升级为主服务器,以便继续提供服务,但是这个过程...每个Sentinel(哨兵)进程以每秒钟一次的频率向整个集群中的Master主服务器,Slave从服务器以及其他Sent
  • 0.0 前言NoSQL,泛指非关系型数据库。...打算讨论三种NoSQL数据库。键值类 - Redis列簇类 - HBase文档类 - MongoDBRedis作为NoSQL数据库的第一篇吧。Redis是基于内存的,访问速度快,常被用做缓存...
  • 代码实现:(这里使用的是单机创建多个redis实例来实现) $ mkdir redis-colony //创建集群文件夹 $ cd redis-colony $ mkdir redis01 //创建redis文件夹 $ mkdir redis02 //创建redis文件夹 $ mkdir redis03 //...
  • ​1:前言 说起redis应该没有人会陌生了吧,作为开发中最最最最最最最常用的nosql之一,它的重要性已经体现在上文中了,自从我工作开始,就没有逃离过redis的魔爪,接下来的内容可以说的redis 的核心内容了,这...
  • 近两年微服务架构成为企业应用架构的流行趋势,除了互联网企业,传统企业也纷纷选择拥抱微服务。加之容器Kubernetes、DevOps、...本文主要根据官网文档整理而成,介绍Istio针对单集群三种主流部署安装方式:使用Is...
  • redis实现原理_redis集群三种方式_手把手教你用redis实现一个简单的mq消息队列(java)时间:2020-07-06 21:50:25 来源:网络投稿 编辑:韩信 浏览:次众所周知,消息队列是应用系统中重要的组件,主要解决应用解耦,...
  • redis三种集群方式:主从复制,哨兵模式和集群。1.主从复制主从复制原理:从服务器连接主服务器,发送SYNC命令;主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 462
精华内容 184
关键字:

redis集群三种方式

redis 订阅