优酷高级技术经理高嵩 - 大规模redis集群的服务治理之路
2020-02-27 149浏览
- 1.大规模redis集群的服务治理之路 高嵩
- 2.About me Ø 11年工作经验,2011年加入优酷,曾任高级工程师、技术专家,现任高级技 术经理 Ø 目前在大优酷数据战略团队主要负责分布式缓存、实时计算平台的搭建与优化 Ø 对分布式存储、流计算、高并发高可用系统有浓厚兴趣,热爱分享与交流 Ø 技术博客:http://blueswind8306.iteye.com/
- 3.目录 Ø RedisCluster介绍 Ø RedisCluster优(cǎi)化(kēng)经验 Ø RedisCluster运维经验 Ø RedisCluster服务化
- 4.RedisCluster介绍
- 5.Redis Cluster特性 Ø 支持string/hash/list/set/sortedset/hyperloglog/geo/pubsub等大部 分单机Redis功能 Ø 去中心化的分布式集群 Ø 主从全量/增量同步 Ø 服务端分片 Ø 节点水平伸缩,扩容/缩容对调用方透明 Ø 自动failover/failback
- 6.服务端分片 Ø 数据分为固定的16384个槽(slot) Ø 每个node负责一部分slot的数据存储 Ø 每个node有整个集群的slot->node映射关系 Ø 集群初始化时确定slot->node的关系 Ø 扩容/缩容通过slot迁移完成 slots 0~5000 5001~10000 10001~16383 A B C
- 7.客户端请求 Ø 客户端缓存slot->node的映射关系 Ø 请求一个key时,在本地先算出key对应的slot,再根据slot->node的对应关 系找到node Ø 如果服务端的映射关系和客户端不一致怎么办? Key CRC16(key) % 16384 slot Request to node
- 8.请求重定向 – MOVED Ø 客户端请求的key所对应的槽不在Node A Ø Node A会返回一个长期重定向错误(MOVED) Ø 客户端根据MOVED重定向信息,访问Node B Ø 客户端重新缓存slot->node的映射关系 Client get key value MOVED 7000 B-‐ip B-‐port Node A ( 0~500 0) Client get key value Node B (5001~10000)
- 9.请求重定向 Ø 解决了客户端与服务端的一致性问题 Ø 集群状态变化(扩容/缩容)对客户端请求不会造成影响 Ø 支持多次跳转
- 10.Redis Cluster在优酷 Ø 峰值QPS:800w+ Ø 实例数:500+ Ø 内存:2T/4T
- 11.RedisCluster优(cǎi)化(kēng)经验
- 12.网卡绑定 Ø 网卡中断造成的影响 ü 抢占Redis进程CPU、降低Redis吞吐 Ø 解决方法 ü 关闭irqbalance ü 将网卡中断绑定到固定的CPU ü 将服务进程绑定到其它核
- 13.网卡绑定 Ø 绑定后效果
- 14.Slot风暴 Ø RT耗时变长 Ø 通过监控发现cluster slots命令被频繁调用
- 15.Slot风暴 Client random Node M Node N
- 16.Slot风暴 Client MOVED M Node M Node N
- 17.Slot风暴 Ø Jedis-2.8.0以上版本修复了该bug,增加shuffle逻辑 Ø 监控的重要性 Client CLUSTER SLOTS Client A Node M Node N
- 18.其它优化参数 Ø 内存相关 ü maxmemory-policy volatile-ttl ü hz 100(当过期key较多时) Ø 主从同步 ü repl-backlog-size ü client-output-buffer-limit slave Ø 集群相关 ü cluster-require-full-coverage no ü cluster-node-timeout
- 19.Redis Cluster运维经验
- 20.集群扩容 Ø 将新实例加入集群 ü redis-trib.rb add-node 新IP:port'>IP:port