Redis 高可用架构最佳实践
《Redis 高可用架构最佳实践》要点: Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日记型、Key-Value 数据库,并提供多种语言的 API. 如今,互联网业务的数据正以更快的速度在增长,数据类型越来越丰富,这对数据处理的速度和才能提出了更高要求.Redis 是一种开源的内存非关系型数据库,给开发人员带来的体验是颠覆性的.在自始至终的设计过程中,都充分考虑高性能,这使得 Redis 成为当今速度最快的 NoSQL 数据库. 考虑高性能的同时,高可用也是很紧张的考虑因素.互联网 7x24 无间断服务,在故障期间以最快的速度 Failover,能给企业带来最小的损失. 那么,在实际利用中,都有哪些高可用架构呢?架构之间有何优劣?我们应该怎么取舍?有哪些最佳实践? 0x02 Sentinel 原理 在讲解 Redis 高可用计划之前,我们先来看看 Redis Sentinel 原理是怎么样的.
1 到 3 是主动发现机制:
4 是检测机制,5 和 6 是 failover 机制,7 是更新设置装备摆设机制.[1] 0x03 Redis 高可用架构 讲授完 Redis Sentinel 原理之后,接下来讲授常用的 Redis 高可用架构.
接下来共同图文逐个讲解. 3.1 Redis Sentinel 集群 + 内网 DNS + 自界说脚本 上图是已经在线上环境应用的方案.底层是 Redis Sentinel 集群,代理着 Redis 主从,Web 端连接内网 DNS 提供服务.内网 DNS 依照一定的规则分配,比如 当主节点发生故障,好比机器故障、Redis 节点故障或者网络不可达,Sentinel 集群会调用 长处:
毛病:
3.2 Redis Sentinel 集群 + VIP + 自界说脚本 此方案和上一个方案相比,略有不同.第一个方案使用了内网 DNS,第二个方案把内网 DNS 换成了虚拟 IP.底层是 Redis Sentinel 集群,Web 端通过 VIP 提供服务.在部署 Redis 主从的时候,需要将虚拟 IP 绑定到当前的 Redis 主节点.当主节点发生故障,Sentinel 集群会调用 长处:
3.3 封装客户端直连 Redis Sentinel 端口 部分业务只能通过外网拜访 Redis,上述两种方案均不可用,于是衍生出了这种方案.Web 使用客户端连接其中一台 Redis Sentinel 集群中的一台机器的某个端口,然后通过这个端口获取到当前的主节点,然后再连接到真实的 Redis 主节点进行相应的业务员操作.需要注意的是,Redis Sentinel 端口和 Redis 主节点均需要开放拜访权限.如果前端业务使用 Java,有 JedisSentinelPool 可以复用;如果前端业务使用 PHP,可以在 phpredis 的基础上做二次封装. 长处:
毛病:
3.4 Redis Sentinel 集群 + Keepalived/Haproxy 底层是 Redis Sentinel 集群,Web 端通过 VIP 提供服务.当主节点发生故障,Redis 之间的切换通过 Redis Sentinel 内部机制保障,VIP 切换通过 Keepalived 保障. 长处:
毛病:
3.5 Redis M/S + Keepalived 此方案没有使用到 Redis Sentinel.此方案使用了原生的主从和 Keepalived,VIP 切换通过 Keepalived 保障,Redis 主从之间的切换必要自定义脚本实现. 长处:
毛病:
3.6 Redis Cluster From: http://intro2libsys.com/focused-redis-topics/day-one/intro-redis-cluster Redis 3.0.0 在 2015 年 4 月 2 日正式发布,距今已有两年多的时间.Redis 集群采用 P2P 模式,无中心化.把 key 分成 16384 个 slot,每个实例负责一部分 slot.客户端哀求对应的数据,若该实例 slot 没有对应的数据,该实例会转发给对应的实例.另外,Redis 集群通过 Gossip 协议同步节点信息. 长处:
毛病:
3.7 Twemproxy From: http://engineering.bloomreach.com/the-evolution-of-fault-tolerant-redis-cluster 多个同构 Twemproxy(配置相同)同时工作,接受客户端的哀求,根据 hash 算法,转发给对应的 Redis. Twemproxy 方案比较成熟了,之前我们团队长期使用此方案,但是效果并不是很抱负.一方面是定位问题比较困难,另一方面是它对自动剔除节点的支持不是很友好. 长处:
毛病:
3.8 Codis From: https://github.com/CodisLabs/codis Codis 是由豌豆荚开源的产品,涉及组件众多,其中 ZooKeeper 存放路由表和代理节点元数据、分发 Codis-Config 的命令;Codis-Config 是集成管理工具,有 Web 界面供使用;Codis-Proxy 是一个兼容 Redis 协议的无状态代理;Codis-Redis 基于 Redis 2.8 版本二次开发,加入 slot 支持,便利迁移数据. 长处:
毛病:
0x04 最佳实践 所谓的最佳实践,都是最得当具体场景的实践. 主推以下计划:
以下是实战进程中总结出的最佳实践:
欢迎参与《Redis 高可用架构最佳实践》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |