View on GitHub

个人笔记

SongPinru 的小仓库

系统高可用专项

背景

  • 晨刚和治锌反馈kafka不稳定,经常commit超时,业务受到一定影响

  • 10-02 zookeeper full GC导致集群震荡

        主要的原因是现在集群不够稳定,尤其当有大任务运行、集群间发生数据同步或数据平衡时,经常单机的网络IO会打满,导致一些服务间的心跳超时或连接超时,影响服务的稳定。

        前期部署节点不足,角色复用混布太多,现在集群部署不够合理,需要优化。

集群现有问题

  • 角色混部

    • kafka与DataNode/NodeManager
    • NameNode与DataNode/NodeManager
    • ResourceManager与DataNode/NodeManager
      • 这两台节点还部署了mysql、hive、hue、oozie,clouderaManager等
      • 但是这些角色使用资源不是很多,可以与ResourceManager混布
  • zookeeper复用

    • Kafka和集群高可用使用的zookeeper复用
  • 关键角色使用的机器不够稳定

    • NameNode

    • ResourceManager

    • ClouderaManager

    • Zookeeper

  • 网络问题

    • 最近一段时间网络不是很稳定

    • Ethan说是因为机柜间带宽跑满导致的丢包和延时

    • 暂时无法解决,等Ethan后续优化

混合部署的缺点

        Hdfs和Yarn的资源限制无法限制IO和CPU,混合部署导致大任务占用过多资源,影响其他服务的可靠性。比如当IO占用较高时导致Kafka写入失败,读取超时等。最好DataNode/Nodemanager单独部署,不要和其他角色混布(impala、hbase强等依赖HDFS的除外)

        zookeeper复用,有可能导致zookeeper不稳定。比如,随着kafka的topic增多,zookeeper需要的内存增多,更容易触发full GC,可能导致集群震荡。集群高可用使用的zookeeper应该拆分出来,不要与kafka复用,保证集群稳定

关键角色迁移

49-55节点使用的机器是单网卡,用来做namenode等角色不太合适,应该迁移角色,让这几台回归datanode

解决方案

  • kafka独立部署

  • zookeeper拆分,集群高可用使用的zookeeper单独部署

    • 可以与journalNode混布,但不能与kafka等组件混布
  • 关键角色迁移

    • 关键角色可以迁移到性能较好的机器

    • 目前看来,烽火台新采购的机器比较合适,如果烽火台的服务全部改为k8s,机器可以空出来给集群

计划

新的部署方案

由于FHT的服务对kafka要求比较高,需要为FHT单独部署一套Kafka

角色 台数 来源
zookeeper 3 旧集群kafka
NameNode 2 FHT采购机器
ResourceManager 2 FHT采购机器
kafka 5 旧集群flume
kafka(FHT专用) 3 旧集群flume

阶段目标

第一阶段:kafka独立部署,预计11-04完成(本周可以先部署FHT专用kafka,下周迁移kafka)

第二阶段:zookeeper拆分、迁移,预计11-11完成(需要nameNode停机)

第三阶段:NameNode迁移(以下需要依赖FHT服务的K8s化,时间暂不能确定)

第四阶段:ResourceManager及hive等迁移

第五阶段:ClouderaManager迁移