网易大数据运维保障 吴二振 网易数帆.大数据运维 01网易内部大数据介绍 02网网易易大大数数据据管管控控平平台台 •Easyops常规功能展示 •Easyops底层技术实现 •Easyops性能优化 •Easyops日志,告警模块介绍 •Easyops展望 网易大数据应用现状 网易Hadoop生态基础服务: HDFS,YARN,Hive,Spark,Kudu... 网易中台产品: 数据资产,任务调度运维,数据地图... 大数据平台规模: 1.6个hadoop集群,其中3个HDFS联邦 2.总节点数5K+,单个集群最大规模2200+ 3.总存储量400+PB,平均使用率67% 4.日提交作业量20W+ EasyOps大数据管控平台 简介: •EasyOps是网易大数据旗下一个含括部署、监控、报警、运维为一体的自动化运维管理平台。目前管理网易大数据所有服务,并为其提供准确、实时的监控报警。 功能: •适配多集群,特定组件混合部署 •提供集群部署,监控,升级等自动化运维操作,提升运维效率 •集成底层基础组件和中台服务组件 •支持原地升级HDP集群到Easyops EasyOps大数据管控平台页面展示 EasyOps大数据管控平台页面展示 EasyOps大数据管控平台页面展示 •支持多配置组 •保留配置变更记录 •滚动重启 •支持特定配置透传 EasyOps大数据管控平台页面展示 •支持基础组件升级 •支持中台组件自动化升级 •支持管理组件化依赖管理 EasyOps大数据管控平台页面展示 •支持ambari集群底层 组件迁移 •例如:HDFS,YARN,HIVE,IMPALA。。。 EasyOps快速部署安装: 1.Docker编排、部署和管理服务 •easyops-gateway •easyops-frontend •easyops-alarm •easyops-manager •easyops-manual •easyops-grafana •easyops-ansible •easyops-prometheus •easyops-db 2.支持模板化拓扑部署 通过定义一个拓扑文件,进行配置后,执行部署 Easyops总体设计架构 1.Front:前端,通用入口; 2.Manager:管控,报警,配置; 3.AnsibleRunnerService:基于ansible实现服务脚本操作; 4.grafana:web嵌套,指标展示,告警; 5.Storage: 6.数据处理:prometheus,alarm, analysis; 7.度量采集agent 8.日志采集,filebeat,kafka,es Easyops集成代码块 •ansible 运维配置管理工具 •ansible-runner 基于ansible封装后的自动化工具 •ansible-runner-service 提供基于ansible-runner的RESTAPI访问接口 1.roles下以服务名创建目录,目录下创建 defaults,tasks,templates,vars目录; 2.defaults:用于存放默认的变量值,必须创建main.yml文件,调用role时会自动加载; 3.tasks:所有的任务脚本存放的目录,必须创建 main.yml,当调用role时,会调用main.yml; 4.templates:用于存放templates模板,生成配 置文件; 5.vars:用于存放动态的变量值,需要include对应的变量文件才会加载; Easyops优化 优化点:大批量节点操作时引发ansible-runner-service瞬时高负载,而拒绝超载请求 现象:当有1000个datanode需要重启,或者50个 nodemanager需要扩容,会提交对应数量的ansible-runner调 用,瞬间系统负载升高,同时超过默认events数的请求被拒绝。 优化: ♦资源充足前提下,提高event_threads对应地调大ansible容器资源reservations ♦将1个操作请求封装到1个ansible调用,即操作集简化与合并; •服务个数是有限的,服务的组件实例数是无限的,批量的组件操作请求以服务为单位封装; •将多个component操作合为一个,重写genInventory Easyops优化 问题与现状: 1、EasyOps操作最终是调ansibleplaybook,为playbook生成运行时的inventory,当前inventory内容过多,尤其在服务与组件实例跟多的情况下inventory变得很大,其创建、分发、查询都受影响。 2、不同类型操作,生成inventory方法基本一致,安装类操作(安装、扩容、升级、刷新配置)和控制类操作(启动、停止、重启)两者对inventory需求不同 inventory结构: 内容量不可控部分: 1、dependency_service集:随依赖服务变多而变大 2、hosts集:随集群规模大而变大 3、jinja2_vars集:随hosts集变大而变大 4、exports集:导出文件不多、内容不大也还好 Easyops优化 inventory结构: 优化方案: 1优化1-操作哪些组件实例生成哪些实例inventory hosts下面只生成我们操作的那些组件实例的inventory,不是全打上去,比如只操作其中1个dn,那 hosts下面只有该dn和本机上依赖服务的inventory内容 3优化2-按操作类型使用不同生成策略 1、主要对于控制类操作(服务的启动、停止、重启,组件的启动、停止、重启),不加入dependency_service段,不加入jinja2_vars段(考虑也使用start_all批量操作) 2、不加入jinja2_vars段基本上没有问题;不加入dependency_service段需要自动化验证一轮,可能 少量服务有 2优化3-同一组件抽出公共inventory 1、同一组件类型的各实例(如HRegionServer)inventory大多内容一样,仅带有instance_id部分不同,以及个性化配置项 2、优化办法是从hosts下所有组件实例的内容段中抽出一个公共段vars与hosts同级,集群规模越大 能减少越多相同行(基于1个配置组提取公共vars) 这个改造是直接兼容之前playbook的,无需playbook做修改。 Easyops日志采集监控 定制日志分析逻辑 例如:分析异常日志,聚合度量等 Easyops告警采集模块 度量采集监控 •服务暴露了prometheus的度量接口 •prometheus抓取相关监控数据 •grafana指标展示 Easyops告警采集模块 •增强了扩展性: 不同的prometheus子服务负责不同的采集实例 •数据统一存储,不重复 •数据的高可用 •解决单点问题: 目前数据的查询直接从NTSDB端进行 •数据降维: 利用NTSDB的CQ功能,实现了数据的降维处理 EasyOps监控告警模块 1.集成各个组件Dashboards指标展示界面 2.通用监控组件 •Prometheus •TSDB •Telegraf/Export/其他 •Grafana EasyOps监控告警模块 1.grafana页面自定义的alert模块, 方便对集群通用性指标加监控 2.告警推送渠道: Dingding,webhook,Email... 3.操作简单,易用,方便移植 Easyops功能展望 •1.支持CDH相关版本接管升级; •2.集成业界主流组件,形成一站式管理运维工具; •3.适配主流的云存储方案,包括s3,obs,oss等; •4.集成spark,flink,MR任务分析,以及HDFS读写延迟, YARN调度延迟等异常诊断;