SlideShare una empresa de Scribd logo
1 de 8
1,Puppet可以实现如下功能:
     随着服务器的增加,传统的系统维护方法有点捉襟见肘,于是出现了配置管理软件,利用配置管理,
     可以把整个公司的服务器的所有配置内容管理起来,方便大规模的管理以及快速的部署。
     Puppet就是一个为实现数据库中心自动化管理而设计的C/S模式配置管理软件。


2,
 Puppet的几个概念。
 服务器端和客户端:服务器端保存和推送配置到客户端;
 清单(manifest):服务器端保存的客户端配置文件,客户端下载了manifest以后就可以应用。
 资源:客户端配置中,能管理到的对象被称为资源,常见(但不限于下文)的资源有
     文件    用户组    用户    软件包     yum库 服务     cron tab任务 文件系统挂载         zfs   hosts主机管理    exec


3,
 试验说明
 本试验分为两部分:
 首先安装建立一个puppet的C/S模型;
 在两台服务器上分别安装puppet,其中一个是服务器段,一个是客户端(被管理者)。待到服务器端和客户端
 都安装完成,客户端可以从服务器端获得一个Manifest,并依此修改一个文件,本段试验完成。
 第二部分主要是测试最常用的资源的推送应用。



  本文首发自http://bbs.linuxtone.org/forum-viewthread-tid-8480-fromuid-1049.html,如有问题,欢迎跟帖!
  作者:可爱的卧底          鸣谢:http://puppet.wikidot.com http://docs.puppetlabs.com 黄明友
4,
 实验环境的系统介绍。
 服务器端: 192.168.118.151                      Caotest-1.cym
 客户端:         192.168.118.152               Caotest-2.cym
 OS/Kernal:       CentOS release 5.4 (Final)                    2.6.18-164.el5 #1 SMP
 为了保证试验的普遍适用性,系统安装阶段,我尽量少的安装软件包
        Applications              —— Editors
        Development               —— Legacy Software Development
                                  —— Development Libraries
                                  —— Development Tools
        Base System               —— Administration Tools
                                  —— System Tools
                                  —— Base
                   可选安装: —— Dialup Network Support——lrzsz
 关闭Selinux,精简系统启动的服务为:
        crond          iptables         network          syslog     sshd




5,
 安装Puppet前的软件准备(以服务器端caotest-1为例)
 a. 添加puppet用户
        [root@caotest-1 ~]# groupadd puppet
        [root@caotest-1 ~]# useradd               -g puppet -s /bin/false -M puppet
 b. 修改Host文件;
        [root@Caotest-1 ~]# echo               "192.168.118.151 Caotest-1 Caotest-1.cym">> /etc/hosts
        [root@Caotest-1 ~]# echo               "192.168.118.152 Caotest-2 Caotest-2.cym">> /etc/hosts
 c. 安装ruby。 puppet是基于ruby开发的,所以必须安装ruby,可以使用yum或rpm安装ruby。
        [root@Caotest-1 ~]# rpm             -qa|grep ruby
        ruby-libs-1.8.5-5.el5_3.7
        ruby-1.8.5-5.el5_3.7
 d. Facter是官方wiki上提到必须要安装的一个包,是用来搜集当前安装系统的环境变量信息的
        [root@caotest-1 ~]# wget http://projects.puppetlabs.com/attachments/download/1101/facter-1.5.8.tar.gz
        [root@caotest-1 ~]# tar xf facter-1.5.8.tar.gz                    && cd facter-1.5.8/
        [root@caotest-1 facter-1.5.8]# ruby                  install.rb && cd    ~#这个包并不需要make,用ruby就可以安装
        [root@Caotest-1 ~]# facter                                 #执行以下这个命令就可以看到facter获取到的变量名和内容
 请在客户端Caotest-2上也执行上述命令。


6,
 现在开始安装Puppet(以服务器端Caotest-1为例)
        [root@caotest-1 ~]# wget http://projects.puppetlabs.com/attachments/download/1114/puppet-2.6.1.tar.gz
        [root@caotest-1 ~]# tar xzf puppet-2.6.1.tar.gz && cd puppet-2.6.1
        [root@caotest-1 puppet-2.6.1]# ruby                  install.rb      #安装完成后我们要拷贝默认的配置文件到/etc/puppet
        [root@caotest-1 puppet-2.6.1]# mkdir -p /etc/puppet &&cp                    conf/redhat/*   /etc/puppet/ && cd ~


7,
 验证安装成功
        [root@Caotest-1 ~]# puppet master
        [root@Caotest-1 ~]# ps -ef|grep               puppet |grep -v grep
        puppet          1871        1   0 23:02 ?              00:00:00 /usr/bin/ruby /usr/bin/puppet master
        [root@Caotest-1 ~]# kill               1871 #1871是上文中得到的puppet的PID
 请在客户端Caotest-2上也执行上述命令。
8,
 服务器端设定
  a.将puppetmasterd设置为服务,并自启动。
    [root@Caotest-1 ~]# cp /etc/puppet/server.init      /etc/init.d/puppetmasterd
    #这个文件最早在{源码包}/conf/redhat/里,刚被我们拷贝到了/etc/puppet目录下。
    [root@Caotest-1 ~]#chmod    755 /etc/init.d/puppetmasterd
    [root@Caotest-1 ~]# chkconfig --add puppetmasterd
    [root@Caotest-1 ~]# chkconfig --level 35      puppetmasterd   on
    #将puppetmasterd服务脚本添加为服务,并在3、5级别启动。
    [root@Caotest-1 ~]#   service    puppetmasterd   abc
    Usage: /etc/init.d/puppetmasterd {start|stop|status|restart|reload|force-reload|condrestart|genconfig}
    #现在我们就可以跟其他服务一样用service命令来启动、关闭服务了。
    [root@Caotest-1 ~]#   service    puppetmasterd   start
    Starting puppetmaster: [    OK   ]
  b.防火墙和端口设定。puppet服务器端默认使用8140端口监听服务,需要在iptables上开启该端口。
     -A INPUT   -p tcp --dport 8140 -j ACCEPT
    #请在/etc/sysconfig/iptables 中加入上文的规则,并重启iptables。


9, 审批证书
  a.客户端申请证书
    [root@Caotest-2 puppet]# telnet      caotest-1.cym 8140   #验证解析和链接是否正常
    Trying 192.168.118.151...
    Connected to Caotest-1.cym (192.168.118.151).
    Escape character is '^]'.
    Connection closed by foreign host.
    [root@Caotest-2 puppet]# puppetd --test      --server caotest-1.cym#向服务器端申请证书
    warning: peer certificate won't be verified in this SSL session
    info: Caching certificate for ca
    warning: peer certificate won't be verified in this SSL session
    warning: peer certificate won't be verified in this SSL session
    info: Creating a new SSL certificate request for caotest-2.cym
    info: Certificate Request fingerprint (md5): C5:5A:5E:A9:04:44:CF:A7:F3:46:14:6A:C7:C1:24:C8
    warning: peer certificate won't be verified in this SSL session
    warning: peer certificate won't be verified in this SSL session
    warning: peer certificate won't be verified in this SSL session
    Exiting; no certificate found and waitforcert is disabled
  b.服务器接受申请
    [root@Caotest-1 ~]# puppetca     --list      #查看当前待批准证书列表
    caotest-2.cym
    [root@Caotest-1 ~]# puppetca     -s caotest-2.cym         #批准当前证书
    notice: Signed certificate request for caotest-2.cym
    notice: Removing file Puppet::SSL::CertificateRequest caotest-2.cym at '/var/lib/puppet/ssl/ca/requests/caotest-2.cym.pem
  c.客户端取回已经通过审批的证书
    [root@caotest-2 ~]#   puppetd --test      --server caotest-1.cym
    warning: peer certificate won't be verified in this SSL session
    info: Caching certificate for caotest-2.cym
    info: Caching certificate_revocation_list for ca
    info: Caching catalog for caotest-2.cym
info: Applying configuration version '1287374005'
     info: Creating state file /var/lib/puppet/state/state.yaml
     notice: Finished catalog run in 0.01 seconds
     注意上文中的红色粗体部分,生成证书时主机名会写入证书,如果生成证书后再更改主机名证书就失效了。
     而且请不要用caotest-2这类简写名字,而应该用caotest-2.cym这类全名申请证书.
  d.重新审批旧机器的新证书。
   当申请到证书以后我们对比下这两个文件,他们的MD5值是一样的;
     [root@Caotest-1 ~]# md5sum /var/lib/puppet/ssl/ca/signed/caotest-2.cym.pem    #这是服务器端
     b750f6702d7958b6af40819572de3e7d   /var/lib/puppet/ssl/ca/signed/caotest-2.cym.pem
     [root@Caotest-2 ~]# md5sum /var/lib/puppet/ssl/certs/caotest-2.cym.pem        #这是客户端
     b750f6702d7958b6af40819572de3e7d   /var/lib/puppet/ssl/certs/caotest-2.cym.pem
   其实申请证书的过程就是服务器端生成证书,并发送到客户端的过程。
   如果因为意外要重新给旧机器审批证书,我们需要做以下两点才可以重新注册。
     [root@Caotest-1 ~]# rm   -f /var/lib/puppet/ssl/ca/signed/caotest-2.cym.pem
     #服务器端需要删除已经注册给客户机“caotest-2.cym”的证书。
     [root@Caotest-2 ~]# rm -rf   /var/lib/puppet/ssl/
     #客户端也需要删掉SSL目录。


10, 功能测试
   在服务器端新建一个/etc/puppet/manifests/site.pp文件,大意是在/tmp下创建caotest.txt测试文件。
     [root@Caotest-1 ~]# cat /etc/puppet/manifests/site.pp
     node default {
     file {"/tmp/caotest.txt":                  #这是文件路径名
     content=>"I'm Caotest PUPPET"; }           #这是文件的内容
     }                               #初次创建这个文件需要重启服务
     [root@Caotest-1 ~]#/etc/init.d/puppetmasterd   restart
   在客户端执行命令会得到如下提示信息:
     [root@Caotest-2 puppet]# puppetd --test   --server caotest-1.cym
     info: Caching catalog for caotest-2.cym
     info: Applying configuration version '1287350100'
     notice: /Stage[main]//Node[default]/File[/tmp/caotest.txt]/ensure: defined content as '{md5}366e5662f290439eef7b150b2b02
     notice: Finished catalog run in 0.07 seconds
     [root@Caotest-2 puppet]# cat /tmp/caotest.txt
     I'm Caotest PUPPET


11,客户端设置守护进程
     [root@Caotest-2 puppet]# puppetd --server caotest-1.cym --verbose --waitforcert 60
         # --server 告诉它master结点的ip,--waitforcert是说每60秒去server检查,--verbose是可选的输出冗余信息
   部分情况下puppet服务会无法启动,且会提示puppet已经启动,这个时候需要删除一个文件。
     [root@houtai ~]#   /usr/sbin/puppetd --test --server idctest-1-2
     notice: Run of Puppet configuration client already in progress; skipping
     [root@houtai ~]# rm /var/lib/puppet/state/puppetdlock    #进程明明不存在,删除该文件就不会误判了
至此,Puppet C/S环境搭建完毕,接下来我们会进行更深入的配置文件语法介绍和不同类型的资源调节、测试。
  本文首发自http://bbs.linuxtone.org/forum-viewthread-tid-8480-fromuid-1049.html,如有问题,欢迎跟帖!
  作者:可爱的卧底              鸣谢:http://puppet.wikidot.com http://docs.puppetlabs.com 黄明友
本段文字用于说明mainfest文件编辑时的语法格式,
避免接下来的实验中让我们败于细节。


11,最简单的mainfest;
   下面就以刚才的示例文件来举例说明puppet的配置文件语法
     node default {         #节点设置,default是所有节点都会应用的设置
     file {                 #file{……}定义了资源的类型是文件;
     "/tmp/caotest.txt":      #资源的title,在未设置文件名时兼职做文件名
     content=>"I'm Caotest PUPPET" }   #content是定义内容的动作,引号里是具体的内容
     }           #这个中括号内的设置都会应用到default节点上



12,接下来举个稍微有些变化的例子,让我们复习一下puppet配置文件的格式
     node 'www','resin' {        #现在我只指定www和resin两个节点会执行下面的操作(注意单引号和逗号);
     file {                      #file{……}定义了资源的类型是文件;
     caotest2:                   #这次资源title不兼职做文件名了。
     name =>"/tmp/caotest2.log",        #这是上次例子中被省略掉的name项
     content=>"I'm Caotest2 PUPPET.     #这次我故意将1行内容扩展为三行
     Beijing huanying ni !
     test 1234."                        #这里才是文件的结尾
     }
     service {                   #这是另一种资源类型“service”
     cups:                       #资源title和name都是cups;
     ensure =>stopped;           #执行关闭服务的命令
     xfs:                        #在同一资源类型里定义另一个资源。
     ensure =>stopped;           #实际上好几种服务(如蓝牙)并不支持这样关闭,这个例子是为了说明语法。

     }        #上文中的引号和扩号已经标识的很清楚了,但是诸如冒号(资源名后面)、逗号(资源内属性区分),

     }        #分号(同一类型内不同资源区分)都很容易被忽略导致语法错误,特用红色加粗字体注明;

     import "idctest/sky.pp"            #这个设置类似apache的include,可以用相对路径和绝对路径。
  在接下来的实际配置中,你会发现puppet的实际配置语法并不是太严格,比如说在某些不会引起歧义的地方
  少个逗号或者分号,在做部分资源定义的时候并不要都加上引号。
  本文首发自http://bbs.linuxtone.org/forum-viewthread-tid-8480-fromuid-1049.html,如有问题,欢迎跟帖!
  作者:可爱的卧底               鸣谢:http://puppet.wikidot.com http://docs.puppetlabs.com 黄明友
资源的详细用法:
我们以文件资源为例,讲述puppet资源的用法。
参考链接:http://puppet.wikidot.com/file http://docs.puppetlabs.com/guides/types/file.html


13,配置puppet文件服务。
   配置puppet文件服务很简单,修改下文配置文件并重启服务。
      [root@Caotest-1 ~]# egrep -v "^#|^$" /etc/puppet/fileserver.conf
      [hosts123]                          #我们设置这个模块的名字为“hosts123”
      path /etc/puppet/client_conf/hosts                          #这是实际上这个模块的路径。
      allow *         #我们可以用allow、deny来限制使用者的资格,现在设置为*是允许所有人访问。
      [code]                              #我们设置这个模块的名字为“code”
      path /etc/puppet/client_conf/code                 #这是实际上这个模块的路径。
      allow *         #我们可以用allow、deny来限制使用者的资格,现在设置为*是允许所有人访问。
      [root@Caotest-1 ~]# /etc/init.d/puppetmasterd restart                 #重启服务


14,File资源的几个主要属性
     下面是我截取的一段manifests,以对节点“cms”进行的配置为例讲解一下常用的file资源属性
      node 'Caotest-2.cym' {                   #下文的配置只对节点名为"Caotest-2.cym"的服务器生效
      file {"/etc/hosts":                      #定义同步hosts文件;资源title和path二合一的表示方法;
      source => "puppet://Caotest-1.cym/hosts123/host1", #数据来源自puppet文件服务器,其中"hosts123"
      backup => ".bak_$uptime_seconds",                       #是上文文件服务器中设置的模块名,源文件在服务器端的绝对
      }                                                       #路径是/etc/puppet/client_conf/hosts/host1
      file {"/tmp/testfile1":
      source => "/etc/sysconfig/i18n",                          #注意,这次的文件取自客户机本机的绝对路径,并非服务器!
      backup => ".bak_$uptime_seconds", #这是可选项,在替换文件时可以对源文件进行备份,".bak"以点开头
      group => daemon, #设置文件属组; #说要通过原名加后缀名的方式做备份,$uptime_seconds是前文安
      owner => daemon, #设置文件属主; #装的facter软件提取的变量,选开机秒数做命名是考虑到不易重名
      mode => 600;              #设置文件权限; #假设当前开机了15554秒,备份后的/tmp/testfile1的全名应该为
      }                                                 “/tmp/testfile1.bak_15554”。
      $aaa = "ceshi bianliang              "            #这里也可以给变量赋值,我们随意设定变量aaa
      file {"/tmp/testfile2":
      content => $aaa}                                  #变量的内容可以直接导入到文件内;
      file {                                            #接下来,我们要测试一个叫做ensure的资源属性;
      /tmp/testfile3:
      ensure => "/etc/sysconfig/network";                       #这就是将/etc/sysconfig/network做个软链接;
      /tmp/testfile4:
      ensure => absent;                              #absent就是检测文件是否存在,如果存在则删除。
      /tmp/testfile5:
      ensure => present;                             #present正好相反,如果不存在则创建
      /tmp/testdir1:
      ensure => directory;                           #这是创建一个目录的方法
      /tmp/testdir2/:                                #可以看到,资源定义里写不写最后一个斜杠都没关系
      ensure => absent,                              #这是删除一个目录的方法
      force => true;                                 #删除目录必须加上这个参数,目录下的文件、子目录都被强制删除。
      }
      file {/tmp/testdir3:                           #下面我们尝试整目录内的内容的复制,跟rsync差不多。
ensure   => directory,          #定义这是个必须存在的目录;
     source   => "puppet://Caotest-1.cym/code",   #指定数据的来源可以是客户机本地也可以是服务器
     ignore   => '*log*',                  #排除不同步的log目录和文件,支持shell下常用的通配符
     recurse => true,                      #是否递归到子目录,该选项必须选
     purge    => true,                     #是否要删除服务器端没有而客户端有的文件,(可选项)
     force    => true,                     #配合上文,如果要删除的是子目录,就需要加上force参数
     }
     }                               #整个节点的括号,一定不要忘记了。


15,服务器端准备测试用源文件;
   请按照我下文中tree的结果创建测试文件
     [root@idctest-1-2 client_conf]# pwd
     /etc/puppet/client_conf           #注意我当前所在的目录
     [root@idctest-1-2 client_conf]# tree
     |-- code                   #这是code模块,我们测试多文件复制功能,可以都是空文件
     |   |-- codea
     |   |-- debuglog           #这些带log/tmp/bak的目录和文件是用来测试排除功能的
     |   |-- logs
     |   |    `-- aaa           #测试目录被排除、但文件不被排除的情况
     |   |-- logs-java
     |   `-- work               #这是测试多级深层目录用的;
     |        |-- code_bak
     |        |   `-- codea
     |        |-- user_log      #测试多级目录是否仍然有排除功能
     |        `-- woking
     `-- hosts          #这个文件夹里的文件就不能是空文件了,必须是能正常解析服务器端
         `-- host1      #和客户端主机名的正确hosts文件,建议拷贝客户端现在使用的hosts;


16,在客户端执行一次“puppetd --test --server Caotest-1.cym”,检查以下要点:
   a.服务器端的host1文件内容是否同步到了本机,且改名为hosts了。
   b./tmp/testfile1是否创建了,且内容和本机/etc/sysconfig/i18n一致,属主、属组、权限是否符合设定要求;
   c./tmp/testfile2的文件内容是否是“ceshi bianliang”;
   d./tmp/testfile3是不是一个连接到network的软连接;
   e./tmp/testfile5是否被创建;
   f./tmp/testdir1是否被创建,且是一个目录;
   g./tmp/testdir3目录是否被创建,文件、子目录是否被创建,按文件名匹配是否排除了log?


17,二次调试。刚才只是创建了一些文件,我们模拟一下这些文件的维护工作。
  首先我们在服务器端更改一些文件:
   a.修改host1,在文尾加入“#test 111”,请注意不要忽略井号。
   b.模拟更新代码,修改并添加几个code目录下不会被排除的文件;
  然后在客户端做如下设置
   a.修改/etc/hosts,在文尾加入“#test 222”;
   b.给/etc/sysconfig/i18n在文尾加入“#test 333”;
   c.手工创建/tmp/testfile4;
   d.手工创建/tmp/testdir2,并在该目录下新建一些子文件夹和文件;
   e.模拟程序运行过程中会产生一些临时文件,在/tmp/testdir3下改动新建一个叫做client_log的文件;
f.模拟骇客入侵恶意修改主页,修改/tmp/testdir3/codea;


18,再次在客户端执行同步命令,同步完成后检查如下要点:
  a./etc/hosts中客户端修改的部分被擦除,服务器端修改的部分被保留,且留下了名为/etc/hosts.bak_xxxxx的备份文件;
  b./tmp/testfile1的内容和/etc/sysconfig/i18n同步更新,且留下了/tmp/testfile1.bak_xxxxx的备份文件;
  c./tmp/testfile4被删除
  d./tmp/testdir2目录是否被移除;
  e.检查/tmp/testdir3下是否完成了代码更新工作;
  f.检查/tmp/testdir3下的client_log文件是否被删除;
  g.检查被骇客修改过的/tmp/testdir3/codea是否恢复了正常。
通过以上实验我们就能理解file这个资源的各项主要可选属性的用法。


额外测试 功能限制
 A.在使用中大家请注意,对部分需要转义符去除特殊含义的目录和文件,puppet在处理时会出现故障
  如我们在客户机新建一个包含中括号的文件“/tmp/testdir3/a[d]”,然后客户端执行同步命令就会报错
  Failed to generate additional resources using 'eval_generate': Invalid tag "/tmp/testdir3/a"
 B.purge并不会和ignore协同工作;
  比如说我首先注释掉了“ignore => '*log*'”,然后客户端更新,会将服务器端包含log的文件也更新下来;
  然后再重新让“ignore => '*log*'”生效,客户端的log文件并不会被删除。


 本文首发自http://bbs.linuxtone.org/forum-viewthread-tid-8480-fromuid-1049.html,如有问题,欢迎跟帖!
 作者:可爱的卧底          鸣谢:http://puppet.wikidot.com http://docs.puppetlabs.com 黄明友

Más contenido relacionado

La actualidad más candente

Puppet安装测试
Puppet安装测试Puppet安装测试
Puppet安装测试
Yiwei Ma
 
Sery lvs+keepalived
Sery lvs+keepalivedSery lvs+keepalived
Sery lvs+keepalived
colderboy17
 
Squid安装配置
Squid安装配置Squid安装配置
Squid安装配置
Yiwei Ma
 
Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)
Yiwei Ma
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
maclean liu
 
Kick start无人值守批量安装linux
Kick start无人值守批量安装linuxKick start无人值守批量安装linux
Kick start无人值守批量安装linux
Yiwei Ma
 
Centos下安装apache + subversion
Centos下安装apache + subversionCentos下安装apache + subversion
Centos下安装apache + subversion
Yiwei Ma
 
Cent os 安装 subversion
Cent os 安装 subversionCent os 安装 subversion
Cent os 安装 subversion
YUCHENG HU
 

La actualidad más candente (19)

Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档
 
Memcached内存分析、调优、集群
Memcached内存分析、调优、集群Memcached内存分析、调优、集群
Memcached内存分析、调优、集群
 
Linux集群应用实战 通过lvs+keepalived搭建高可用的负载均衡集群系统(第二讲)
Linux集群应用实战 通过lvs+keepalived搭建高可用的负载均衡集群系统(第二讲)Linux集群应用实战 通过lvs+keepalived搭建高可用的负载均衡集群系统(第二讲)
Linux集群应用实战 通过lvs+keepalived搭建高可用的负载均衡集群系统(第二讲)
 
Puppet安装测试
Puppet安装测试Puppet安装测试
Puppet安装测试
 
Sery lvs+keepalived
Sery lvs+keepalivedSery lvs+keepalived
Sery lvs+keepalived
 
Asm+aix
Asm+aixAsm+aix
Asm+aix
 
Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出
 
善用工具
善用工具善用工具
善用工具
 
淺談Debian套件打包
淺談Debian套件打包淺談Debian套件打包
淺談Debian套件打包
 
Squid安装配置
Squid安装配置Squid安装配置
Squid安装配置
 
Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
 
Kick start无人值守批量安装linux
Kick start无人值守批量安装linuxKick start无人值守批量安装linux
Kick start无人值守批量安装linux
 
linux安装以及LAMP 环境安装详细
linux安装以及LAMP 环境安装详细linux安装以及LAMP 环境安装详细
linux安装以及LAMP 环境安装详细
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应
 
Centos下安装apache + subversion
Centos下安装apache + subversionCentos下安装apache + subversion
Centos下安装apache + subversion
 
Cent os 安装 subversion
Cent os 安装 subversionCent os 安装 subversion
Cent os 安装 subversion
 
5, system admin
5, system admin5, system admin
5, system admin
 
Jvm内存管理基础
Jvm内存管理基础Jvm内存管理基础
Jvm内存管理基础
 

Destacado (9)

Using reader responses to make revisions
Using reader responses to make revisionsUsing reader responses to make revisions
Using reader responses to make revisions
 
Услуги в области инноваций региона Кюменлааксо (Финляндия)
Услуги в области инноваций региона Кюменлааксо (Финляндия)Услуги в области инноваций региона Кюменлааксо (Финляндия)
Услуги в области инноваций региона Кюменлааксо (Финляндия)
 
Nginx 0.8.x 安装手册
Nginx 0.8.x 安装手册Nginx 0.8.x 安装手册
Nginx 0.8.x 安装手册
 
Zhongxing practice-suchunshan-qcon
Zhongxing practice-suchunshan-qconZhongxing practice-suchunshan-qcon
Zhongxing practice-suchunshan-qcon
 
BuilHigh Performance Weibo Platform-Qcon2011
BuilHigh Performance Weibo Platform-Qcon2011BuilHigh Performance Weibo Platform-Qcon2011
BuilHigh Performance Weibo Platform-Qcon2011
 
Cacti安装手册
Cacti安装手册Cacti安装手册
Cacti安装手册
 
Netflix web-adrian-qcon
Netflix web-adrian-qconNetflix web-adrian-qcon
Netflix web-adrian-qcon
 
09.centrlazernyxtexnologij
09.centrlazernyxtexnologij09.centrlazernyxtexnologij
09.centrlazernyxtexnologij
 
Виртуальная ИТ-инфраструктура предприятия на базе свободного ПО "под ключ"
Виртуальная ИТ-инфраструктура предприятия на базе свободного ПО "под ключ"Виртуальная ИТ-инфраструктура предприятия на базе свободного ПО "под ключ"
Виртуальная ИТ-инфраструктура предприятия на базе свободного ПО "под ключ"
 

Similar a Puppet安装总结

Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
acqua young
 
Lamp安全全攻略
Lamp安全全攻略Lamp安全全攻略
Lamp安全全攻略
Da Zhao
 
Hadoop平台搭建
Hadoop平台搭建Hadoop平台搭建
Hadoop平台搭建
Liyang Tang
 
Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)
Yiwei Ma
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践
Na Lee
 
九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)
heima911
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理
frankwsj
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
cachowu
 

Similar a Puppet安装总结 (20)

运维自动化
运维自动化运维自动化
运维自动化
 
Ruby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for UbuntuRuby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for Ubuntu
 
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
 
Lamp安全全攻略
Lamp安全全攻略Lamp安全全攻略
Lamp安全全攻略
 
Ruby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacRuby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for Mac
 
Hadoop平台搭建
Hadoop平台搭建Hadoop平台搭建
Hadoop平台搭建
 
Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on pratice
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
Deployment with Capistrano
Deployment with CapistranoDeployment with Capistrano
Deployment with Capistrano
 
Mysql mmm演讲--冯浩
Mysql mmm演讲--冯浩Mysql mmm演讲--冯浩
Mysql mmm演讲--冯浩
 
Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩
 
Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践
 
Apache安装配置mod security
Apache安装配置mod securityApache安装配置mod security
Apache安装配置mod security
 
九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理
 
Linux基础
Linux基础Linux基础
Linux基础
 
GNU Build System
GNU Build SystemGNU Build System
GNU Build System
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 

Más de Yiwei Ma

Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qcon
Yiwei Ma
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qcon
Yiwei Ma
 
Taobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconTaobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qcon
Yiwei Ma
 
Alibaba server-zhangxuseng-qcon
Alibaba server-zhangxuseng-qconAlibaba server-zhangxuseng-qcon
Alibaba server-zhangxuseng-qcon
Yiwei 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-qcon
Yiwei Ma
 
Ufida design-chijianqiang-qcon
Ufida design-chijianqiang-qconUfida design-chijianqiang-qcon
Ufida design-chijianqiang-qcon
Yiwei Ma
 
Spring design-juergen-qcon
Spring design-juergen-qconSpring design-juergen-qcon
Spring design-juergen-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-qcon
Yiwei Ma
 
Alibaba arch-jiangtao-qcon
Alibaba arch-jiangtao-qconAlibaba arch-jiangtao-qcon
Alibaba arch-jiangtao-qcon
Yiwei Ma
 
Twitter keynote-evan-qcon
Twitter keynote-evan-qconTwitter keynote-evan-qcon
Twitter keynote-evan-qcon
Yiwei 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-qcon
Yiwei Ma
 
淘宝线上线下性能跟踪体系和容量规划-Qcon2011
淘宝线上线下性能跟踪体系和容量规划-Qcon2011淘宝线上线下性能跟踪体系和容量规划-Qcon2011
淘宝线上线下性能跟踪体系和容量规划-Qcon2011
Yiwei Ma
 
网游服务器性能优化-Qcon2011
网游服务器性能优化-Qcon2011网游服务器性能优化-Qcon2011
网游服务器性能优化-Qcon2011
Yiwei Ma
 
Xietingbao-Qcon2011
Xietingbao-Qcon2011Xietingbao-Qcon2011
Xietingbao-Qcon2011
Yiwei Ma
 

Más de 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
 
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
 
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
 
网游服务器性能优化-Qcon2011
网游服务器性能优化-Qcon2011网游服务器性能优化-Qcon2011
网游服务器性能优化-Qcon2011
 
Xietingbao-Qcon2011
Xietingbao-Qcon2011Xietingbao-Qcon2011
Xietingbao-Qcon2011
 

Puppet安装总结

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