Puppet应用与架构吴问志网站:邮箱:puppetfans@sina.com微博:puppetfans@sina.com引言机器越来越多应用越来越复杂架构越来越复杂审记越来越难内容概要1.puppet介绍-什么是puppet-puppet能做什么-puppet如何做到-puppet目录结构介绍2.运维自动化工具对比-puppetvscfengine-puppetvschef3.puppet使用时注意事项4.puppet应用案例-puppet管理用户-puppetnginx管理-puppetkick介绍-puppetMCollective介绍-puppetfunc介绍5.puppet架构与集群-puppet架构-puppet集群方案-puppet集群核心思想-puppet性能测试方法6.QA-puppet未来puppet介绍什么是puppet遵循GPL协议(2.7.0),基于ruby语言开发的系统配置管理工具说明性语言表达系统,用库实现配置基于C/S架构,配置客户端和服务端,也可以独立运行puppet对于系统管理员是抽象,只依赖于ruby与facter.默认情况下,客户端每30分钟连接到puppetmasterpuppet能做什么puppet能管理多达将40多种资源管理,例如:file,usergroup,host,package,service,cron,exec,yumrepo适合整个软件生命周期管理。注:2.7.0以后使用(Apache2.0license)注:puppet特殊资源--虚拟资源.puppet有个特殊的Type,例如Package,User等。这个Type就是告诉puppet被管理的是什么资源。puppet的适用场景puppet是如何工作的puppet工作流程注:内部处理过程是抽象的Puppet模型参考Puppet三层模型package{nginx:ensure=installed,}puppet工作流程分拆Facter介绍Facter是什么facter是内置的puppet工具,它提供的一个标准方式去获得客户端环境变量等相关信息Facter能获得哪些信息#facter-parchitecture=x86_64id=rootinterfaces=eth0,loipaddress=192.168.200.63ipaddress_eth0=192.168.200.63。。。。。。。ikernprocessor0=Intel(R)Xeon(R)CPUE5405@2.00GHzprouptime=27daysuptime_days=27uptime_hours=651uptime_seconds=2344200注:这些变量可以直接来使用,例如:{$::ipaddress}或者$::ipaddress当然你也可以自定义fact,需要使用ruby来编写。开源社区版和企业版对比开源社区版企业版用户图形接口内置Ec2模块内置Ec2模块内置Vmwarevms配置管理-发现和克隆配置管理-操作系统配置管理-操作系统配置管理-用户账户管理管理应用管理应用内置300+模块内置300+模块统一跨平台组件安装自动配置审记业务流程自动化网络技术社区支持网络技术社区支持7*24小时技术支持puppetlabs工程师认证支持依赖包在一个目录下平滑升级和维护支持puppet目录结构与模块介绍puppet目录结构(右一)注:manifests/site.pp必须存在puppet模块结构(右二)注:manifests/init.pp必须存存Puppet与其它自动化工具对比puppetVScfenginepuppetVSchef安装配置简单安装复杂需要依赖DB基于ruby开发,Puppet自有高级配置语言基于c语言,语法难懂,学习维护成本高备份恢复简单备份恢复复杂用于管理各种资源重点用于管理文件底层负责建模模拟资源之间相互关系安装配置简单安装配置比较复杂基于ruby,用户不熟悉ruby,也可以使用使用的是ruby扩展,需要用户熟悉ruby语言,入门难备份恢复简单维护不方便有众多开发者和文档文档或者资料少有更成熟悉商业经验用户群相对少更多功能借鉴其思想,是puppet一个分支Puppet使用注意事项1.主机名使用FQDN格式命名,需要DNS或者hosts解析2.C/S两端时间要同步,SSL认证依赖于时间3.ssl认证过后,请不要修改主机名4.Usecachefaiure5.tag和tagged6.节点可以继承,但不能多重继承7.类可以继承与覆盖,子类可以向父类添加额外属性值8.puppet支持多环境部署(分:开发、测试、线上)9.tidy资源中多条件关系是或者,而不是and10.选择正确的版本Puppet使用时注意事项1.节点设置tagtag(old-slow-server)iftagged(old-slow-server){notify{thiswillsucceed:}}2.对资源设置tagfile{/etc/ssh/sshd_config:...notify=Service[ssh],tag=ssh,}#puppetagent--test--tagsssh1,类继承示例classnginx::port81inheritsnginx{....}错误示例classnginx::port81inheritsnginx,apache{....}子类向父类添加额外属性Service[nginx]{require+File[/etc/nginx/conf.d/nginx81.conf],}}Puppet的应用案例Puppet管理用户(关于:管理用户的几点说明①a.puppet支持ldap以及nis集中认证②b.puppet支持用户密码管理,最好以''(单引号)括起来③c.puppet建用户的默认是不建家目录的,需要使用managerhome=truepuppet管理nginxpuppetkickPuppetMCollectivePuppetfuncpuppet虚拟资源以@为前缀使用虚拟资源需要配置storeconfig虚拟资源使用场景多个资源需要引用共同的某个资源实例,例如A用户是SA,又是DBApuppetnginx应用案例Exec有条件的执行:creates:指定命令所生成的文件那么命令只会在所指定的文件不存在的情况的被执行unless:所设定的命令返回0时才执行onlyif:只会在onlyif设定的命令返回0时才执行refreshonly:触发刷新动作。资源之间依赖关系:before、after、require资源之间触发subscribenotify友情提示:refreshonly,refresh的区别refreshonly:收到多少次通知,就执行多少资源,refresh:不管有多少次通知,请执行一次。puppet+kickpuppetkick:主动强制客户端运行puppetagent.注意:puppetkick并不关心客户端puppetagent有没有执行错误,它成功连接到agent即返回退出0.MCollective介绍官方的解释:MCollective就是一个调度器,可以解决多个puppetagent同时向master提出请求造成性能,速度下降的问题;它可以根据不同的属性对节点进行分类,对不同分类执行不同的任务;它是一个控制终端,可以使用它控制客户端和服务器,因此不需要puppetagent定时运行了.MCollective也是一种Client/Server架构,而且client和server使用Midware(中间件)进行通信,需要java以及activemq支持.Mcollective官文说明:功能1.管理/控制/执行服务软件包进程信息Facterfactsping使用说明:#mcoTheMarionetteCollectiveversion1.3.2/usr/bin/mco:command(options)Knowncommands:findpgrepfactspingpuppetdhelpcontrollerrpcinventoryservice需要更多功能,可以安装更多插件Mcollective使用示例[root@puppet1~]#mcofindclient1.test.compuppet1client2.test.com[root@puppet1~]##mcopingclient1.test.comtime=56.11msclient2.test.comtime=95.86mspuppet1time=96.78ms----pingstatistics----3repliesmax:96.78min:56.11avg:82.92[root@puppet1~]#mcopuppetdstatus*[===================================================]3/3client1.test.comCurrentlystopped;lastcompletedrun9663secondsagopuppet1Currentlyidling;lastcompletedrun1665580secondsagoclient2..test.comCurrentlyidling;lastcompletedrun149secondsagoFinishedprocessing3/3hostsin36.27msPuppetmcollective使用示例MCollect使用示例[root@puppet1~]#mcopgrepruby*[======================================================]3/3client1.test.comPIDUSERVSZCOMMAND9955root112.996MBruby/usr/sbin/mcollectived--pid=/var/run/mcollectived.pidclient2.test.comPIDUSERVSZCOMMAND5717root113.801MBruby/usr/sbin/mcollectived--pid=/var/run/mcollectived.pid25631root153.289MB/usr/bin/ruby/usr/sbin/puppetd--server=puppetmaster1--log----processliststats----Matchedhosts:2Matchedprocesses:3ResidentSize:28.917MBVirtualSize:380.086MBFinishedprocessing3/3hostsin198.42mspuppet+func管理Func全称为FedoraUnifiedNetworkController(Fedora统一网络控制器),由Fedara社区维护的一款用于服务器自动化远程管理的工具。有如下特性:①Func可以在主控机上一次管理任意多台服务器,或任意多个服务器组;②Func基于Certmaster()建立了Master–Slaves主从SSL证书管控体系,可以将证书自动分发到所有受控服务器;①Func命令行可以直接发送远程命令或者远程获取数据;Func开发者已经完成了大多数常用任务模块的开发:CommandModule、FileTrackerMo