优酷高级技术经理高嵩 - 大规模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