加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

三七互娱DBA温国兵:Redis高可用架构最佳实践

发布时间:2021-01-24 07:44:45 所属栏目:安全 来源:网络整理
导读:副标题#e# 《三七互娱DBA温国兵:Redis高可用架构最佳实践》要点: 本文介绍了三七互娱DBA温国兵:Redis高可用架构最佳实践,希望对您有用。如果有疑问,可以联系我们。 作者:温国兵,曾任职于酷狗音乐,现为三七互娱 DBA.目前主要关注领域:数据库自动化运
副标题[/!--empirenews.page--]

《三七互娱DBA温国兵:Redis高可用架构最佳实践》要点:
本文介绍了三七互娱DBA温国兵:Redis高可用架构最佳实践,希望对您有用。如果有疑问,可以联系我们。

作者:温国兵,曾任职于酷狗音乐,现为三七互娱 DBA.目前主要关注领域:数据库自动化运维、高可用架构设计、数据库安全、海量数据解决方案、以及开源技术在互联网中的应用.

Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API.如今,互联网业务的数据正以更快的速度在增长,数据类型越来越丰富,这对数据处理的速度和能力提出了更高要求.Redis 是一种开源的内存非关系型数据库,给开发人员带来的体验是颠覆性的.在自始至终的设计过程中,都充分考虑高性能,这使得 Redis 成为当今速度最快的 NoSQL 数据库.考虑高性能的同时,高可用也是很重要的考虑因素.互联网 7×24 无间断服务,在故障期间以最快的速度 Failover,能给企业带来最小的损失.那么,在实际应用中,都有哪些高可用架构呢?架构之间有何优劣?我们应该怎么取舍?有哪些最佳实践?

一、Sentinel 原理

在讲解 Redis 高可用方案之前,我们先来看看 Redis Sentinel 原理是怎么样的.

1、Sentinel 集群通过给定的配置文件发现 master,启动时会监控 master.通过向 master 发送 info 信息获得该服务器下面的所有从服务器.

2、Sentinel 集群通过命令连接向被监视的主从服务器发送 hello 信息 (每秒一次),该信息包括 Sentinel 本身的 IP、端口、id 等内容,以此来向其他 Sentinel 宣告自己的存在.

3、Sentinel 集群通过订阅连接接收其他 Sentinel 发送的 hello 信息,以此来发现监视同一个主服务器的其他 Sentinel;集群之间会互相创建命令连接用于通信,因为已经有主从服务器作为发送和接收 hello 信息的中介,Sentinel 之间不会创建订阅连接.

4、Sentinel 集群使用 ping 命令来检测实例的状态,如果在指定的时间内(down-after-milliseconds)没有回复或则返回错误的回复,那么该实例被判为下线.

5、当 failover 主备切换被触发后,failover 并不会马上进行,还需要 Sentinel 中的大多数?Sentinel 授权后才可以进行 failover,即进行 failover 的 Sentinel 会去获得指定?quorum 个的 Sentinel 的授权,成功后进入 ODOWN 状态.如在 5 个 Sentinel 中配置了 2 个 quorum,等到 2 个 Sentinel 认为 master 死了就执行 failover.

6、Sentinel 向选为 master 的 slave 发送SLAVEOF NO ONE命令,选择 slave 的条件是 Sentinel 首先会根据 slaves 的优先级来进行排序,优先级越小排名越靠前.如果优先级相同,则查看复制的下标,哪个从 master 接收的复制数据多,哪个就靠前.如果优先级和下标都相同,就选择进程 ID 较小的.

7、Sentinel 被授权后,它将会获得宕掉的 master 的一份最新配置版本号 (config-epoch),当 failover 执行结束以后,这个版本号将会被用于最新的配置,通过广播形式通知其它 Sentinel,其它的 Sentinel 则更新对应 master 的配置.

1 到 3 是自动发现机制:

  • 以 10 秒一次的频率,向被监视的 master 发送 info 命令,根据回复获取 master 当前信息.
  • ?以 1 秒一次的频率,向所有 redis 服务器、包含 Sentinel 在内发送 PING 命令,通过回复判断服务器是否在线.
  • 以 2 秒一次的频率,通过向所有被监视的 master,slave 服务器发送当前 Sentinel master 信息的消息.

4 是检测机制,5 和 6 是 failover 机制,7 是更新配置机制.

二、高可用架构

讲解完 Redis Sentinel 原理之后,接下来讲解常用的 Redis 高可用架构.

  • Redis Sentinel 集群 + 内网 DNS + 自定义脚本
  • Redis Sentinel 集群 + VIP + 自定义脚本
  • 封装客户端直连 Redis Sentinel 端口

JedisSentinelPool,适合 Java

PHP 基于 phpredis 自行封装

  • Redis Sentinel 集群 + Keepalived/Haproxy
  • Redis M/S + Keepalived
  • Redis Cluster
  • Twemproxy
  • Codis

接下来配合图文逐个讲解.

2.1 Redis Sentinel 集群 + 内网 DNS + 自定义脚本

三七互娱DBA温国兵:Redis高可用架构最佳实践

上图是已经在线上环境应用的方案.底层是 Redis Sentinel 集群,代理着 Redis 主从,Web 端连接内网 DNS 提供服务.内网 DNS 按照一定的规则分配,比如?xxxx.redis.cache/queue.port.xxx.xxx,第一个段表示业务简写,第二个段表示这是 Redis 内网域名,第三个段表示 Redis 类型,cache 表示缓存,queue 表示队列,第四个段表示 Redis 端口,第五、第六个段表示内网主域名.当主节点发生故障,比如机器故障、Redis 节点故障或者网络不可达,Sentinel 集群会调用?client-reconfig-script?配置的脚本,修改对应端口的内网域名.对应端口的内网域名指向新的 Redis 主节点.优点:

  • 秒级切换,在 10s 内完成整个切换操作
  • 脚本自定义,架构可控
  • 对应用透明,前端不用担心后端发生什么变化

缺点:

  • 维护成本略高,Redis Sentinel 集群建议投入 3 台机器以上
  • 依赖 DNS,存在解析延时
  • Sentinel 模式存在短时间的服务不可用
  • 服务通过外网访问不可采用此方案

2.2 Redis Sentinel 集群 + VIP + 自定义脚本

三七互娱DBA温国兵:Redis高可用架构最佳实践

此方案和上一个方案相比,略有不同.第一个方案使用了内网 DNS,第二个方案把内网 DNS 换成了虚拟 IP.底层是 Redis Sentinel 集群,Web 端通过 VIP 提供服务.在部署 Redis 主从的时候,需要将虚拟 IP 绑定到当前的 Redis 主节点.当主节点发生故障,Sentinel 集群会调用 client-reconfig-script 配置的脚本,将 VIP 漂移到新的主节点上.

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!