Upgrade to Pro — share decks privately, control downloads, hide ads and more …

clustermap

 clustermap

tiechou

May 20, 2013
Tweet

Other Decks in Technology

Transcript

  1. Tiechou DESIGN 1#  背景介绍 1.  搜索内部引擎群英荟萃,难于管理 2.  使用负载均衡设备多一层网络开销 3.  单独使用Zookeeper管理集群性能受限

    4.  多种语言的前端需要访问搜索的服务(C, Java, PHP, Lua, Node.js) 5.  运维管理难于满足(根据节点负载自动上下线,界面操作,监控,报警)
  2. Tiechou DESIGN 2#  名词说明 Cluster: 多个节点组成的集合称为一个Cluster CMServer: ClusterMap内部的服务端,管理集群和节点 HBNode: 表示心跳汇报节点,汇报自己状态信息到CMServer

    Subscriber: 订阅者,与CMServer通讯,获取集群信息 CMSubProxy: 订阅者代理,订阅者功能基础上还会写共享内存 CMCtrl: 工具,用来提供集群的增/删/改,节点的上下线 ConfigServer: 淘宝的一个管理配置的服务
  3. Tiechou DESIGN 2#  功能特性 ⼼心跳汇报 1/汇报类型 1)  需要预先配置的节点 2)  不需要预先配置的直接汇报的节点

    2/节点可以汇报心跳和负载信息,及用户自定义的数据信息 3/支持一个节点对应多个集群 即⼀一个节点在多个集群中存在 4/支持一个节点注册多个端口和协议
  4. Tiechou DESIGN 2#  功能特性 1/集群配置隔离 ,方便管理     ClusterMap做到⼀一个集群只在⼀一个配置⽂文件⾥里,不同集群互不影响 集群管理

      2/集群操作     添加,删除,查询,上线,下线 3/节点操作     添加,删除,查询,上线,下线 4/支持节点自动下线     当节点的负载或者Qps超过节点承受能⼒力时,CMServer可以⾃自动下 线该节点
  5. Tiechou DESIGN 2#  功能特性 5/支持CMServer级联   即⼀一台CMServer订阅另⼀一台CMServer上的集群 6/支持CMServer主从切换   不需要同步集群信息,通过的ZK的leader选举机制,进⾏行CMServer主

    从切换,即当前的CMMaster服务停掉,ZK上会⽴立即选举⼀一个CMMaster, 新的Master会从ZK上拿到集最新的集群全量信息 集群管理  
  6. Tiechou DESIGN 2#  功能特性 订 阅 1/订阅集群方式 1)  订阅所有集群  

    2)  根据配置,订阅1个或多个集群 2/集群的拓扑结构 1)  类似于Kingso的物理集群到拓扑集群 1-­‐1  映射   2)  类似与Ups的物理集群到拓扑集群 1-­‐N  映射   3/支持本机房优先分配的策略 4/支持订阅者为虚节点,只订阅不发心跳 5/支持多种语言的订阅(C, Php, Java, Lua, Node.js)
  7. Tiechou DESIGN 2#  功能特性 订 阅 6/对外提供的查询接口 1)  allocRow获取⼀一⾏行节点  

    2)  allocValidRow获取⼀一⾏行有效节点   3)  allocNodeOfParFFon  获取⼀一列的 所有节点   4)  allocValidNodeOfParFFon  获取⼀一 列的所有有效节点   5)  allocNodeByParFFonId  获取⼀一个 TopoCluster  的某个分区中分配⼀一 个的节点   6)  allocValidNodeByParFFonId  获取   ⼀一个 TopoCluster  某个分区中分配⼀一个可⽤用的节点   7)  allocAllNode  获取集群所有节点   8)  allocAllValidNode  获取集群所有有效节点   9)  getNodeStatus  根据节点spec获取当前节点的 状态   10)  getNodeMetaInfo  根据节点spec获取当前节点 的MetaInfo信息   11)  getParFFonCnt  获取⼀一个 TopoCluster  中的分 区数   12)  getNodeCntOfParFFon  获取⼀一个 TopoCluster   中的某分区的节点数   13)  freeNode  释放节点   14)  freeNodes  释放多个节点  
  8. Tiechou DESIGN 2#  功能特性 同步ConfigServer CMServer上的节点信息同步到ConfigServer 根据配置, 可以将某些集群的信息同步的 ConfigServer, ⽅方便基于Hsf/

    Configserver  框架的Java前端,这样就可以通过 ConfigServer  来获取搜索后 台服务的有效节点信息, 直接访问,  ⽽而不再通过VIP⽅方式访问
  9. Tiechou DESIGN 2#  功能特性 PHP扩 展 订阅者支持Nginx+Php 基于共享内存⽅方式同步集群变更信息的CMSubProxy  和 Php

     Extension  Lib   订阅者支持Nginx+Lua 基于共享内存⽅方式同步集群变更信息的CMSubProxy  和 Lua  Extension  Lib   订阅者支持TNginx 基于共享内存⽅方式同步集群变更信息的CMSubProxy  和 Tnginx  Module  
  10. Tiechou DESIGN 2#  功能特性 负载均衡 LB_ROUNDROBIN   轮询 随机分配 LB_RANDOM

      LB_WEIGHT   根据权重 LB_CONHASH   指定⾏行失败后,⽤用 ⼀一致性获取节点 指定选取哪⼀一⾏行 LB_LOCATING  
  11. Tiechou DESIGN 2#  功能特性 监控&警报 监控&&报警 •  Zk服务监控   • 

    CMServer服务和配置⽂文件监控   •  集群状态和内部节点的状态监控   •  同步到ConfigServer上的节点信息监控   WebServer •  上下线集群和节点   •  查看所有的订阅者   •  查看集群状态和内部节点的状态   •  查看同步到ConfigServer上的节点信息  
  12. Tiechou DESIGN 4#  应⽤用表现 测试说明 1.  测试机器:线上CM5机房机器 2.  编译选项:-­‐g  -O2

      3.  机器部署:ZK(3台机器),   CMServer(2台机器),⼼心跳节点(55 台机器),七层健康检查节点(55台 机器,复⽤用), 四层健康检查节点 (55台机器,复⽤用), 订阅者(55台机 器,复⽤用)     4.  配置说明:          hb_interval=100ms          7level_check_period=1000ms          4level_check_period=1000ms          sub_status_interval=500ms               测试结果 测试结论: 1.  随着订阅者数量增加到10K, ⺴⽹网络Bytes  Out到达100M+, CMServer管理的集群节点开始不稳 定 2.  CMServer对节点数量没有限 制,可以⽀支持10K个订阅者 性能分析
  13. Tiechou DESIGN 4#  应⽤用表现 业务成果 1.  管理搜索内部所有集群,14个业务线   2.  订阅者有180个

    3.  统⼀一内部所有服务定位和集群管理 4.  替换搜索内部LB负载均衡设备  
  14. Tiechou DESIGN 4#  应⽤用表现 发展展望 1.  快速应对业务需求,⽀支持多种语⾔言的服务   2.  监控更加简洁智能、运维⾃自动化

    3.  搜索内外部流量使⽤用CM2替换负载均衡设备 4.  搜索内部使⽤用CM2进⾏行服务定位   5.  技术分享,推⼲⼴广到更多的业务平台
  15. Tiechou DESIGN 5#  快速使⽤用 4/参考文档 •  hfp://10.232.41.135:8080/   •  hfp://searchwiki.taobao.ali.com/index.php/CM2

      1/编译依赖 •  arpc  ⺴⽹网络通讯框架   •  auFl,  anet,  alog提供的公共 库   •  pb  定义的消息结构   •  zk  做leader选举机制   •  hsf,easy  同步configserver 3/启动服务 •  配置修改 cm_server.cfg   运⾏行cmserver,建议2-­‐3台机器来运⾏行cm_server   •  配置修改cm_client.xml   启动⼼心跳节点 •  配置修改cm_client.xml   启动订阅者 2/代码编译 •  进⼊入代码⺫⽬目录; •  执⾏行 sh  install_depend_lib.sh,会在当前⺫⽬目录下,创建⼀一个 contribute⺫⽬目录; •  执⾏行 scons  install_prefix=[安装路径]  mode=release  install  编 译代码和安装; •  执⾏行 scons  check,编译和运⾏行单元测试。