Redis 基础知识笔记-高可用

集群的演进:

1.主从

一个主多个从, 当主节点 出现问题,需要人工切换到从

缺点:1 需要人工切换,无法实时监控切换; 2. 主节点故障会导致数据丢失无法恢复  3.主从内存的内容都是一样,降低可用性

优点:1, 主从可以实现读写分离,降低主节点压力 2. 当多个从的时候可以实现从从复制,只需要有一个从节点连接主节点做同步

2.哨兵模式

master宕机,哨兵会自动选举master并将其他的slave指向新的master。在主从模式下,redis同时提供了哨兵命令redis-sentinel,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵进程向所有的redis机器发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。 哨兵也可以做集群

  2.1 哨兵模式的工作 

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

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

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

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

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

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

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

优点

  • 哨兵模式是基于主从模式的,所有主从的优点,哨兵模式都具有。
  • 主从可以自动切换,系统更健壮,可用性更高。

缺点

  • 具有主从模式的缺点,每台机器上的数据是一样的,内存的可用性较低。
  • Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。

3 集群模式

Redis的集群模式本身没有使用一致性hash算法,而是使用slots插槽

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

运行机制:

在 Redis 的每一个节点上,都有这么两个东西,一个是插槽(slot),它的的取值范围是:0-16383,可以从上面redis-trib.rb执行的结果看到这16383个slot在三个master上的分布。还有一个就是cluster,可以理解为是一个集群管理的插件,类似的哨兵。

当我们的存取的 Key到达的时候,Redis 会根据 crc16的算法对计算后得出一个结果,然后把结果和16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

当数据写入到对应的master节点后,这个数据会同步给这个master对应的所有slave节点。

为了保证高可用,redis-cluster集群引入了主从模式,一个主节点对应一个或者多个从节点。当其它主节点ping主节点master 1时,如果半数以上的主节点与master 1通信超时,那么认为master 1宕机了,就会启用master 1的从节点slave 1,将slave 1变成主节点继续提供服务。(必须有3个主节点,这样才能保证一个主节点挂了,剩下两个主节点能以超过半数以上的同意,推荐奇数个主节点

如果master 1和它的从节点slave 1都宕机了,整个集群就会进入fail状态,因为集群的slot映射不完整。如果集群超过半数以上的master挂掉,无论是否有slave,集群都会进入fail状态。

redis-cluster采用去中心化的思想,没有中心节点的说法,客户端与Redis节点直连,不需要中间代理层,客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

集群模式的优缺点

优点

采用去中心化思想,数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布;可扩展性:可线性扩展到 1000 多个节点,节点可动态添加或删除;

高可用性:部分节点不可用时,集群仍可用。通过增加 Slave 做 standby 数据副本,能够实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave 到 Master 的角色提升;

降低运维成本,提高系统的扩展性和可用性。

缺点

1.Redis Cluster是无中心节点的集群架构,依靠Goss协议(谣言传播)协同自动化修复集群的状态

但 GosSIp有消息延时和消息冗余的问题,在集群节点数量过多的时候,节点之间需要不断进行 PING/PANG通讯,不必须要的流量占用了大量的网络资源。虽然Reds4.0对此进行了优化,但这个问题仍然存在。

2.数据迁移问题

Redis Cluster可以进行节点的动态扩容缩容,这一过程,在目前实现中,还处于半自动状态,需要人工介入。在扩缩容的时候,需要进行数据迁移。

而 Redis为了保证迁移的一致性,迁移所有操作都是同步操作,执行迁移时,两端的 Redis均会进入时长不等的阻塞状态,对于小Key,该时间可以忽略不计,但如果一旦Key的内存使用过大,严重的时候会接触发集群内的故障转移,造成不必要的切换。

总结

主从模式:master节点挂掉后,需要手动指定新的master,可用性不高,基本不用。

哨兵模式:master节点挂掉后,哨兵进程会主动选举新的master,可用性高,但是每个节点存储的数据是一样的,浪费内存空间。数据量不是很多,集群规模不是很大,需要自动容错容灾的时候使用。

集群模式:数据量比较大,QPS要求较高的时候使用。 Redis Cluster是Redis 3.0以后才正式推出,时间较晚,目前能证明在大规模生产环境下成功的案例还不是很多,需要时间检验。

集群会出现的一些问题:

1. 网络抖动:
   1.在集群中,网络抖动指主节点在短时间内连接不上,会出现选举新的主节点。如果一会马上又恢复了然后又出现网络抖动,这样会产生频繁的选举切换。设置一 个可以合适的time-out 时间,可以防止频繁切换。

  2.主节点一定不能设置宕机马上重启,一般情况下,集群实现读写分离,主节点是不做备份,只负责写,当宕机马上重启就主节点中没人任何内容,然而同步到子节点,就会把子节点的内容都删除了。 所以宕机后,就让集群先选出主节点,再尝试启动原先宕机的主节点。

2.  数据倾斜/访问倾斜

特别是针对cluster 集群模式会出现数据倾斜问题

数据倾斜的原因:

1. 存在bigkey

- 业务层避免bigkey

- 将集合类型的bigkey拆分为多个小集合

2. slot手工分配不均 (每个redis slave分配槽数量不平均)

3. hashtag 导致数据分配到同一个slot

- 避免使用hashtag

访问倾斜的原因:

1. 存在热点数据

- 如果是只读数据,可以使用多副本 key+随机值使数据分配到不同的实例中 或者存储在二级缓存 比如jvm缓存中

- 如果是读写数据, 增加实例配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis从入门到高可用 分布式实战教程,共140多节课程、 掌握redis主从、哨兵、集群 ,参数调优 目录: 9-9 原生安装-1.准备节点.mp4 9-8 原生安装.mp4 9-7 基本架构.mp4 9-6 虚拟槽哈希分布.mp4 9-5 一致性哈希分区.mp4 9-4 节点取余分区.mp4 9-3 数据分布概论.mp4 9-2 呼唤集群.mp4 9-16 原生命令和redis-trib.rb对比.mp4 9-14 ruby环境准备-操作.mp4 9-13 ruby环境准备-说明.mp4 9-12 原生安装-4.分配主从.mp4 9-10 原生安装-2.节点握手.mp4 9-1 本章目录.mp4 8-9 实现原理-1-故障转移演练.mp4 8-8 python客户端.mp4 8-7 java客户端.mp4 8-6 redis sentinel安装演示-2.mp4 8-5 redis sentinel安装演示-1.mp4 8-4 redis sentinel安装与配置.mp4 8-3 redis sentinel架构.mp4 8-2 主从复制高可用?.mp4 8-19 本章总结.mp4 8-18 高可用读写分离.mp4 8-17 节点运维.mp4 8-16 常见开发运维问题-目录.mp4 8-15 故障转移.mp4 8-14 领导者选举.mp4 8-13 主观下线和客观下线.mp4 8-12 三个定时任务.mp4 8-11 实现原理-3.故障演练(日志分析).mp4 8-10 实现原理-2.故障转移演练(客户端).mp4 8-1 sentinel-目录.mp4 7-9 主从复制常见问题.mp4 7-8 故障处理.mp4 7-7 全量复制开销 + 部分复制.mp4 7-6 全量复制.mp4 7-5 runid和复制偏移量.mp4 7-4 主从复制配置-操作.mp4 7-3 主从复制配置-介绍.mp4 7-2 什么是主从复制.mp4 7-1 目录.mp4 6-4 AOF阻塞.mp4 6-3 子进程开销和优化.mp4 6-2 fork.mp4 6-1 常见问题目录.mp4 5-9 RDB和AOF抉择.mp4 5-8 AOF实验.mp4 5-7 AOF(2).mp4 5-6 AOF(1).mp4 5-5 RDB(3).mp4 5-4 RDB(2).mp4 5-3 RDB(1).mp4 5-2 持久化的作用.mp4 5-1 目录.mp4 4-7 geo.mp4 4-6 hyperloglog.mp4 4-5 bitmap.mp4 4-4 发布订阅.mp4 4-3 pipeline.mp4 4-2 慢查询.mp4 4-1 课程目录.mp4 3-4 Go客户端:redigo简介.mp4 3-3 Python客户端:redis-py.mp4 3-2 Java客户端:Jedis.mp4 3-1 课程目录.mp4 2-9 list(2).mp4 2-8 list(1).mp4 2-7 hash (2).mp4 2-6 hash (1).mp4 2-5 字符串.mp4 2-4 单线程.mp4 2-3 数据结构和内部编码.mp4 2-2通用命令.mp4 2-11 zset.mp4 2-10 set.mp4 13-1 _课程总结.mp4 12-7 运维功能.mp4 12-6 用户功能.mp4 12-5 应用接入.mp4 12-4 机器部署.mp4 12-3 _快速构建.mp4 12-2 _Redis规模化困扰.mp4 12-1 _目录.mp4 11-8 本章总结.mp4 11-7 热点key的重建优化.mp4 11-6 无底洞问题.mp4 11-5 缓存穿透问题.mp4 11-4 缓存粒度问题.mp4 11-3 缓存的更新策略.mp4 11-2 缓存的受益和成本.mp4 11-1 目录.mp4 10-9 集群缩容-操作.mp4 10-8 集群缩容-说明.mp4 10-7 集群扩容演示-2.mp4 10-6 集群扩容演示-1.mp4 10-5 扩展集群-3.迁移槽和数据.mp4 10-4 扩展集群-2.加入集群.mp4 10-35 本章总结.mp4 10-34 集群vs单机.mp4 10-33 数据迁移.mp4 10-32 读写分离.mp4 10-31 请求倾斜.mp4 10-30 数据倾斜.mp4 10-3 扩展集群-1.加入节点.mp4 10-29 集群倾斜-目录.mp4 10-28 PubSub广播.mp4 10-27 带宽消耗.mp4 10-26 集群完整性.mp4 10-25 Redis Cluster常见开发运维问题-目录.mp4 10-24 故障模拟.mp4 10-23 故障恢复.mp4 10-22 故障发现.mp4 10-21 故障转移-目录.mp4 10-20 批量操作优化.mp4 10-2 集群伸缩原理.mp4 10-19 多节点操作命令.mp4 10-18 整合spring-2.mp4 10-17 整合spring-1.mp4 10-16 JedisCluster基本使用.mp4 10-15 smart客户端JedisCluster-目录.mp4 10-14 JedisCluster执行源码分析.mp4 10-13 smart客户端实现原理.mp4 10-12 ask重定向.mp4 10-11 moved异常说明和操作.mp4 10-10 客户端路由-目录.mp4 10-1 集群伸缩目录.mp4 1-9 特性5-功能丰富.mp4 1-8 特性4-多语言客户端.mp4 1-7 特性3-数据结构.mp4 1-6 特性2-持久化.mp4 1-5 特性1-速度快.mp4 1-4 redis特性目录.mp4 1-3 谁在使用Redis.mp4 1-2 Redis初识.mp4 1-15 redis常用配置.mp4 1-14 redis三种启动方式介绍.mp4 1-13 redis典型使用场景.mp4 1-12 特性8-高可用分布式.mp4 1-11 特性7-复制.mp4 1-10 特性6-简单.mp4 1-1 导学.mp4

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值