当前位置:网站首页>Redis高可用

Redis高可用

2022-08-09 09:05:00 dehuisun

redis高可用常用方案

主从同步

一主多从,主负责写,并且将数据复制到其它的 slave 从节点,slave 从节点负责读。所有的读请求全部走从节点。这样也可以很轻松实现水平扩容,支撑读高并发。

redis replication -> 主从架构 -> 读写分离 -> 水平扩容支撑读高并发

如果采用了主从架构,那么建议必须开启 master node 的持久化,不建议用slave node 作master node 的数据热备,因为那样的话,如果你关掉 master 的持久化,可能在 master 宕机重启的时候数据是空的,然后可能一经过复制, slave node 的数据也丢了。

优点

  • 高可靠性:主从复制提供了基本的数据多节点备份功能, 当主节点发生故障时,可以启用从节点继续提供服务。
  • 读写分离策略:从节点可以扩展主库节点的读能力,有效应对大并发量的读操作。

缺点

  • 无法实现故障的自动切换,当主库节点出现故障时,需要手动将一个从节点晋升为主节点,同时需要通知业务方变更配置,并且需要让其他从库节点去复制新主库节点,整个过程需要人为干预,比较繁琐。
  • 主库的写能力受到单机的限制,可以考虑分片。
  • 存储能力受到单机的限制。

哨兵

由两部分组成,哨兵节点和数据节点(主节点+从节点)。

哨兵节点: 哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的 Redis 节点,不存储数据。

数据节点: 主节点和从节点都是数据节点。

哨兵方式在主从复制的基础上, 实现了故障自动切换的功能:

监控(Monitoring): 哨兵会不断地检查主节点和从节点是否运作正常。

自动故障转移(Automatic failover): 当 主节点 不能正常工作时,哨兵会开始 自动故障转移操作,它会将失效主节点的其中一个 从节点升级为新的主节点,并让其他从节点改为复制新的主节点。

配置提供者(Configuration provider): 客户端在初始化时,通过连接哨兵来获得当前 Redis 服务的主节点地址。

通知(Notification): 哨兵可以将故障转移的结果发送给客户端。

哨兵模式的节点数量要满足 2n + 1 (n>=1)的奇数个。

优点

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



缺点

  • 部署相对 Redis 主从模式要复杂一些,原理理解更繁琐;
  • 存储能力受到单机的限制没办法做到水平拓展动态扩充。
  • Redis Sentinel 主要是针对 Redis 数据节点中的主节点的高可用切换,对 Redis 的数据节点做失败判定分为主观下线和客观下线两种,对于 Redis 的从节点有对节点做主观下线操作,并不执行故障转移。

哨兵模式的读写分离

哨兵模式下,客户端一般会保持两种连接,与哨兵的连接,以及master的连接。数据操作当然使用master连接,如果master出故障了,可以通过与哨兵的连接来获取master的最新地址。

一般的客户端连接流程如下:

  1.连接哨兵,根据master的名称获取master的ip和port。

  2.通过ip和port连接master。

另外,有一些公司自己封装了redis客户端,可以通过哨兵获得master及其slaves,采用读写分离,读slaves,写master。

集群模式

Redis Cluster是一种服务端Sharding技术,3.0版本开始正式提供。Redis Cluster并没有使用一致性hash,而是采用slot(槽)的概念,一共分成16384个槽。将请求发送到任意节点,接收到请求的节点会将查询请求发送到正确的节点上执行。

针对海量数据+高并发+高可用。多个master可以横向扩容,每个master都有slave节点高可用,读写分离。

数据分布算法:
hash、一致性hash算法,假设3个节点、对节点数量取模(3)、对3求余,小于节点数量。某一个节点宕机,新的节点数量取模会造成取不到数据,造成数据失效。
一致性hash算法,每个点都有hash值,圆环上顺时针找节点,一个节点宕机,丢失三分之一数据丢失。

虚拟节点,不会让所有流量涌入一个节点。

官方推荐,集群部署至少要 3 台以上的 master 节点,最好使用 3 主 3 从六个节点的模式。

优点

  • 可以横向扩展

缺点

  • 需要服务器资源较多

生产应用情况

redis cluster

10 台机器,5 台主实例,另外 5 台从实例,每个主实例挂了一个从实例,5 个节点对外提供读写服务,每个节点的读写高峰qps可能可以达到每秒 5 万,5 台机器最多是 25 万读写请求/s。

机器是配置。32G 内存+ 8 核 CPU + 1T 磁盘,但是分配给 redis 进程的是10g内存,一般线上生产环境,redis 的内存尽量不要超过 10g,超过 10g 可能会有问题。

5 台机器对外提供读写,一共有 50g 内存。

因为每个主实例都挂了一个从实例,所以是高可用的,任何一个主实例宕机,都会自动故障迁移,redis 从实例会自动变成主实例继续提供读写服务。

你往内存里写的是什么数据?每条数据的大小是多少?商品数据,每条数据是 10kb。100 条数据是 1mb,10 万条数据是 1g。常驻内存的是 200 万条商品数据,占用内存是 20g,仅仅不到总内存的 50%。目前高峰期每秒就是 3500 左右的请求量。

关注公众号,发送 ztzl 免费下载《中台战略:中台建设与数字商业》。

还在乱输出异常信息?大厂异常输出规范_记录日志

原网站

版权声明
本文为[dehuisun]所创,转载请带上原文链接,感谢
https://blog.csdn.net/sundehui01/article/details/121769968