1、基于Mesos/Docker构建数据处理平台内容平台概览为什么选择Docker/Mesos组件容器化与部署基于Marathon的Streaming调度ELK on Mesos监控与运维平台概览平台架构平台简介每天处理约340亿/25TB的数据90%的数据在100ms内完成处理最长3h/24h的数据回放私有的Elasticsearch Cloud自动化监控与报警为什么选择Docker/Mesos为什么选择Docker打包runtime的一致性runtime的分发运维资源限制不再关心依赖简单的清理机制Host OSStreaming jobsHost OSStreaming jobsD D i i
2、 s s t t r r i i b b u u t t e e d d c c o o m m p p u u t t i i n n g g frameworksDependencies Runtime - JVM为什么选择Mesos足够简单稳定大规模调度的成功案例丰富方便的定制化能力多种容器较成熟的调度框架MarathonChronosMesos结构目标组件容器化与部署JVM的容器化潜在创建文件的配置都要注意java.io.tmpdir-XX:HeapDumpPath-Xloggc时区与编码-env TZ=Asia/Shanghai-volume /etc/localtime:/etc/
3、localtime:ro-env JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 - Duser.timezone=PRCJVM的容器化主动设置heap防止ergonomics乱算内存CMS收集器要调整并行度-XX:ParallelGCThreads=cpus-XX:ConcGCThreads=cpus/2Mesos容器化需要关注的配置参数MESOS_systemd_enable_supportMESOS_docker_mesos_imageMESOS_docker_socketGLOG_max_log_sizeGLOG_stop_logging_if_full
4、_diskMesos容器化需要关注的run参数-pid=host-privileged-net=host (optional)root user平台部署基于Marathon的Streaming调度Marathon简介Spark on Marathon运维标准化&自动化解决Mesos-Dispatcher的不足配置不能正确同步基于attributes的过滤功能缺失按role/principal接入Mesos不能re-registery不能动态扩容executor替代Spark Mesos Dispatcher替代Spark Mesos Dispatcher问题Checkpoint & Block
5、动态预留 & 持久化卷setJars清理无效的卷临时文件java.io.tmpdir=/mnt/mesos/sandboxspark.local.dir=/mnt/mesos/sandboxCoarse-GrainedStorm on MarathonDebug源生Web Console随机端口openresty配合泛域名Filebeat + Kafka + ELK多版本追溯日常排错异常监控MetricsELK on MesosElasticsearch需求逐步增多目前托管了40+集群100TB+业务数据高峰期 1.2k QPS约110个节点SSD vs HDDELK on Mesos结构Ha
6、proxy自组集群Dashboard监控与运维Streaming监控指标与报警Streaming拓扑监控业务监控Kafka Topic Lag处理延迟mean90/upper90Spark scheduler delay/process delaySearch Count/Message CountReject/ExceptionJVM容器监控指标与报警Google cAdvisor足够有效mount rootfs可能导致容器删除失败 #771-docker_only-docker_env_metadata_whitelistStatsd + Watcher基于Graphite的千万级指标监控平台Nagios问题基础监控压力数据膨胀垃圾指标增多大量的通配符导致数据库压力较高单个任务的容器生命周期发布扩容异常退出基础监控per-host = per-container易变多维度的聚合container Acontainer Bcontainer C.cpu_usage追溯容器变更Marathon eventTASK_FAILEDTASK_LOSTdeployment - scaleDocker eventoomdelete image/containerstart container