puppet是一种Linux、Unix平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
puppet采用C/S星状的结构,所有的客户端和一个或几个服务器交互。每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步。每个puppet客户端每半小时(可以设置)连接一次服务器端, 下载最新的配置文件,并且严格按照配置文件来配置服务器. 配置完成以后,puppet客户端可以反馈给服务器端一个消息. 如果出错,也会给服务器端反馈一个消息.
1. Puppet元数据描述定义
资源定义:
默认提供的类型
文件,cron,服务,用户,用户组,软件包,执行文件,通知(写在日志)
变量:
- l 自定义变量
- l 系统变量
- n Facter根据本地环境生成一系列的key-value,可在资源定义中直接使用
- n 可以通过Ruby扩展自己的Facter
模块和类:
可把资源文件定义成类。方便代码重用。而且类和函数是支持参数的。
其描述语言的其它特点:
- 支持资源直接的依赖关系
- 比如user依赖某个group,cron依赖某个文件,服务依赖某个配置文件(自动重启)
- 比如user依赖某个group,cron依赖某个文件,服务依赖某个配置文件(自动重启)
- 支持条件关系
- Case, 正则表达等来根据环境设置变量
- Case, 正则表达等来根据环境设置变量
- 支持模板
- 支持条件和变量生成目标文件,典型应用可用于根据环境生成配置文件
- 支持条件和变量生成目标文件,典型应用可用于根据环境生成配置文件
2. Puppet同步
2.1. C/S方式的同步
Puppet的Master默认是用Ruby自带的WEBbrick通过http提供资源同步或者rest操作功能。为了更好的性能,你可以使用Mongrel或者Passenger(Apache Extension)提供服务
执行过程是根据资源定义和他们的依赖关系,变量,条件逻辑等编译成Catalog(特定顺序的资源列表),然apply顺序执行。
同步的方式
- l 周期性同步
Puppet Agent根据配置定时从Master上边通过http同步自己定义的
- l 触发同步
对指定的一批主机通过mcollective触发他们跟master同步
2.2. 无中心同步
通过rsync, git等手段去同步,然后通过cron来apply客户机上应用。
3. 相关
Mcollective
集群管理工具,可把一个请求传递到集群的所有服务器上。
扩展性好,你可以使用你自己的插件来替换他的插件,比如用AMQP替换STOMP;序列化等功能
初步看其描述,它实现上是基于订阅系统中间件的,所以理论扩容等操作相当透明和简单。 (如果实际就是这样的话,那server只是一个配置中心和发布事件的中心)
Puppet和Mcollective目前都没有找到他们完整的进程或者架构图,所以暂时无法了解具体运行场景和流程如何。