Ducter介绍
2020-03-01 484浏览
- 1.Ducter 系统介绍 cwinux 2014-12-28
- 2.内容纲要 总体介绍 设备管理 产品管理 任务设计 操作设计 安全设计 问题回答 2
- 3.总体介绍 —谁能帮你? 如何实时的登记各个服务分布在哪些服务器? 如何快速在几十、几百甚至几千台服务器上发布产品? 如何快速的完成已发布产品的退回? 如何不让开发人员登录线上服务器又能收集服务信息? 如何解决产品在不同服务器上配置不同的问题? 如何实现不同类型产品能够按照统一模式进行发布? 如何解决产品的测试、预发布、线上环境的平滑发布问题? 如何实现产品发布的过程中不影响线上业务的可用性? 如何能够解决各种从服务器上收集信息的需求? 如何实现线上服务进程的守护? 如何当产品服务器布局改了,能自动反映到监控上? 如何 …… Ducter 能帮你 ! 3
- 4.总体介绍 — ducter 理念 若只有一台服务器,只有监控是必要的 运维必须以产品为中心 运维体系必须能感知并适应产品的变化 信息 DB 化是运维自动化的基础 CMDB 、配置管理系统、产品管理系统、 监控系统应实现无缝对接 4
- 5.总体介绍 — ducter 发展历程 2012 年前: 0.1 版,名字叫 Dispatch 诞生在 SINA ,现在还在负责: 微博 2000 多台服务器上 100 多个产品的上线发布。 微博产品的服务降级管理 2014 年 10 月前: 0.2 版,名字叫 Dcmd 万达电商: 管理几百台服务器,负责几十个服务的发布管理。 万达院线: 管理几十台服务器,负责 6 个服务的发布管理 万达集团: 负责 200 多个产品的产品信息管理。 现在: 1.0 版,名字 Ducter 正式开源并更名为 Ducter : www.ducter.net 5
- 6.总体介绍 — ducter 运维角色 Ducter 实现设备、设备池、产品、服务、服务池的组织与管理。 Ducter 通过任务,实现产品服务的服务池的可控、可视化的上线。 Ducter 通过操作,实现服务器的非登陆模式的操控。 6
- 7.总体介绍 —内部对象及关系 一个【设备】只能属于一个【设备池】, 一个服务可以有多个服务池,一个服务池可有任意多设备,一台设备可运行多个服务 服务池支持环境版本,实现同一个服务的不同服务池子采用不同的配置 任务有状态而操作没有。任务与操作脚本文件都可自定义参数,指定 OS 的运行用户 任务与操作都可以并发的执行 7
- 8.总体介绍 —当前主要功能模块 设备管理模块 主要负责设备、设备池的管理。设备池可以定义各种属性,用户限定设备池特性。 服务管理模块 主要负责产品、服务、服务池及服务池设备的定义与管理 除服务及服务池的固定属性外,用户还可以对服务池定义各种属性。 这些属性都会作为 OS 的环境变量,传递给对服务管理、控制的任务脚本 任务模块 任务实现对服务的管理,比如服务上线、启动、停止、重启等等。这些管理动作由 Ducter 按照用户定义的方式,自动的调度完成。 服务管理的具体动作由用户自己编写的脚本定义,脚本可由 shell 、 python 等各种脚本语 言编写。 为了方便任务的创建, ducter 提供了任务模板以对任务缺省值进行定义。 操作模块 通过脚本实现对远程服务器的信息获取或管理等操作。用户可用 shell 、 python 等各 种脚本语言编写操作脚本。 对于需要循环执行的操作,可以定义为【可重复操作】 权限模块 实现用户及用户组的管理 8
- 9.总体介绍 —高可用的分布式架构 9
- 10.总体介绍 —可靠的任务执行架构 10
- 11.总体介绍 —并发的操作执行架构 11
- 12.总体介绍 —分布式的控制中心架构 12
- 13.总体介绍 —任务、操作并发执行的 Agent 架构 13
- 14.总体介绍 —其他信息 系统采用 C++ cwinux 应用与通信架构开发 通信协议采用 protobuf 可以管理超过 3 万的服务器节点 14
- 15.设备管理 15
- 16.产品管理 16
- 17.任务设计—任务功能综述 任务的本质是: 为用为为提供在一个服 为 为 为 为 为 为为器集群上安全、可靠、可 为 为 为 为 为 为 为 为 为 为 为为、自 为 为为为行命令的平台。 为 为为 为为为 执行 的命令由用采用各种脚本 户 语言开发,可以用作服务重启、上线等 各种目的。任务只是按照用户的要求,调度脚本在不同服务器上有次序自 动执行 ,并 为 脚本执行提供所需要的环境信息。 17
- 18.任务设计—任务脚本定义 18
- 19.任务设计—脚本执行的环境变量 DCMD_APP_NAME :任务对应的产品的产品名字 DCMD_SVR_ENV_V :服务池子的环境版本,在服务池设定 DCMD_SVR_IP :执行任务的注册服务器 IP 地址 DCMD_SVR_NAME :任务对应的服务的名字 DCMD_SVR_NODE_MUTIL_POOL :服务是否允许在一个设备上有多个服务池。在服务 DCMD_SVR_PATH :服务在设备上的安装路径。在服务上设定 DCMD_SVR_POOL :服务池名字 DCMD_SVR_PROCESS :是否实时输出执行进度,在 创建任务时指定 DCMD_SVR_REPO :服务的版本库地址,在服务池设定 DCMD_SVR_RESULT_FILE :任务执行结果文件,有 ducter agent 指定 DCMD_SVR_UPDATE_ENV :是否无条件更新服务的环境配置信息,在创建任务时指定 DCMD_SVR_UPDATE_TAG :是否无条件更新服务软件包,在创建任务时指定 DCMD_SVR_USER :任务执行的 OS 账号,在服务上设定 DCMD_SVR_VERSION :当前任务对应的服务版本号,在 创建任务时指定 DCMD_SYS_AGENT_PID :当前 ducter agent 的进程 ID DCMD_SYS_AGENT_PPID :当前 ducter agent 的父进程 ID DCMD_TASK_xxxx :用户脚本定义的参数 xxxx ,值在创建任务时指定 上设定 19
- 20.任务设计—脚本其他说明 脚本需要将执行结果输出到 $DCMD_SVR_RESULT_FILE 指定 的文件中,文件格式如下: process= 具体进度 ## 此为任意的字符串,必须在一行。 state= 脚本执行状态。 ##success :成功; failure :失败 err= 若失败则设置错误信息。 ## 错误信息可以多行。 脚本的参数及值若包含如下字符,则这些字符会被剔除 【 】、【 " 】、【 ' 】、【 】、【 \r 】、【 \n 】、【 ; 】、【 & 】 脚本具体实现例子,可参照 www.ducter.net的演示程序中的脚 本。 20
- 21.任务设计—任务监控 21
- 22.操作设计—操作功能综述 操作的本质是: 为用户提供在一个服务器集群上安全、并发执行命令的平台。执行的 命令由用户采用各种脚本语言开发,可用作服务器信息的收集、服务器配 置等各种动作。 22
- 23.操作设计—操作定义 23
- 24.操作设计—重复操作定义 24
- 25.操作设计—操作脚本说明 操作脚本的参数,输出的环境变量名称为: $DCMD_OPR_xxxx : xxxx 为操 作脚本参数的名称 脚本的参数及值若包含如下字符,则这些字符会被剔除 【 】、【 " 】、【 ' 】、【 】、【 \r 】、【 \n 】、【 ; 】、【 & 】 脚本具体实现例子,可参照 www.ducter.net的演示程序中 的脚本。 简单的脚本如下: if [ -z "$DCMD_OPR_proc" ] ; then ps -ef else ps -ef grep "$DCMD_OPR_proc" f 25
- 26.安全设计—用户及分组 26
- 27.安全设计—系统安全 控制中心的安全 控制中心可限定只有那些 IP 或 IP 段可以为 为 为 。 Agent 的安全 Agent 主为 为 为 接控制中心。 为为为为为 控制中心会基于 agent 连接 IP 与报告 IP 为为接 入的 agent ,若无法确认其身份则拒绝连接。 Agent 为 于 所有脚本参数的特殊字符,都 为为为 行了剔除。 为为为 【 】、【“】、【‘】、【 】、【 \r 】、【 \n 】、【 ; 】、【 & 】 Center 对于分发的所有脚本,都进行 MD5 校验,若校验 错误则拒绝发送 Center 在为为 行任 为 为为 前, 为 为为 任为为 的所有信息都 为 为 为 为 为 为为 行了快照 为 为 为 为为 理, 为 防止任为 为 为 行为 为 程中信息的改 为为为为为为为 而造成不一致 为为为为为 27
- 28.问题回答 如何实时的登记各个服务分布在哪些服务器? Ducter 的产品管理清理记录服务的服务器分布。 如何快速在几十、几百甚至几千台服务器上发布产品? Ducter 的任务可以实现服务在几十、几百甚至几千服务器的快速部 署。 如何快速的完成已发布产品的退回? Ducter 的前一个版本发布任务的 Redo ,可以实现产品的快速回 退。 也可以通过 Ducter 重新建立发布任务,版本号为回退的版本号 如何不让开发人员登录线上服务器又能收集服务信息? Ducter 的操作可以解决这个问题,只要编写对应的脚本即可。 如何解决产品在不同服务器上配置不同的问题? Ducter 的代码发布支持代码与配置分类,不同配置的服务器划分到 不同 的服务池,并为服务池设置 env 版本即可。 如何实现不同类型产品能够按照统一模式进行发布? Ducter 的任务可以实现所有产品按照统一的模式进行发布。 28
- 29.问题回答 —续 如何解决产品的测试、预发布、线上环境的平滑发布问题? 通过在 Ducter 划分测试、预发布、生产服务池子,为不同池子配置 不同的环境即可实现平滑发布。 如何实现产品发布的过程中不影响线上业务的可用性? Ducter 的任务支持产品发布的时候,一个服务池的设备按照设定的比 率,逐步上线,以确保上线的过程中对外正常提供服务。 如何能够解决各种从服务器上收集信息的需求? Ducter 的操作与重复操作都可以完成。建议针对不同的信息收集需求 开发对应的后台,通过 ducter 分发重复操作获取服务器信息。 如何实现线上服务进程的守护? Ducter 下一个版本将实现服务守护 如何当产品服务器布局改了,能自动反映到监控上? Ducter 计划与 zabbix 监控系统集成。 29
- 30.问答 Thanks… 30