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