SlideShare a Scribd company logo
puppet安装测试<br />一、Puppet可以实现如下功能<br />随着服务器的增加,传统的系统维护方法有点捉襟见肘,于是出现了配置管理软件,利用配置管理,可以把整个公司的服务器的所有配置内容管理起来,方便大规模的管理以及快速的部署。<br />Puppet就是一个为实现数据库中心自动化管理而设计的C/S模式配置管理软件。<br />二、Puppet的几个概念<br />服务器端和客户端:服务器端保存和推送配置到客户端;<br />清单(manifest):服务器端保存的客户端配置文件,客户端下载了manifest以后就可以应用。<br />资源:客户端配置中能管理到的对象被称为资源,常见(但不限于)的资源有:<br />文件 用户组 用户 软件包 yum库 服务 crontab任务 文件系统挂载 zfs hosts主机管理 exec<br />三、试验说明<br />本试验分为两部分:<br />1.首先安装建立一个puppet的C/S模型;<br />在两台服务器上分别安装puppet,其中一个是服务器端,一个是客户端。<br />待到服务器端和客户端都安装完成,客户端可以从服务器端获得一个Manifest,并依此修改一个文件,本段试验完成。<br />2.测试最常用的资源的推送应用。<br />四、实验环境的系统介绍<br />服务端:192.168.118.15 server.puppet.com<br />客户端:192.168.118.152 client.puppet.com<br />OS/Kernal:CentOS release 5.4 (Final)2.6.18-164.el5 #1 SMP<br />五、安装Puppet前的软件准备(以服务器端为例)<br />1.添加puppet用户<br />groupadd puppet<br />useradd -g puppet -s /bin/false -M puppet<br />2.修改Host文件<br />echo quot;
192.168.118.151 server server.puppet.comquot;
 >> /etc/hosts<br />echo quot;
192.168.118.152 client client.puppet.comquot;
 >> /etc/hosts<br />3.安装ruby<br />puppet是基于ruby开发的,所以必须安装ruby,可以使用yum或rpm安装ruby<br />rpm  -qa|grep ruby<br />ruby-libs-1.8.5-5.el5_3.7<br />ruby-1.8.5-5.el5_3.7<br />4.安装facter<br />facter是官方wiki上提到必须要安装的一个包,是用来搜集当前安装系统的环境变量信息的<br />wget http://projects.puppetlabs.com/attachments/download/1101/facter-1.5.8.tar.gz<br />tar zxf facter-1.5.8.tar.gz && cd facter-1.5.8/<br />ruby install.rb && cd ~<br />#执行以下这个命令就可以看到facter获取到的变量名和内容<br />facter<br />请在客户端client上也执行上述命令。<br />六、开始安装Puppet(以服务器端server为例)<br />wget http://projects.puppetlabs.com/attachments/download/1114/puppet-2.6.1.tar.gz<br />tar xzf puppet-2.6.1.tar.gz && cd puppet-2.6.1<br />ruby install.rb  <br />#安装完成后我们要拷贝默认的配置文件到/etc/puppet<br />cp conf/redhat/* /etc/puppet/ && cd ~<br />七、验证安装成功<br />puppet master<br />ps -ef|grep  puppet<br />puppet 1871 1 0 23:02 ? 00:00:00 /usr/bin/ruby /usr/bin/puppet master<br />请在客户端client上也执行上述命令。<br />八、服务器端设定<br />1.将puppetmasterd设置为服务,并自启动<br />cp /etc/puppet/server.init  /etc/init.d/puppetmasterd<br />chmod  755 /etc/init.d/puppetmasterd<br />chkconfig --add puppetmasterd<br />chkconfig --level 35  puppetmasterd  on<br />service puppetmasterd  start<br />2.防火墙和端口设定<br />puppet服务器端默认使用8140端口监听服务,需要在iptables上开启该端口<br />iptables -A INPUT  -p tcp --dport 8140 -j ACCEPT<br />#请在/etc/sysconfig/iptables 中加入上文的规则,并重启iptables<br />九、审批证书<br />1.客户端申请证书<br />telnet  server.puppet.com 8140<br />#验证解析和链接是否正常<br />Trying 192.168.118.151...<br />Connected to Server.puppet.com (192.168.118.151).<br />Escape character is '^]'.<br />Connection closed by foreign host.<br />puppetd --test  --server server.puppet.com<br />#向服务器端申请证书<br />warning: peer certificate won't be verified in this SSL session<br />info: Caching certificate for ca<br />warning: peer certificate won't be verified in this SSL session<br />warning: peer certificate won't be verified in this SSL session<br />info: Creating a new SSL certificate request for client.puppet.com<br />info: Certificate Request fingerprint <br />(md5): C5:5A:5E:A9:04:44:CF:A7:F3:46:14:6A:C7:C1:24:C8<br />warning: peer certificate won't be verified in this SSL session<br />warning: peer certificate won't be verified in this SSL session<br />warning: peer certificate won't be verified in this SSL session<br />Exiting; no certificate found and waitforcert is disabled<br />2.服务器接受申请<br />#查看当前待批准证书列表<br />puppetca  --list<br />client.puppet.com<br />#批准当前证书<br />puppetca  -s client.puppet.com<br />notice: Signed certificate request for client.puppet.com<br />notice: Removing file Puppet::SSL::CertificateRequest client.puppet.com at '/var/lib/puppet/ssl/ca/requests/client.puppet.com.pem'<br />3.客户端取回已经通过审批的证书<br />puppetd --test  --server server.puppet.com<br />warning: peer certificate won't be verified in this SSL session<br />info: Caching certificate for client.puppet.com<br />info: Caching certificate_revocation_list for ca<br />info: Caching catalog for client.puppet.com<br />info: Applying configuration version '1287374005'<br />info: Creating state file /var/lib/puppet/state/state.yaml<br />notice: Finished catalog run in 0.01 seconds<br />注意上文中的红色粗体部分,生成证书时主机名会写入证书,如果生成证书后再更改主机名证书就失效了<br />而且请不要用client这类简写名字,而应该用client.puppet.com这类全名申请证书<br />4.重新审批旧机器的新证书<br />当申请到证书以后我们对比下这两个文件,他们的MD5值是一样的.<br />#这是服务器端<br />md5sum /var/lib/puppet/ssl/ca/signed/client.puppet.com.pem<br />b750f6702d7958b6af40819572de3e7d  /var/lib/puppet/ssl/ca/signed/client.puppet.com.pem<br />#这是客户端<br />md5sum /var/lib/puppet/ssl/certs/client.puppet.com.pem<br />b750f6702d7958b6af40819572de3e7d  /var/lib/puppet/ssl/certs/client.puppet.com.pem<br />其实申请证书的过程就是服务器端生成证书,并发送到客户端的过程。<br />如果因为意外要重新给旧机器审批证书,我们需要做以下两点才可以重新注册。<br />rm  -f /var/lib/puppet/ssl/ca/signed/client.puppet.com.pem<br />#服务器端需要删除已经注册给客户机“client.puppet.com”的证书。<br />rm -rf  /var/lib/puppet/ssl/<br />#客户端也需要删掉SSL目录。<br />十、功能测试<br />在服务器端新建一个/etc/puppet/manifests/site.pp文件,大意是在/tmp下创建caotest.txt测试文件。<br />vim /etc/puppet/manifests/site.pp<br />node default {<br />file {quot;
/tmp/caotest.txtquot;
: <br />content=>quot;
I'm Caotest PUPPETquot;
; }<br />}<br />#初次创建这个文件需要重启服务<br />/etc/init.d/puppetmasterd  restart<br />在客户端执行命令会得到如下提示信息:<br />puppetd --test  --server server.puppet.com<br />info: Caching catalog for client.puppet.com<br />info: Applying configuration version '1287350100'<br />notice: /Stage[main]//Node[default]/File[/tmp/caotest.txt]/ensure: defined content as '{md5}366e5662f290439eef7b150b2b0228d1'<br />notice: Finished catalog run in 0.07 seconds<br />cat /tmp/caotest.txt<br />I'm Caotest PUPPET<br />十一、客户端设置守护进程<br />puppetd --server server.puppet.com --verbose --waitforcert 60<br /># --server 告诉它master结点的ip,--waitforcert是说每60秒去server检查,--verbose是可选的输出冗余信息<br />至此,Puppet C/S环境搭建完毕,接下来会进行更深入的配置文件语法介绍和不同类型的资源调节、测试。<br />十一、最简单的mainfest<br />node default { <br />file {<br />quot;
/tmp/caotest.txtquot;
:<br />content=>quot;
I'm Caotest PUPPETquot;
}<br />}<br />说明:<br />下面就以刚才的示例文件来举例说明puppet的配置文件语法<br />node default {                 #节点设置,default是所有节点都会应用的设置;<br />file {                                  #file{…}定义了资源的类型是文件;<br />quot;
/tmp/caotest.txtquot;
:              #资源的title,在未设置文件名时兼职做文件名;<br />content=>quot;
test1quot;
              #content定义内容的动作,引号里是具体的内容;<br />} <br />}                              #中括号内的设置都会应用到default节点上;<br />十二、稍微有些变化的例子<br />node 'www','resin' {<br />file { <br />caotest2: <br />name  => quot;
/tmp/caotest2.logquot;
, <br />content=>quot;
I'm Caotest2 PUPPET. <br />Beijing huanying ni !<br />test 1234.quot;
 <br />}<br />service { <br />cups: <br />ensure =>stopped; <br />xfs: <br />ensure =>stopped; <br />}<br />}<br />import quot;
idctest/sky.ppquot;
 <br />说明:<br />node 'www','resin' {         #只指定www和resin两个节点会执行下面的操作;<br />file {                                  #file{…}定义了资源的类型是文件;<br />caotest2:                                #这次资源title不兼职做文件名了;<br />name  => quot;
/tmp/caotest2.logquot;
,           #这是上次例子中被省略掉的name项;<br />content=>quot;
I'm Caotest2 PUPPET.          #这次我故意将1行内容扩展为三行;<br />Beijing huanying ni !<br />test 1234.quot;
                                         #这里才是文件的结尾;<br />}<br />service {                                   #这是另一种资源类型“service”;<br />cups:                                        #资源title和name都是cups;<br />ensure =>stopped;                                  #执行关闭服务的命令;<br />xfs:                                  #在同一资源类型里定义另一个资源;<br />ensure =>stopped;                       #实际上好几种服务并不支持这样关闭,这是为了说明语法;<br />}<br />#上文中的引号和扩号已经标识的很清楚了,但是诸如冒号(资源名后面)、逗号(资源内属性区分),分号(同一类型内不同资源区分)都很容易被忽略导致语法错误,特用红色加粗字体注明;<br />}<br />import quot;
idctest/sky.ppquot;
  #此处类似apache的include可以用相对路径和绝对路径;<br />puppet的实际配置语法并不是太严格,比如说在某些不会引起歧义的地方少个逗号或者分号,在做部分资源定义的时候并不要都加上引号。<br />十三、配置puppet文件服务<br />配置puppet文件服务很简单,修改下文配置文件并重启服务<br />egrep -v quot;
^#|^$quot;
 /etc/puppet/fileserver.conf<br />[hosts123] <br />path /etc/puppet/client_conf/hosts<br />allow * <br />[code]<br />path /etc/puppet/client_conf/code<br />allow *<br />/etc/init.d/puppetmasterd restart<br />#重启服务<br />说明:<br />[hosts123]                                    #设置模块名字为“hosts123”;<br />path /etc/puppet/client_conf/hosts                                #模块路径;<br />allow *              #用allow、deny来限制使用者,设置为*是允许所有人访问;<br />[code]                                           #设置模块名字为“code”;<br />path /etc/puppet/client_conf/code                                #模块路径;<br />allow *              #用allow、deny来限制使用者,设置为*是允许所有人访问;<br />十四、File资源的几个主要属性<br />下面是截取的一段manifests以对节点cms进行配置为例讲解常用file资源属性:<br />node ' client.puppet.com ' {<br />file {quot;
/etc/hostsquot;
:<br />source => quot;
puppet://server. puppet.com/hosts123/host1quot;
,<br />backup => quot;
.bak_$uptime_secondsquot;
,<br />}<br />file {quot;
/tmp/testfile1quot;
:<br />source => quot;
/etc/sysconfig/i18nquot;
,<br />backup => quot;
.bak_$uptime_secondsquot;
,<br />group => daemon, <br />owner => daemon,<br />mode => 600;<br />}<br />$aaa = quot;
ceshi bianliangquot;
<br />file {quot;
/tmp/testfile2quot;
:<br />content => $aaa}<br />file { <br />/tmp/testfile3:<br />ensure => quot;
/etc/sysconfig/networkquot;
; <br />/tmp/testfile4:<br />ensure => absent;<br />/tmp/testfile5:<br />ensure => present; <br />/tmp/testdir1:<br />ensure => directory;<br />/tmp/testdir2/:<br />ensure => absent,<br />force => true;<br />}<br />file {/tmp/testdir3: <br />ensure  => directory,<br />source  => quot;
puppet://server. puppet.com/codequot;
,<br />ignore  => '*log*',<br />recurse => true,<br />purge   => true, <br />force   => true,<br />}<br />}<br />说明:<br />node 'client.puppet.com' {         #配置只对节点名为quot;
 client.puppet.com quot;
的服务器生效;<br />file {quot;
/etc/hostsquot;
:             #定义同步hosts文件;资源title和path二合一的表示方法;<br />source => quot;
puppet://server.puppet.com/hosts123/host1quot;
,<br />#数据来源自puppet文件服务器,其中quot;
hosts123quot;
是上文文件服务器中设置的模块名;<br />#源文件在服务器端的绝对路径是/etc/puppet/client_conf/hosts/host1;<br />backup => quot;
.bak_$uptime_secondsquot;
,<br />}<br />file {quot;
/tmp/testfile1quot;
:<br />source => quot;
/etc/sysconfig/i18nquot;
,         #文件取自客户机本机的绝对路径,并非服务器;<br />backup => quot;
.bak_$uptime_secondsquot;
,<br />#这是可选项,在替换文件时可以对源文件进行备份,quot;
.bakquot;
以点开头;<br />#说要通过原名加后缀名的方式做备份,$uptime_seconds是前文安装的facter软件提取的变量,选开机秒数做命名是考虑到不易重名;<br />假设当前开机了15554秒,备份后的/tmp/testfile1的全名应该为“/tmp/testfile1.bak_15554”;<br />group => daemon,                                           #设置文件属组;<br />owner => daemon,                                          #设置文件属主;<br />mode => 600;                                              #设置文件权限;<br />}<br />$aaa = quot;
ceshi bianliangquot;
                     #也可以给变量赋值,随意设定变量aaa;<br />file {quot;
/tmp/testfile2quot;
:<br />content => $aaa}                             #变量的内容可以直接导入到文件内;<br />file {                                        #测试一个叫做ensure的资源属性;<br />/tmp/testfile3:<br />ensure => quot;
/etc/sysconfig/networkquot;
;             #将/etc/sysconfig/network做个软链接;<br />/tmp/testfile4:<br />ensure => absent;                     #absent是检测文件是否存在,如果存在则删除;<br />/tmp/testfile5:<br />ensure=>present;                           #present正好相反,如果不存在则创建;<br />/tmp/testdir1:<br />ensur=>directory;                                    #创建一个目录的方法;<br />/tmp/testdir2/:                   #可以看到,资源定义里写不写最后一个斜杠都没关系;<br />ensure=>absent,                                    #这是删除一个目录的方法;<br />force=>true;          #删除目录必须加上这个参数,目录下的文件、子目录都被强制删除;<br />}<br />file {/tmp/testdir3:                     #尝试整目录内的内容的复制,跟rsync差不多;<br />ensure=>directory,                                #定义这是个必须存在的目录;<br />source=>quot;
puppet://server.puppet.com /codequot;
,                    #指定数据的来源;<br />ignore=>'*log*',             #排除不同步的log目录和文件,支持shell下常用的通配符;<br />recurse=>true,                                #是否递归到子目录,该选项必须选;<br />purge=>true,                      #是否要删除服务器端没有而客户端有的文件(可选项);<br />force=>true,                 #配合上文,如果要删除的是子目录就需要加上force参数;<br />}<br />}                                            #整个节点的括号,一定不要忘记.<br />十五、服务器端准备测试用源文件<br />请按照我下文中tree的结果创建测试文件<br />pwd<br />/etc/puppet/client_conf     #注意我当前所在的目录;<br />tree<br />|-- code           #这是code模块,我们测试多文件复制功能,可以都是空文件;<br />|   |-- codea<br />|   |-- debuglog          #这些带log/tmp/bak的目录和文件是用来测试排除功能的;<br />|   |-- logs<br />|   |   `-- aaa          #测试目录被排除、但文件不被排除的情况;<br />|   |-- logs-java<br />|   `-- work     #这是测试多级深层目录用的;<br />|       |-- code_bak<br />|       |   `-- codea<br />|       |-- user_log           #测试多级目录是否仍然有排除功能;<br />|       `-- woking<br />`-- hosts           #这个文件夹里的文件不能是空文件,必须是能正常解析服务器和客户机名的正确hosts文件,建议拷贝客户端现在使用的hosts;<br />`-- host1<br />十六、在客户端执行“puppetd --test --server server.puppet.com”,检查以下要点:<br />1.服务器端的host1文件内容是否同步到了本机,且改名为hosts了。<br />2./tmp/testfile1是否创建了,且内容和本机/etc/sysconfig/i18n一致,属主、属组、权限是否符合设定要求;<br />3./tmp/testfile2的文件内容是否是“ceshi bianliang”;<br />4./tmp/testfile3是不是一个连接到network的软连接;<br />5./tmp/testfile5是否被创建;<br />6./tmp/testdir1是否被创建,且是一个目录;<br />7./tmp/testdir3目录是否被创建,文件、子目录是否被创建,按文件名匹配是否排除了log?<br />十七、二次调试<br />刚才只是创建了一些文件,我们模拟一下这些文件的维护工作。<br />首先我们在服务器端更改一些文件:<br />1.修改host1,在文尾加入“#test 111”,请注意不要忽略井号。<br />2.模拟更新代码,修改并添加几个code目录下不会被排除的文件;<br />然后在客户端做如下设置:<br />1.修改/etc/hosts,在文尾加入“#test 222”;<br />2.给/etc/sysconfig/i18n在文尾加入“#test 333”;<br />3.手工创建/tmp/testfile4;<br />4.手工创建/tmp/testdir2,并在该目录下新建一些子文件夹和文件;<br />5.模拟程序运行过程中会产生一些临时文件,在/tmp/testdir3下改动新建一个叫做client_log的文件;<br />6.模拟骇客入侵恶意修改主页,修改/tmp/testdir3/codea;<br />十八、再次在客户端执行同步命令,同步完成后检查如下要点:<br />1./etc/hosts中客户端修改的部分被擦除,服务器端修改的部分被保留,且留下了名为/etc/hosts.bak_xxxxx的备份文件;<br />2./tmp/testfile1的内容和/etc/sysconfig/i18n同步更新,且留下了/tmp/testfile1.bak_xxxxx的备份文件;<br />3./tmp/testfile4被删除<br />4./tmp/testdir2目录是否被移除;<br />5.检查/tmp/testdir3下是否完成了代码更新工作;<br />6.检查/tmp/testdir3下的client_log文件是否被删除;<br />7.检查被骇客修改过的/tmp/testdir3/codea是否恢复了正常。<br />额外测试<br />功能限制<br />1.在使用中大家请注意,对部分需要转义符去除特殊含义的目录和文件,puppet在处理时会出现故障<br />如我们在客户机新建一个包含中括号的文件“/tmp/testdir3/a[d]”,然后客户端执行同步命令就会报错<br />Failed to generate additional resources using 'eval_generate': Invalid tag quot;
/tmp/testdir3/aquot;
<br />2.purge并不会和ignore协同工作;<br />比如说我首先注释掉了“ignore  => '*log*'”,然后客户端更新,会将服务器端包含log的文件也更新下来;<br />然后再重新让“ignore  => '*log*'”生效,客户端的log文件并不会被删除。<br />
Puppet安装测试
Puppet安装测试
Puppet安装测试
Puppet安装测试
Puppet安装测试
Puppet安装测试
Puppet安装测试
Puppet安装测试
Puppet安装测试
Puppet安装测试
Puppet安装测试
Puppet安装测试
Puppet安装测试
Puppet安装测试

More Related Content

What's hot

Phpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniterPhpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniter
Bo-Yi Wu
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践yiditushe
 
PHPUnit 入門介紹
PHPUnit 入門介紹PHPUnit 入門介紹
PHPUnit 入門介紹
Jace Ju
 
Maintainable PHP Source Code
Maintainable PHP Source CodeMaintainable PHP Source Code
Maintainable PHP Source Code
Bo-Yi Wu
 
Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出
wang hongjiang
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集
zhen chen
 
部分PHP问题总结[转贴]
部分PHP问题总结[转贴]部分PHP问题总结[转贴]
部分PHP问题总结[转贴]wensheng wei
 
Rest Ruby On Rails
Rest Ruby On RailsRest Ruby On Rails
Rest Ruby On Railsshaokun
 
Perl在nginx里的应用
Perl在nginx里的应用Perl在nginx里的应用
Perl在nginx里的应用
琛琳 饶
 
Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解
zany_hui
 
六步教你学会简单Rmi
六步教你学会简单Rmi六步教你学会简单Rmi
六步教你学会简单Rmiyiditushe
 
Java7 fork join framework and closures
Java7 fork join framework and closuresJava7 fork join framework and closures
Java7 fork join framework and closures
wang hongjiang
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
Bo-Yi Wu
 
Spring 2.0 技術手冊導讀
Spring 2.0 技術手冊導讀Spring 2.0 技術手冊導讀
Spring 2.0 技術手冊導讀
Justin Lin
 
Hadoop基线选定
Hadoop基线选定Hadoop基线选定
Hadoop基线选定
baggioss
 
Spring 2.0 技術手冊第二章 - Spring 入門
Spring 2.0 技術手冊第二章 - Spring 入門Spring 2.0 技術手冊第二章 - Spring 入門
Spring 2.0 技術手冊第二章 - Spring 入門
Justin Lin
 
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
Justin Lin
 
Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)
wang hongjiang
 

What's hot (20)

Phpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniterPhpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniter
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践
 
PHPUnit 入門介紹
PHPUnit 入門介紹PHPUnit 入門介紹
PHPUnit 入門介紹
 
Maintainable PHP Source Code
Maintainable PHP Source CodeMaintainable PHP Source Code
Maintainable PHP Source Code
 
Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集
 
部分PHP问题总结[转贴]
部分PHP问题总结[转贴]部分PHP问题总结[转贴]
部分PHP问题总结[转贴]
 
Rest Ruby On Rails
Rest Ruby On RailsRest Ruby On Rails
Rest Ruby On Rails
 
Perl在nginx里的应用
Perl在nginx里的应用Perl在nginx里的应用
Perl在nginx里的应用
 
Jvm内存管理基础
Jvm内存管理基础Jvm内存管理基础
Jvm内存管理基础
 
Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解
 
六步教你学会简单Rmi
六步教你学会简单Rmi六步教你学会简单Rmi
六步教你学会简单Rmi
 
Java7 fork join framework and closures
Java7 fork join framework and closuresJava7 fork join framework and closures
Java7 fork join framework and closures
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
 
Spring 2.0 技術手冊導讀
Spring 2.0 技術手冊導讀Spring 2.0 技術手冊導讀
Spring 2.0 技術手冊導讀
 
Ali-tomcat
Ali-tomcatAli-tomcat
Ali-tomcat
 
Hadoop基线选定
Hadoop基线选定Hadoop基线选定
Hadoop基线选定
 
Spring 2.0 技術手冊第二章 - Spring 入門
Spring 2.0 技術手冊第二章 - Spring 入門Spring 2.0 技術手冊第二章 - Spring 入門
Spring 2.0 技術手冊第二章 - Spring 入門
 
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
 
Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)
 

Viewers also liked

永不宕机的服务器-Qcon2011
永不宕机的服务器-Qcon2011永不宕机的服务器-Qcon2011
永不宕机的服务器-Qcon2011Yiwei Ma
 
Открытие банковского счета и банковские кредиты в Финляндии
Открытие банковского счета и банковские кредиты в ФинляндииОткрытие банковского счета и банковские кредиты в Финляндии
Открытие банковского счета и банковские кредиты в Финляндии
St. Petersburg Foundation for SME Development
 
Ict.cluster.st.petersburg
Ict.cluster.st.petersburgIct.cluster.st.petersburg
The.first.st.petersburg.business.incubator
The.first.st.petersburg.business.incubatorThe.first.st.petersburg.business.incubator
The.first.st.petersburg.business.incubator
St. Petersburg Foundation for SME Development
 
Fact Finder
Fact FinderFact Finder
Деловые возможности региона Тампере - Кари Канкаала, Директор экономического ...
Деловые возможности региона Тампере - Кари Канкаала, Директор экономического ...Деловые возможности региона Тампере - Кари Канкаала, Директор экономического ...
Деловые возможности региона Тампере - Кари Канкаала, Директор экономического ...
St. Petersburg Foundation for SME Development
 

Viewers also liked (7)

St.petersburg.interregional.resource.center
St.petersburg.interregional.resource.centerSt.petersburg.interregional.resource.center
St.petersburg.interregional.resource.center
 
永不宕机的服务器-Qcon2011
永不宕机的服务器-Qcon2011永不宕机的服务器-Qcon2011
永不宕机的服务器-Qcon2011
 
Открытие банковского счета и банковские кредиты в Финляндии
Открытие банковского счета и банковские кредиты в ФинляндииОткрытие банковского счета и банковские кредиты в Финляндии
Открытие банковского счета и банковские кредиты в Финляндии
 
Ict.cluster.st.petersburg
Ict.cluster.st.petersburgIct.cluster.st.petersburg
Ict.cluster.st.petersburg
 
The.first.st.petersburg.business.incubator
The.first.st.petersburg.business.incubatorThe.first.st.petersburg.business.incubator
The.first.st.petersburg.business.incubator
 
Fact Finder
Fact FinderFact Finder
Fact Finder
 
Деловые возможности региона Тампере - Кари Канкаала, Директор экономического ...
Деловые возможности региона Тампере - Кари Канкаала, Директор экономического ...Деловые возможности региона Тампере - Кари Канкаала, Директор экономического ...
Деловые возможности региона Тампере - Кари Канкаала, Директор экономического ...
 

Similar to Puppet安装测试

第三方内容开发最佳实践
第三方内容开发最佳实践第三方内容开发最佳实践
第三方内容开发最佳实践taobao.com
 
Migrations 與 Schema 操作
Migrations 與 Schema 操作Migrations 與 Schema 操作
Migrations 與 Schema 操作
Shengyou Fan
 
Php应用程序常见安全问题解析
Php应用程序常见安全问题解析Php应用程序常见安全问题解析
Php应用程序常见安全问题解析
mysqlops
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newYiwei Ma
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档
xuebao_zx
 
康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)Yiwei Ma
 
C语言benchmark覆盖信息收集总结4
C语言benchmark覆盖信息收集总结4C语言benchmark覆盖信息收集总结4
C语言benchmark覆盖信息收集总结4Tao He
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作
Shengyou Fan
 
JavaScript 脚本控件(二)
JavaScript 脚本控件(二)JavaScript 脚本控件(二)
JavaScript 脚本控件(二)RANK LIU
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
self study
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
rewinx
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践Frank Cai
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
cachowu
 
Windowsîä¼þïµí³¹ýâëçý¶¯¿ª·¢½ì³ì(µú¶þ°æ)
Windowsîä¼þïµí³¹ýâëçý¶¯¿ª·¢½ì³ì(µú¶þ°æ)Windowsîä¼þïµí³¹ýâëçý¶¯¿ª·¢½ì³ì(µú¶þ°æ)
Windowsîä¼þïµí³¹ýâëçý¶¯¿ª·¢½ì³ì(µú¶þ°æ)rvillegasg
 
Nginx+常见应用技术指南
Nginx+常见应用技术指南Nginx+常见应用技术指南
Nginx+常见应用技术指南andy54321
 

Similar to Puppet安装测试 (20)

运维自动化
运维自动化运维自动化
运维自动化
 
第三方内容开发最佳实践
第三方内容开发最佳实践第三方内容开发最佳实践
第三方内容开发最佳实践
 
Migrations 與 Schema 操作
Migrations 與 Schema 操作Migrations 與 Schema 操作
Migrations 與 Schema 操作
 
Php应用程序常见安全问题解析
Php应用程序常见安全问题解析Php应用程序常见安全问题解析
Php应用程序常见安全问题解析
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 new
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档
 
康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)
 
C语言benchmark覆盖信息收集总结4
C语言benchmark覆盖信息收集总结4C语言benchmark覆盖信息收集总结4
C语言benchmark覆盖信息收集总结4
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作
 
JavaScript 脚本控件(二)
JavaScript 脚本控件(二)JavaScript 脚本控件(二)
JavaScript 脚本控件(二)
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
Win dbg入门
Win dbg入门Win dbg入门
Win dbg入门
 
Windbg入门
Windbg入门Windbg入门
Windbg入门
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
Windowsîä¼þïµí³¹ýâëçý¶¯¿ª·¢½ì³ì(µú¶þ°æ)
Windowsîä¼þïµí³¹ýâëçý¶¯¿ª·¢½ì³ì(µú¶þ°æ)Windowsîä¼þïµí³¹ýâëçý¶¯¿ª·¢½ì³ì(µú¶þ°æ)
Windowsîä¼þïµí³¹ýâëçý¶¯¿ª·¢½ì³ì(µú¶þ°æ)
 
Nginx+常见应用技术指南
Nginx+常见应用技术指南Nginx+常见应用技术指南
Nginx+常见应用技术指南
 
Web base 吴志华
Web base 吴志华Web base 吴志华
Web base 吴志华
 
Php
PhpPhp
Php
 

More from Yiwei Ma

Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconYiwei Ma
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconYiwei Ma
 
Taobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconTaobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconYiwei Ma
 
Alibaba server-zhangxuseng-qcon
Alibaba server-zhangxuseng-qconAlibaba server-zhangxuseng-qcon
Alibaba server-zhangxuseng-qconYiwei Ma
 
Zhongxing practice-suchunshan-qcon
Zhongxing practice-suchunshan-qconZhongxing practice-suchunshan-qcon
Zhongxing practice-suchunshan-qconYiwei Ma
 
Taobao practice-liyu-qcon
Taobao practice-liyu-qconTaobao practice-liyu-qcon
Taobao practice-liyu-qcon
Yiwei Ma
 
Thoughtworks practice-hukai-qcon
Thoughtworks practice-hukai-qconThoughtworks practice-hukai-qcon
Thoughtworks practice-hukai-qconYiwei Ma
 
Ufida design-chijianqiang-qcon
Ufida design-chijianqiang-qconUfida design-chijianqiang-qcon
Ufida design-chijianqiang-qconYiwei Ma
 
Spring design-juergen-qcon
Spring design-juergen-qconSpring design-juergen-qcon
Spring design-juergen-qcon
Yiwei Ma
 
Netflix web-adrian-qcon
Netflix web-adrian-qconNetflix web-adrian-qcon
Netflix web-adrian-qcon
Yiwei Ma
 
Google arch-fangkun-qcon
Google arch-fangkun-qconGoogle arch-fangkun-qcon
Google arch-fangkun-qcon
Yiwei Ma
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconYiwei Ma
 
Alibaba arch-jiangtao-qcon
Alibaba arch-jiangtao-qconAlibaba arch-jiangtao-qcon
Alibaba arch-jiangtao-qconYiwei Ma
 
Twitter keynote-evan-qcon
Twitter keynote-evan-qconTwitter keynote-evan-qcon
Twitter keynote-evan-qconYiwei Ma
 
Netflix keynote-adrian-qcon
Netflix keynote-adrian-qconNetflix keynote-adrian-qcon
Netflix keynote-adrian-qcon
Yiwei Ma
 
Facebook keynote-nicolas-qcon
Facebook keynote-nicolas-qconFacebook keynote-nicolas-qcon
Facebook keynote-nicolas-qcon
Yiwei Ma
 
Domainlang keynote-eric-qcon
Domainlang keynote-eric-qconDomainlang keynote-eric-qcon
Domainlang keynote-eric-qcon
Yiwei Ma
 
Devjam keynote-david-qcon
Devjam keynote-david-qconDevjam keynote-david-qcon
Devjam keynote-david-qcon
Yiwei Ma
 
Baidu keynote-wubo-qcon
Baidu keynote-wubo-qconBaidu keynote-wubo-qcon
Baidu keynote-wubo-qconYiwei Ma
 
淘宝线上线下性能跟踪体系和容量规划-Qcon2011
淘宝线上线下性能跟踪体系和容量规划-Qcon2011淘宝线上线下性能跟踪体系和容量规划-Qcon2011
淘宝线上线下性能跟踪体系和容量规划-Qcon2011Yiwei Ma
 

More from Yiwei Ma (20)

Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qcon
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qcon
 
Taobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconTaobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qcon
 
Alibaba server-zhangxuseng-qcon
Alibaba server-zhangxuseng-qconAlibaba server-zhangxuseng-qcon
Alibaba server-zhangxuseng-qcon
 
Zhongxing practice-suchunshan-qcon
Zhongxing practice-suchunshan-qconZhongxing practice-suchunshan-qcon
Zhongxing practice-suchunshan-qcon
 
Taobao practice-liyu-qcon
Taobao practice-liyu-qconTaobao practice-liyu-qcon
Taobao practice-liyu-qcon
 
Thoughtworks practice-hukai-qcon
Thoughtworks practice-hukai-qconThoughtworks practice-hukai-qcon
Thoughtworks practice-hukai-qcon
 
Ufida design-chijianqiang-qcon
Ufida design-chijianqiang-qconUfida design-chijianqiang-qcon
Ufida design-chijianqiang-qcon
 
Spring design-juergen-qcon
Spring design-juergen-qconSpring design-juergen-qcon
Spring design-juergen-qcon
 
Netflix web-adrian-qcon
Netflix web-adrian-qconNetflix web-adrian-qcon
Netflix web-adrian-qcon
 
Google arch-fangkun-qcon
Google arch-fangkun-qconGoogle arch-fangkun-qcon
Google arch-fangkun-qcon
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qcon
 
Alibaba arch-jiangtao-qcon
Alibaba arch-jiangtao-qconAlibaba arch-jiangtao-qcon
Alibaba arch-jiangtao-qcon
 
Twitter keynote-evan-qcon
Twitter keynote-evan-qconTwitter keynote-evan-qcon
Twitter keynote-evan-qcon
 
Netflix keynote-adrian-qcon
Netflix keynote-adrian-qconNetflix keynote-adrian-qcon
Netflix keynote-adrian-qcon
 
Facebook keynote-nicolas-qcon
Facebook keynote-nicolas-qconFacebook keynote-nicolas-qcon
Facebook keynote-nicolas-qcon
 
Domainlang keynote-eric-qcon
Domainlang keynote-eric-qconDomainlang keynote-eric-qcon
Domainlang keynote-eric-qcon
 
Devjam keynote-david-qcon
Devjam keynote-david-qconDevjam keynote-david-qcon
Devjam keynote-david-qcon
 
Baidu keynote-wubo-qcon
Baidu keynote-wubo-qconBaidu keynote-wubo-qcon
Baidu keynote-wubo-qcon
 
淘宝线上线下性能跟踪体系和容量规划-Qcon2011
淘宝线上线下性能跟踪体系和容量规划-Qcon2011淘宝线上线下性能跟踪体系和容量规划-Qcon2011
淘宝线上线下性能跟踪体系和容量规划-Qcon2011
 

Puppet安装测试

  • 1. puppet安装测试<br />一、Puppet可以实现如下功能<br />随着服务器的增加,传统的系统维护方法有点捉襟见肘,于是出现了配置管理软件,利用配置管理,可以把整个公司的服务器的所有配置内容管理起来,方便大规模的管理以及快速的部署。<br />Puppet就是一个为实现数据库中心自动化管理而设计的C/S模式配置管理软件。<br />二、Puppet的几个概念<br />服务器端和客户端:服务器端保存和推送配置到客户端;<br />清单(manifest):服务器端保存的客户端配置文件,客户端下载了manifest以后就可以应用。<br />资源:客户端配置中能管理到的对象被称为资源,常见(但不限于)的资源有:<br />文件 用户组 用户 软件包 yum库 服务 crontab任务 文件系统挂载 zfs hosts主机管理 exec<br />三、试验说明<br />本试验分为两部分:<br />1.首先安装建立一个puppet的C/S模型;<br />在两台服务器上分别安装puppet,其中一个是服务器端,一个是客户端。<br />待到服务器端和客户端都安装完成,客户端可以从服务器端获得一个Manifest,并依此修改一个文件,本段试验完成。<br />2.测试最常用的资源的推送应用。<br />四、实验环境的系统介绍<br />服务端:192.168.118.15 server.puppet.com<br />客户端:192.168.118.152 client.puppet.com<br />OS/Kernal:CentOS release 5.4 (Final)2.6.18-164.el5 #1 SMP<br />五、安装Puppet前的软件准备(以服务器端为例)<br />1.添加puppet用户<br />groupadd puppet<br />useradd -g puppet -s /bin/false -M puppet<br />2.修改Host文件<br />echo quot; 192.168.118.151 server server.puppet.comquot; >> /etc/hosts<br />echo quot; 192.168.118.152 client client.puppet.comquot; >> /etc/hosts<br />3.安装ruby<br />puppet是基于ruby开发的,所以必须安装ruby,可以使用yum或rpm安装ruby<br />rpm -qa|grep ruby<br />ruby-libs-1.8.5-5.el5_3.7<br />ruby-1.8.5-5.el5_3.7<br />4.安装facter<br />facter是官方wiki上提到必须要安装的一个包,是用来搜集当前安装系统的环境变量信息的<br />wget http://projects.puppetlabs.com/attachments/download/1101/facter-1.5.8.tar.gz<br />tar zxf facter-1.5.8.tar.gz && cd facter-1.5.8/<br />ruby install.rb && cd ~<br />#执行以下这个命令就可以看到facter获取到的变量名和内容<br />facter<br />请在客户端client上也执行上述命令。<br />六、开始安装Puppet(以服务器端server为例)<br />wget http://projects.puppetlabs.com/attachments/download/1114/puppet-2.6.1.tar.gz<br />tar xzf puppet-2.6.1.tar.gz && cd puppet-2.6.1<br />ruby install.rb <br />#安装完成后我们要拷贝默认的配置文件到/etc/puppet<br />cp conf/redhat/* /etc/puppet/ && cd ~<br />七、验证安装成功<br />puppet master<br />ps -ef|grep puppet<br />puppet 1871 1 0 23:02 ? 00:00:00 /usr/bin/ruby /usr/bin/puppet master<br />请在客户端client上也执行上述命令。<br />八、服务器端设定<br />1.将puppetmasterd设置为服务,并自启动<br />cp /etc/puppet/server.init /etc/init.d/puppetmasterd<br />chmod 755 /etc/init.d/puppetmasterd<br />chkconfig --add puppetmasterd<br />chkconfig --level 35 puppetmasterd on<br />service puppetmasterd start<br />2.防火墙和端口设定<br />puppet服务器端默认使用8140端口监听服务,需要在iptables上开启该端口<br />iptables -A INPUT -p tcp --dport 8140 -j ACCEPT<br />#请在/etc/sysconfig/iptables 中加入上文的规则,并重启iptables<br />九、审批证书<br />1.客户端申请证书<br />telnet server.puppet.com 8140<br />#验证解析和链接是否正常<br />Trying 192.168.118.151...<br />Connected to Server.puppet.com (192.168.118.151).<br />Escape character is '^]'.<br />Connection closed by foreign host.<br />puppetd --test --server server.puppet.com<br />#向服务器端申请证书<br />warning: peer certificate won't be verified in this SSL session<br />info: Caching certificate for ca<br />warning: peer certificate won't be verified in this SSL session<br />warning: peer certificate won't be verified in this SSL session<br />info: Creating a new SSL certificate request for client.puppet.com<br />info: Certificate Request fingerprint <br />(md5): C5:5A:5E:A9:04:44:CF:A7:F3:46:14:6A:C7:C1:24:C8<br />warning: peer certificate won't be verified in this SSL session<br />warning: peer certificate won't be verified in this SSL session<br />warning: peer certificate won't be verified in this SSL session<br />Exiting; no certificate found and waitforcert is disabled<br />2.服务器接受申请<br />#查看当前待批准证书列表<br />puppetca --list<br />client.puppet.com<br />#批准当前证书<br />puppetca -s client.puppet.com<br />notice: Signed certificate request for client.puppet.com<br />notice: Removing file Puppet::SSL::CertificateRequest client.puppet.com at '/var/lib/puppet/ssl/ca/requests/client.puppet.com.pem'<br />3.客户端取回已经通过审批的证书<br />puppetd --test --server server.puppet.com<br />warning: peer certificate won't be verified in this SSL session<br />info: Caching certificate for client.puppet.com<br />info: Caching certificate_revocation_list for ca<br />info: Caching catalog for client.puppet.com<br />info: Applying configuration version '1287374005'<br />info: Creating state file /var/lib/puppet/state/state.yaml<br />notice: Finished catalog run in 0.01 seconds<br />注意上文中的红色粗体部分,生成证书时主机名会写入证书,如果生成证书后再更改主机名证书就失效了<br />而且请不要用client这类简写名字,而应该用client.puppet.com这类全名申请证书<br />4.重新审批旧机器的新证书<br />当申请到证书以后我们对比下这两个文件,他们的MD5值是一样的.<br />#这是服务器端<br />md5sum /var/lib/puppet/ssl/ca/signed/client.puppet.com.pem<br />b750f6702d7958b6af40819572de3e7d /var/lib/puppet/ssl/ca/signed/client.puppet.com.pem<br />#这是客户端<br />md5sum /var/lib/puppet/ssl/certs/client.puppet.com.pem<br />b750f6702d7958b6af40819572de3e7d /var/lib/puppet/ssl/certs/client.puppet.com.pem<br />其实申请证书的过程就是服务器端生成证书,并发送到客户端的过程。<br />如果因为意外要重新给旧机器审批证书,我们需要做以下两点才可以重新注册。<br />rm -f /var/lib/puppet/ssl/ca/signed/client.puppet.com.pem<br />#服务器端需要删除已经注册给客户机“client.puppet.com”的证书。<br />rm -rf /var/lib/puppet/ssl/<br />#客户端也需要删掉SSL目录。<br />十、功能测试<br />在服务器端新建一个/etc/puppet/manifests/site.pp文件,大意是在/tmp下创建caotest.txt测试文件。<br />vim /etc/puppet/manifests/site.pp<br />node default {<br />file {quot; /tmp/caotest.txtquot; : <br />content=>quot; I'm Caotest PUPPETquot; ; }<br />}<br />#初次创建这个文件需要重启服务<br />/etc/init.d/puppetmasterd restart<br />在客户端执行命令会得到如下提示信息:<br />puppetd --test --server server.puppet.com<br />info: Caching catalog for client.puppet.com<br />info: Applying configuration version '1287350100'<br />notice: /Stage[main]//Node[default]/File[/tmp/caotest.txt]/ensure: defined content as '{md5}366e5662f290439eef7b150b2b0228d1'<br />notice: Finished catalog run in 0.07 seconds<br />cat /tmp/caotest.txt<br />I'm Caotest PUPPET<br />十一、客户端设置守护进程<br />puppetd --server server.puppet.com --verbose --waitforcert 60<br /># --server 告诉它master结点的ip,--waitforcert是说每60秒去server检查,--verbose是可选的输出冗余信息<br />至此,Puppet C/S环境搭建完毕,接下来会进行更深入的配置文件语法介绍和不同类型的资源调节、测试。<br />十一、最简单的mainfest<br />node default { <br />file {<br />quot; /tmp/caotest.txtquot; :<br />content=>quot; I'm Caotest PUPPETquot; }<br />}<br />说明:<br />下面就以刚才的示例文件来举例说明puppet的配置文件语法<br />node default { #节点设置,default是所有节点都会应用的设置;<br />file { #file{…}定义了资源的类型是文件;<br />quot; /tmp/caotest.txtquot; : #资源的title,在未设置文件名时兼职做文件名;<br />content=>quot; test1quot; #content定义内容的动作,引号里是具体的内容;<br />} <br />} #中括号内的设置都会应用到default节点上;<br />十二、稍微有些变化的例子<br />node 'www','resin' {<br />file { <br />caotest2: <br />name => quot; /tmp/caotest2.logquot; , <br />content=>quot; I'm Caotest2 PUPPET. <br />Beijing huanying ni !<br />test 1234.quot; <br />}<br />service { <br />cups: <br />ensure =>stopped; <br />xfs: <br />ensure =>stopped; <br />}<br />}<br />import quot; idctest/sky.ppquot; <br />说明:<br />node 'www','resin' { #只指定www和resin两个节点会执行下面的操作;<br />file { #file{…}定义了资源的类型是文件;<br />caotest2: #这次资源title不兼职做文件名了;<br />name => quot; /tmp/caotest2.logquot; , #这是上次例子中被省略掉的name项;<br />content=>quot; I'm Caotest2 PUPPET. #这次我故意将1行内容扩展为三行;<br />Beijing huanying ni !<br />test 1234.quot; #这里才是文件的结尾;<br />}<br />service { #这是另一种资源类型“service”;<br />cups: #资源title和name都是cups;<br />ensure =>stopped; #执行关闭服务的命令;<br />xfs: #在同一资源类型里定义另一个资源;<br />ensure =>stopped; #实际上好几种服务并不支持这样关闭,这是为了说明语法;<br />}<br />#上文中的引号和扩号已经标识的很清楚了,但是诸如冒号(资源名后面)、逗号(资源内属性区分),分号(同一类型内不同资源区分)都很容易被忽略导致语法错误,特用红色加粗字体注明;<br />}<br />import quot; idctest/sky.ppquot; #此处类似apache的include可以用相对路径和绝对路径;<br />puppet的实际配置语法并不是太严格,比如说在某些不会引起歧义的地方少个逗号或者分号,在做部分资源定义的时候并不要都加上引号。<br />十三、配置puppet文件服务<br />配置puppet文件服务很简单,修改下文配置文件并重启服务<br />egrep -v quot; ^#|^$quot; /etc/puppet/fileserver.conf<br />[hosts123] <br />path /etc/puppet/client_conf/hosts<br />allow * <br />[code]<br />path /etc/puppet/client_conf/code<br />allow *<br />/etc/init.d/puppetmasterd restart<br />#重启服务<br />说明:<br />[hosts123] #设置模块名字为“hosts123”;<br />path /etc/puppet/client_conf/hosts #模块路径;<br />allow * #用allow、deny来限制使用者,设置为*是允许所有人访问;<br />[code] #设置模块名字为“code”;<br />path /etc/puppet/client_conf/code #模块路径;<br />allow * #用allow、deny来限制使用者,设置为*是允许所有人访问;<br />十四、File资源的几个主要属性<br />下面是截取的一段manifests以对节点cms进行配置为例讲解常用file资源属性:<br />node ' client.puppet.com ' {<br />file {quot; /etc/hostsquot; :<br />source => quot; puppet://server. puppet.com/hosts123/host1quot; ,<br />backup => quot; .bak_$uptime_secondsquot; ,<br />}<br />file {quot; /tmp/testfile1quot; :<br />source => quot; /etc/sysconfig/i18nquot; ,<br />backup => quot; .bak_$uptime_secondsquot; ,<br />group => daemon, <br />owner => daemon,<br />mode => 600;<br />}<br />$aaa = quot; ceshi bianliangquot; <br />file {quot; /tmp/testfile2quot; :<br />content => $aaa}<br />file { <br />/tmp/testfile3:<br />ensure => quot; /etc/sysconfig/networkquot; ; <br />/tmp/testfile4:<br />ensure => absent;<br />/tmp/testfile5:<br />ensure => present; <br />/tmp/testdir1:<br />ensure => directory;<br />/tmp/testdir2/:<br />ensure => absent,<br />force => true;<br />}<br />file {/tmp/testdir3: <br />ensure => directory,<br />source => quot; puppet://server. puppet.com/codequot; ,<br />ignore => '*log*',<br />recurse => true,<br />purge => true, <br />force => true,<br />}<br />}<br />说明:<br />node 'client.puppet.com' { #配置只对节点名为quot; client.puppet.com quot; 的服务器生效;<br />file {quot; /etc/hostsquot; : #定义同步hosts文件;资源title和path二合一的表示方法;<br />source => quot; puppet://server.puppet.com/hosts123/host1quot; ,<br />#数据来源自puppet文件服务器,其中quot; hosts123quot; 是上文文件服务器中设置的模块名;<br />#源文件在服务器端的绝对路径是/etc/puppet/client_conf/hosts/host1;<br />backup => quot; .bak_$uptime_secondsquot; ,<br />}<br />file {quot; /tmp/testfile1quot; :<br />source => quot; /etc/sysconfig/i18nquot; , #文件取自客户机本机的绝对路径,并非服务器;<br />backup => quot; .bak_$uptime_secondsquot; ,<br />#这是可选项,在替换文件时可以对源文件进行备份,quot; .bakquot; 以点开头;<br />#说要通过原名加后缀名的方式做备份,$uptime_seconds是前文安装的facter软件提取的变量,选开机秒数做命名是考虑到不易重名;<br />假设当前开机了15554秒,备份后的/tmp/testfile1的全名应该为“/tmp/testfile1.bak_15554”;<br />group => daemon, #设置文件属组;<br />owner => daemon, #设置文件属主;<br />mode => 600; #设置文件权限;<br />}<br />$aaa = quot; ceshi bianliangquot; #也可以给变量赋值,随意设定变量aaa;<br />file {quot; /tmp/testfile2quot; :<br />content => $aaa} #变量的内容可以直接导入到文件内;<br />file { #测试一个叫做ensure的资源属性;<br />/tmp/testfile3:<br />ensure => quot; /etc/sysconfig/networkquot; ; #将/etc/sysconfig/network做个软链接;<br />/tmp/testfile4:<br />ensure => absent; #absent是检测文件是否存在,如果存在则删除;<br />/tmp/testfile5:<br />ensure=>present; #present正好相反,如果不存在则创建;<br />/tmp/testdir1:<br />ensur=>directory; #创建一个目录的方法;<br />/tmp/testdir2/: #可以看到,资源定义里写不写最后一个斜杠都没关系;<br />ensure=>absent, #这是删除一个目录的方法;<br />force=>true; #删除目录必须加上这个参数,目录下的文件、子目录都被强制删除;<br />}<br />file {/tmp/testdir3: #尝试整目录内的内容的复制,跟rsync差不多;<br />ensure=>directory, #定义这是个必须存在的目录;<br />source=>quot; puppet://server.puppet.com /codequot; , #指定数据的来源;<br />ignore=>'*log*', #排除不同步的log目录和文件,支持shell下常用的通配符;<br />recurse=>true, #是否递归到子目录,该选项必须选;<br />purge=>true, #是否要删除服务器端没有而客户端有的文件(可选项);<br />force=>true, #配合上文,如果要删除的是子目录就需要加上force参数;<br />}<br />} #整个节点的括号,一定不要忘记.<br />十五、服务器端准备测试用源文件<br />请按照我下文中tree的结果创建测试文件<br />pwd<br />/etc/puppet/client_conf #注意我当前所在的目录;<br />tree<br />|-- code #这是code模块,我们测试多文件复制功能,可以都是空文件;<br />| |-- codea<br />| |-- debuglog #这些带log/tmp/bak的目录和文件是用来测试排除功能的;<br />| |-- logs<br />| | `-- aaa #测试目录被排除、但文件不被排除的情况;<br />| |-- logs-java<br />| `-- work #这是测试多级深层目录用的;<br />| |-- code_bak<br />| | `-- codea<br />| |-- user_log #测试多级目录是否仍然有排除功能;<br />| `-- woking<br />`-- hosts #这个文件夹里的文件不能是空文件,必须是能正常解析服务器和客户机名的正确hosts文件,建议拷贝客户端现在使用的hosts;<br />`-- host1<br />十六、在客户端执行“puppetd --test --server server.puppet.com”,检查以下要点:<br />1.服务器端的host1文件内容是否同步到了本机,且改名为hosts了。<br />2./tmp/testfile1是否创建了,且内容和本机/etc/sysconfig/i18n一致,属主、属组、权限是否符合设定要求;<br />3./tmp/testfile2的文件内容是否是“ceshi bianliang”;<br />4./tmp/testfile3是不是一个连接到network的软连接;<br />5./tmp/testfile5是否被创建;<br />6./tmp/testdir1是否被创建,且是一个目录;<br />7./tmp/testdir3目录是否被创建,文件、子目录是否被创建,按文件名匹配是否排除了log?<br />十七、二次调试<br />刚才只是创建了一些文件,我们模拟一下这些文件的维护工作。<br />首先我们在服务器端更改一些文件:<br />1.修改host1,在文尾加入“#test 111”,请注意不要忽略井号。<br />2.模拟更新代码,修改并添加几个code目录下不会被排除的文件;<br />然后在客户端做如下设置:<br />1.修改/etc/hosts,在文尾加入“#test 222”;<br />2.给/etc/sysconfig/i18n在文尾加入“#test 333”;<br />3.手工创建/tmp/testfile4;<br />4.手工创建/tmp/testdir2,并在该目录下新建一些子文件夹和文件;<br />5.模拟程序运行过程中会产生一些临时文件,在/tmp/testdir3下改动新建一个叫做client_log的文件;<br />6.模拟骇客入侵恶意修改主页,修改/tmp/testdir3/codea;<br />十八、再次在客户端执行同步命令,同步完成后检查如下要点:<br />1./etc/hosts中客户端修改的部分被擦除,服务器端修改的部分被保留,且留下了名为/etc/hosts.bak_xxxxx的备份文件;<br />2./tmp/testfile1的内容和/etc/sysconfig/i18n同步更新,且留下了/tmp/testfile1.bak_xxxxx的备份文件;<br />3./tmp/testfile4被删除<br />4./tmp/testdir2目录是否被移除;<br />5.检查/tmp/testdir3下是否完成了代码更新工作;<br />6.检查/tmp/testdir3下的client_log文件是否被删除;<br />7.检查被骇客修改过的/tmp/testdir3/codea是否恢复了正常。<br />额外测试<br />功能限制<br />1.在使用中大家请注意,对部分需要转义符去除特殊含义的目录和文件,puppet在处理时会出现故障<br />如我们在客户机新建一个包含中括号的文件“/tmp/testdir3/a[d]”,然后客户端执行同步命令就会报错<br />Failed to generate additional resources using 'eval_generate': Invalid tag quot; /tmp/testdir3/aquot; <br />2.purge并不会和ignore协同工作;<br />比如说我首先注释掉了“ignore => '*log*'”,然后客户端更新,会将服务器端包含log的文件也更新下来;<br />然后再重新让“ignore => '*log*'”生效,客户端的log文件并不会被删除。<br />