• 1. 1 CM--集群管理与负载均衡系统 五竹, 搜索与算法
  • 2. 目录背景介绍1整体架构4功能特性3性能与应用2
  • 3. 背景介绍1性能与应用2整体架构4功能特性3目录
  • 4. 背景介绍Clustermap(CM)--集群管理与负载均衡系统起源于淘宝商品搜索引擎. 主要解决如下问题: 如何知道服务节点(searcher) 是否可用 如何选取一行服务节点,并能保持各行之间的负载均衡 如何选取某一列的一个节点 不停服务的情况下,增减机器
  • 5. Before
  • 6. 背景介绍伴随着淘宝搜索业务的发展,CM面临越来越多的挑战: 集群间的集群状态管理与负载均衡的要求越来越多,如 SP需要知道其下面的所有服务的拓扑和存活状态. 服务定位更复杂,同一个物理集群,可以做为多个不同的逻辑集群对外提供服务,并且其下的服务节点,在不同的连辑集群中,状态可以不一样。如 etao HA3 集群。 服务的信息颗粒要求更小,如 UPS系统中,需要知道某张表的分区,分布在那些节点上。 替换LB设备,网内集群间的流量越来越大(每天几十亿),LB设备的成来也越来越大.
  • 7. 背景介绍性能更强大,支持更多的节点。HA3 原来采用 zookeeper 来做心跳,集群到2000台左右时,出现性能瓶颈。 运维管理需求,根据 cpu_busy,latency,iowait 等来自动下线 offline 机器 除主动心跳外,还支持更多的服务有效性检查测试. 2. 2012年CM经过了一次重构,以便更好的支持集群间的服务定位与发现的应用需求.
  • 8. Now
  • 9. 背景介绍1功能特性2整体架构4性能与应用2目录
  • 10. 性能与应用—性能测试说明测试环境: linux 2.6.18-164.el5 cpu: 16 core Intel(R) Xeon(R) CPU E5620 cpu MHz: 2400 memory: 32G 测试结果在无 CM 级连的情况下,单个CMServer 可以同时支持: 心跳汇报节点(汇报周期100ms) 10000个 4/7层健康检查节点(检查周期1s) 6000个 订阅节点(更新周期1s) 4000个 瓶颈主要是千M网卡的带宽占满
  • 11. 性能与应用—应用
  • 12. 性能与应用—应用管理搜索内部所有集群,14个业务线,31个集群 统一搜索内部所有服务定位和集群状态管理 替换搜索内部LB负载均衡设备(近 50 亿PV)
  • 13. 目录CONTENTS背景介绍1功能特性2整体架构3性能与应用4
  • 14. 功能特性订 阅心跳汇报运维管理健康检查同步ConfigServer负载均衡监控&报警PHP扩展
  • 15. 名词说明 Cluster: 多个节点组成的集合称为一个Cluster CMServer: ClusterMap内部的服务端,管理集群和节点 HBNode: 表示心跳汇报节点,汇报自己状态信息到CMServer Subscriber: 订阅者,与CMServer通讯,获取集群信息 CMSubProxy: 订阅者代理,订阅者功能基础上还会写共享内存 CMCtrl: 工具,用来提供集群的增/删/改,节点的上下线 ConfigServer: 淘宝的一个管理配置的服务
  • 16. 功能特性心跳汇报1/汇报类型需要预先配置的节点 不需要预先配置的直接汇报的节点2/节点可以汇报心跳和负载信息,及用户自定义的数据信息3/支持一个节点对应多个集群即一个节点在多个集群中存在4/支持一个节点注册多个端口和协议
  • 17. 功能特性健康检查节点健康检查节点不需要向CMServer汇报,CMServer会主动定期检查节点的状态是否正常 包括四层健康检查,和七层健康检查 同时支持一个节点对应多个集群 定义 4/7 层健康检查协议,可以向 CM 返回集群系统状态(cpu_busy等),qps,latency 信息(暂未实现)
  • 18. 功能特性同步ConfigServerCMServer上的节点信息同步到ConfigServer根据配置, 可以将某些集群的信息同步的 ConfigServer, 方便基于Hsf/Configserver 框架的Java前端,这样就可以通过 ConfigServer 来获取搜索后台服务的有效节点信息, 直接访问, 而不再通过VIP方式访问
  • 19. 功能特性订 阅1/订阅集群方式订阅所有集群 根据配置,订阅1个或多个集群2/集群的拓扑结构 类似于Kingso的物理集群到拓扑集群 1-1 映射 类似与Ups的物理集群到拓扑集群 1-N 映射 3/支持本机房优先分配的策略 4/支持订阅者为虚节点,只订阅不发心跳 5/支持多种语言的订阅(C, Php, Java, Lua,Node.js)
  • 20. 功能特性订 阅6/对外提供的查询接口 allocRow 获取一行节点 allocValidRow 获取一行有效节点 allocNodeOfPartition 获取一列的所有节点 allocValidNodeOfPartition 获取一列的所有有效节点 allocNodeByPartitionId 获取一个 TopoCluster 的某个分区中分配一个的节点 6) allocValidNodeByPartitionId 获取一个 TopoCluster 某个分区中分配一个可用的节点 allocAllNode 获取集群所有节点 allocAllValidNode 获取集群所有有效节点 getNodeStatus 根据节点spec获取当前节点的状态 getNodeMetaInfo 根据节点spec获取当前节点的MetaInfo信息 getPartitionCnt 获取一个 TopoCluster 中的分区数 getNodeCntOfPartition 获取一个 TopoCluster 中的某分区的节点数
  • 21. 功能特性负载均衡LB_ROUNDROBIN轮询随机分配LB_RANDOMLB_WEIGHT根据权重LB_CONHASH指定行失败后,用一致性获取节点指定选取哪一行LB_LOCATING
  • 22. 功能特性PHP扩展订阅者支持: Nginx+Php基于共享内存方式同步集群变更信息的CMSubProxy 和 Php Extension Lib订阅者支持: Nginx+Lua基于共享内存方式同步集群变更信息的CMSubProxy 和 Lua Extension Lib订阅者支持: TNginx基于共享内存方式同步集群变更信息的CMSubProxy 和 Tnginx Module
  • 23. 功能特性1/集群配置隔离 ,方便管理ClusterMap做到一个集群只在一个配置文件里,不同集群互不影响运维管理2/集群操作添加,删除,查询,上线,下线3/节点操作添加,删除,查询,上线,下线4/支持节点自动下线当节点的负载或者Qps超过节点承受能力时,CMServer可以自动下线该节点
  • 24. 功能特性5/支持CMServer级联即一台CMServer订阅另一台CMServer上的集群6/支持CMServer主从切换不需要同步集群信息,通过的ZK的leader选举机制,进行CMServer主从切换,即当前的CMMaster服务停掉,ZK上会立即选举一个CMMaster,新的Master会从ZK上拿到集最新的集群全量信息运维管理
  • 25. 功能特性 监控&警报监控&&报警 Zk服务监控 CMServer服务和配置文件监控 集群状态和内部节点的状态监控 同步到ConfigServer上的节点信息监控WebServer 上下线集群和节点 查看所有的订阅者 查看集群状态和内部节点的状态 查看同步到ConfigServer上的节点信息
  • 26. 目录背景介绍1功能特性3整体架构4性能与应用2
  • 27. 整体架构
  • 28. 整体架构ZK提供可靠的持久化存储服务与Leader选举机制实现多台Server间主从互备
  • 29. 整体架构管理机器,负责管理集群拓扑结构、收集节点状态信息、向订阅者推送集群状态信息CMServer
  • 30. 整体架构Server级联功能CMServer2
  • 31. 整体架构运维管理工具:用来提供集群的增/删/改,节点的offline/online等操作 CMCtrl
  • 32. 整体架构操作集群,监控和报警WebServer
  • 33. 整体架构定期向CMServer汇报心跳和负载信息HBNode
  • 34. 整体架构CMServer端定期检查服务状态、APPServer
  • 35. 3# 整体架构定期同步管理的结点信息给ConfigServerConfigServer
  • 36. 整体架构集群的订阅者,先向CMServer订阅集群信息,构建拓扑集群 Subscriber
  • 37. 整体架构读取共享内存,构建内部拓扑结构FE
  • 38. 发展展望 快速应对业务需求,支持多种语言的服务 监控更加简洁智能、运维自动化 探索更智能的负载均衡策略 搜索内外部流量使用CM2替换负载均衡设备
  • 39. 跨·越 只为走得更远。。。
  • 40. Thanks! @淘五竹@tiechou