一.Puppet
转载https://baike.baidu.com/item/puppet/5109503?fr=aladdin
puppet是一种Linux、Unix、windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
puppet采用C/S星状的结构,所有的客户端和一个或几个服务器交互。每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步。每个puppet客户端每半小时(可以设置)连接一次服务器端, 下载最新的配置文件,并且严格按照配置文件来配置客户端. 配置完成以后,puppet客户端可以反馈给服务器端一个消息. 如果出错,也会给服务器端反馈一个消息。
利用Puppet来给客户端自动生成在服务端定义好的文件。
由master端向多个Client端分发文件。
二.Ducter
转载http://www.ducter.net/
Ducter是面向设备、产品的分布式命令平台,为第三方提供针对设备与产品的信息收集或操控的命令通道。作为国内已在多个公司投入使用的一款开源产品运维管理系统。 Ducter是产品的管理平台,实现任意产品的管理、监控及用户自定义的发布与回退,为第三方提供产品运行状况的实时数据及事件通知。Ducter是集设备管理、产品管理、服务上线和服务器操作等于一体的运维管理系统。该系统分为Dcuter-Server/Ducter-Web两个部分。
Ducter目标:
产品管理系统
产品->服务->服务池(服务池属性)->服务池设备->设备。
产品自动发布系统
可视化、自定义、并发、自动。
适用于任意产品类型:c/c++、python、java、php等。
产品操控系统
远程操作产品服务的启动、停止、重启等。
产品运行及使用资源的实时信息收集与通知系统。
实时收集产品的运作状态及资源占用信息。在状态改变的时会主动实时事件通知。
分布式命令平台。
命令的action由用户脚本实现:shell、python、ruby等。
ducter提供脚本运行的环境。
运维定位:
与其他系统关系
与puppet、cfengine等配置系统关系:
puppet、cfengine:面向配置
ducter:面向交互,可与puppet等集成。
与Mesos的关系:
Mesos:资源管理、调度平台。
Ducter:分布式任务与命令平台,服务管理平台,资源及服务调度有第三方实现。
三.Cfengine
转载https://baike.baidu.com/item/Cfengine/1718297?fr=aladdin
cfengine(配置引擎)是一种 UNIX 管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易。Cfengine 适用于管理各种环境,从一台主机到上万台主机的机群均可使用。到2.2 版本为止,我们现在所知的用于一般性管理的最大安装机群约为20,000 台。
Cfengine 可从很多方面对系统配置和维护进行管理,包括以下几点:
♦ 完成后期安装任务,例如配置网络界面信息。
♦ 编辑系统配置文件以及其它文件。
♦ 建立信号连接。
♦ 检验、更正文件许可及所有权。
♦ 删除无用文件。
♦ 压缩被选文件。
♦ 在网络中分发文件。
♦ 自动挂载NFS文件系统。
♦ 检查重要文件和文件系统是否存在及其完整性。
♦ 执行命令及脚本。
♦ 应用安全相关的补丁以及相似系统的修正。
♦ 管理系统服务器进程。
目的:在于执行基于策略的配置管理。从实际的应用角度来讲,这意味着Cfengine 可以最大限度的简化系统配置及维护任务。
例子:要优化一个特定系统,用户不再需要使用Perl 或其他用户习惯的shell 来编译一个程序来执行每项要求,取而代之的是,用户可以通过写一个更加简单的策略来描述用户希望自己的主机如何被配置。Cfengine 软件可根据这些描述来决定哪些执行方式和/或补救方法是需要被完成的。这些策略描述也可以用于确保系统的配置能如系统管理员所希望的一样被保持下来。
四.Func
转载:https://www.cnblogs.com/MacoLee/p/5776869.html
Func ,目的是为了解决这一系列统一管理监控问题而设计开发的系统管理基础框架。能有效的简化多服务器系统管理工作的工具,易于学习,易于使用,易于扩展,而且功能强大。
Func的特点有:
1、Func可以在主控机上一次管理任意多台或任意多个服务器组。
2、Func基于Certmaster(https://fedorahosted.org/certmaster/)建立了Master-Slaves主从SSL证书管控体系,可以将证书自动分发到所有受控服务器。
3、Func命令行可以直接发送远程命令或者远程获取数据。
4、Func 开发者已经完成了大多数常用任务模块的开发,包括命令执行模块、文件传输模块、IPtables模块、查看硬件信息模块、Mount模块、进程模块、服务模块、重启系统模块等。
5、可以通过Func提供的Python API轻松编写扩展模块,以实现具体功能扩展。而且任何Func命令行能完成的工作,都能通过API编程实现。
6、Func通讯基于XMLRPC和SSL标准协议。
五、ansible
转载http://blog.51cto.com/sofar/1579894
1、简介
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
2、总体架构
Ansible由5 个部分组成:
Ansible:核心
Modules:包括 Ansible 自带的核心模块及自定义模块
Plugins:完成模块功能的补充,包括连接插件、邮件插件等
Playbooks:剧本,定义 Ansible 多任务配置文件,由Ansible自动执行
Inventory:定义 Ansible 管理主机的清单
3、特性
(1)、no agents:不需要在被管控主机上安装任何客户端;
(2)、no server:无服务器端,使用时直接运行命令即可;
(3)、modules in any languages:基于模块工作,可使用任意语言开发模块;
(4)、yaml,not code:使用yaml语言定制剧本playbook;
(5)、ssh by default:基于SSH工作;
(6)、strong multi-tier solution:可实现多级指挥。
4、优点
(1)、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
(2)、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
(3)、使用python编写,维护更简单,ruby语法过于复杂;
(4)、支持sudo。
5、任务执行流程
六.CheungSSH
转载:https://www.cnblogs.com/cheungssh/p/5025854.html
CheungSSH自动化运维工具,批量管理Linux服务器,自动监控服务器,自动部署Tomcat,Apache软件,管理GitHub,批量执行命令,传送文件,全自动化过程。计划任务功能,权限的审计,权限的控制,和操作记录。
功能介绍:
运行架构:
七.开放的运维管理系统 OSA
转载:http://www.osapub.com/index.html
OSA开源运维监管理平台是由OSA开发团队,针对目前服务器运维、监控和报警提出的一个开源、 易用、实用的跨平台服务器运维管理平台;OSA运维管理平台除了满足运维需求,还引导用户进行知识管理,流程规范,日常学习等。
主要功能:资源监控,独创的即时监控,智能分析服务器进程的内存和CPU占用率等信息。
邮件报警:灵活的报警设置,以邮件的方式进行服务异常、设备宕机等告警通知。
单机运维:简单操作即可进行服务器的日常维护与管理,支持通过智能手机进行登录和管理。
批量操作: 批量操作结合计划任务功能,让操作更加自动化,一键部署成千上万台服务器。
故障记录:强大的故障记录与分类功能,根据历史记录很好的分析突发故障。
知识库: 丰富的知识库内容,帮助您解决问题,寻找日常运维中的问题的答案。
运营分析: 用图形的方式分析服务器,让运营人员对基础设备状态信息了如指掌。
账户管理: 通过合理的权限分配,为不同用户设定不同角色,方便灵活管理。
注:最后更新时间2012年09月10日
八.国产开源运维管理工具介绍TriAquae
转载:https://blog.csdn.net/enweitech/article/details/48177835
IT批量运维管理软件-- TriAquae
1.服务器分组管理
2.批量命令执行
3.批量文件传送、接收
4.服务器运行状态抓取、分析
5.服务器硬件信息收集
6.定时计划任务
7.批量软件部署
8.系统密码更改
理由:方便,你可以像管理本地一台服务器一样可以轻松的让成千上万台服务器做同样的事情,比如 uname –a查一下系统版本,执行一个收集日志的脚本,修改所有服务器上的一个文件……,当然它能做的不至这些……;它如此之轻,只要你的机器上装有Python,那么你就可以开始使用它,它不需要你装数据库,不需PHP、不需要JAVA虚拟机,only Python。你甚至不需要在客户机上装客户端,只需要支持SSH,当然你得知道用户名密码;是开源的,免费的……
九.SaltStack
转载:http://www.360doc.com/content/16/0705/10/11991_573220489.shtml ;http://blog.51cto.com/lwm666/2068833
1、介绍
SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建,而且使用RAS Key方式确认身份,传输采用AES加密,安全性能更高。
通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。
2、自动化工具对比
1)Puppet
优点:老牌经典自动化配置软件、应用广泛、功能强大
缺点:不能批处理,使用Ruby和DSL语言开发,没有相关技术栈的公司维护和二次开发起来比较很难,门槛比较高;缺少错误检查和报告;最致命的是Puppet的执行是无序执行,对于一些配置或者部署有先后顺序的项目比较难以处理
2)Chef
优点:功能也比较强大(资料比较少)
缺点:官方文档说明比较模糊浅显;执行并非push实时执行,而是client端定时获取server端数据
3)Ansible
优点:社区年轻有活力,play-book使用yaml,简洁,不需要客户端client支持
缺点:使用SSH管理配置,理论上慢于Saltstack,对于不苛求执行效率,Ansible也是一个不错的选择
4)Saltstack
优点:功能不仅限于配置管理、使用Python开发、Grain/Pillar支持、自定义moudles
缺点:社区相对比较年轻,文档资料较少(其实官方文档已经讲解得很深入了...)
3、Saltstack的三种运行方式
· Local
· Master/Minion
· Salt SSH
Saltstack最传统的运行方式还是C/S模式,需要在被管理节点上安装Minion客户端;其实Saltstack也支持SSH方式,无需安装Agent,通过SSH实现管理
4、特性
(1)、部署简单、方便;
(2)、支持大部分UNIX/Linux及Windows环境;
(3)、主从集中化管理;
(4)、配置简单、功能强大、扩展性强;
(5)、主控端(master)和被控端(minion)基于证书认证,安全可靠;
(6)、支持API及自定义模块,可通过Python轻松扩展。
5、Saltstack目前最主要的三大主要功能
· 远程执行
· 配置管理
· 云管理
6、SaltStack 的工作原理
SaltStack 采用 C/S 结构来对云环境内的服务器操作管理及配置管理。SaltStack 客户端(Minion)在启动时,会自动生成一套密钥,包含私钥和公钥。之后将公钥发送给服务器端,服务器端验证并接受公钥,以此来建立可靠且加密的通信连接。同时通过消息队列 ZeroMQ 在客户端与服务端之间建立消息发布连接。
专业术语说明:
Minion 是 SaltStack 需要管理的客户端安装组件,会主动去连接 Master 端,并从 Master 端得到资源状态信息,同步资源管理信息。
Master 作为控制中心运行在主机服务器上,负责 Salt 命令运行和资源状态的管理。
ZeroMQ 是一款开源的消息队列软件,用于在 Minion 端与 Master 端建立系统通信桥梁。
Daemon 是运行于每一个成员内的守护进程,承担着发布消息及通信端口监听的功能。
SaltStack 通信原理图
操作执行原理图
原理图说明:
Minion 是 SaltStack 需要管理的客户端安装组件,会主动去连接 Master 端,并从 Master 端得到资源状态信息,同步资源管理信息。
Master 作为控制中心运行在主机服务器上,负责 Salt 命令运行和资源状态的管理。
Master 上执行某条指令通过队列下发到各个 Minions 去执行,并返回结果。
SaltStack 部署架构图
十.shipit-deploy
转载:https://cnodejs.org/topic/584545bd4c17b38d354363af
目标:一键部署多台服务器;一键回滚多台服务器;本地操作,不需要登录服务器;方便定制扩展,实现全自动化流程。
为什么shipit可以做到不用登陆就可以操作远程服务器呢?
这是因为它使用的是ssh命令操作远程服务器,不了解的同学可以在终端敲个命令感受一下:sshuser@remote_host “pwd; ls”。
为什么可以一键部署到多台机器呢?
简单来讲,配置中的每个server都会对应创建一个对象,每执行一个远程命令,会遍历所有的对象去执行。
定制扩展:代码已经上传到服务器了,接下来就是要启动项目了,比如我们用pm2来启动,启动前还需要执行npm install来安装项目依赖。那这些流程是否也可以加入到自动化的流程中呢?
当然可以,shipit-deploy的执行过程中会执行一系列任务,每执行完一个任务,都会emit一个事件,只要我们监听这个事件就可以做我们想做的事。
与脚本结合使用:那么,是不是定制了插件就完全不用脚本文件了呢,不一定,脚本文件有其好处,我们也可以很简单的把你现有的脚本加入自动化流程中。
既然我们可以使用shipit-deploy来实现同步代码,用插件和脚本来完成启动等额外工作,那shipit-deploy就不仅仅可以部署nodejs的项目,其他语言的项目也可以按照这个套路来实现自动化的部署。有人就成功的使用shipit-cli/shipit-deploy实现了一个php的项目的自动化部署。为了尽量少的影响非nodejs的项目,最好把shipit-cli和shipit-deploy全局安装。
十一.Walle
转载:https://tech.meituan.com/android-apk-v2-signature-scheme.html
Walle一个web部署系统工具,可能也是个持续发布工具,配置简单、功能完善、界面流畅、开箱即用!支持git、svn版本管理,支持各种web代码发布,静态的HTML、动态PHP、需要编译的JAVA等,用户权限管理,各种自定义高级任务。一键上线、回滚。
项目地址:walle-瓦力,上线开源两个月,目前已支持超过十家企业线上部署使用,每周更新一个版本,持续带来新特性。
walle的组件关系、原理:walle部署在一台宿主机提供一个web UI,方便用户自主更新代码部署到目标机群。Walle是一个跑在LNMP(LAMP)上的PHP服务,宿主机与目标机群建立信任,通过操作bash命令来实现代码同步、自定义高级任务。
配置:用户的项目可自定义git/svn代码托管地址、宿主机、目标机群、高级任务等。配置完成后可快速复制当前配置、检测配置是否正常、以及该项目的审核管理员和成员。
walle的持续部署与Git Flow思想一致,在不同的环境部署不同的分支。划分三个环境:测试环境、预发布环境、生产环境。测试环境和预发布环境推荐分支部署,生产环境推荐tag部署。当然,这更适合milestone开发方式,如果是每天快速迭代多个版本,打tag成本就有点高了。
部署是在一台宿主机拉取代码,做编译、配置后,向目标机群分发,执行相关目标机群任务。部署流程拆分为以下6个环节,其中1-5为在宿主机进行,6在目标机群执行。
1.权限、目录检查,开辟一个上线的独立空间以并行发布,防止同时部署出现代码污染
2.pre-deploy任务,代码检出前的一些操作任务,如环境检查
3.代码从git/svn版本库中检出
4.post-deploy任务,代码检出之后操作任务,如java的mvn编译,php的composer插件安装
5.保留在独立空间的代码均会被同步至目标机群的一个版本库中
6.全量更新:当所有机器都分发完毕,开始做pre-release任务(java暂停服务)、切换版本软链、post-release任务( java启动服务)
为保证服务的完整性,先同步代码,后切换服务。部署发布每次都会有版本记录保留,版本上线事故一旦发生,回滚可瞬间完成。可配置线上版本最大保留数,过期的版本被会删除,同时也就不能回滚被删除的版本。对于需要编译、自定义多任务辅助,可配置前置、后置操作自定义任务;同时提供一些预置变量({WORKSPACE}宿主机的当前独立空间、目标机webroot,{VERSION}版本库目录)方便用户操作自定义任务。
上线过程直到目标机群全部完成之前,如有任一环节失败将会回滚,需要重新上线,同时会把错误信息提示用户。