Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3056174
  • 博文数量: 535
  • 博客积分: 15788
  • 博客等级: 上将
  • 技术积分: 6507
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-07 09:11
文章分类

全部博文(535)

文章存档

2016年(1)

2015年(1)

2014年(10)

2013年(26)

2012年(43)

2011年(86)

2010年(76)

2009年(136)

2008年(97)

2007年(59)

分类: LINUX

2011-09-08 14:38:34

一、安装ruby
1、服务器端:
因为配置nagios要使用storconfig,需要安装ruby 1.8.7以上版本,因为rhel5自带为1.8.5,所以需要源码安装。
ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p352.tar.gz
  1. tar -xczf ruby-1.8.7-p352.tar.gz
  2. ./configure --prefix=/usr/local/ruby
  3. make
  4. make install
  5. ln -s /usr/local/ruby/bin/ruby /usr/bin/ruby (必须)
注意:如果之前yum安装了ruby:
  1. yum erase ruby*
  2. mv /usr/lib/ruby /tmp
(如果已经安装了puppet,再安装一次即可,记得安装之前要备份)

关于`require': no such file to load -- puppet/application/master
原因:卸载了yum的ruby
因为puppet会将很多的文件拷贝到ruby安装目录下的lib文件夹,所以卸载了ruby,puppet安装的文件也被删除了,再次安装puppet即可
可以看到在安装puppet所作的操作:
  1. chmod 0644 /usr/local/ruby/lib/ruby/site_ruby/1.8/puppet/rails/inventory_node.rb
  2. lib/puppet/rails/host.rb -> /usr/local/ruby/lib/ruby/site_ruby/1.8/puppet/rails/host.rb

2、客户端:
yum 安装即可
  1. yum install ruby ruby-devel ruby-ri
二、安装puppet
1、可以使用epel库里带的rpm版本(不推荐)。
  1. yum install puppet-server
2、使用源码安装
先安装facter
factor:The only prerequisite for Puppet that doesn’t come as part of the Ruby standard library is facter, which is also developed by Puppet Labs.
  1. wget http://downloads.puppetlabs.com/facter/facter-1.6.0.tar.gz
  2. tar -xvzf facter-1.6.0.tar.gz
  3. cd facter-1.6.0
  4. ruby install.rb
安装puppet
  1. wget http://downloads.puppetlabs.com/puppet/puppet-2.7.3.tar.gz
  2. tar -xvzf puppet-2.7.3.tar.gz
  3. cd puppet-2.7.3
  4. ruby install.rb
服务器端:
  1. useradd puppet
  2. cd puppet-2.7.3
  3. cp conf/redhat/* /etc/puppet/
  4. rm /etc/puppet/client.*
  5. mv /etc/puppet/server.init /etc/init.d/puppetmasterd
  6. mv /etc/puppet/server.sysconfig /etc/sysconfig/puppetmaster
  7. chmod 755 /etc/init.d/puppetmasterd
  8. service puppetmasterd restart
打开相应的iptables端口8140

客户端:
  1. useradd puppet
  2. cd puppet-2.7.3
  3. rm /etc/puppet/server.*
  4. mv conf/redhat/puppet.conf /etc/puppet/
  5. mv conf/redhat/client.init /etc/init.d/puppet
  6. chmod 755 /etc/init.d/puppet
客户端指定运行时的参数:
vi /etc/puppet/puppet.conf
  1. 添加相应配置
  2. [main]
  3. server=master.puppet.com
  4. runinterval=600 (每10分钟运行一次)
这里我们仅需要写这两个参数,确保client可以正确连接到server。以后我们会将这个配置文件由puppet来统一管理,只需要在master上修改,即可同步到所有的client上,而且修改后自动重启client的puppet服务,以使修改生效。

参考:关于可选的参数
查看当前值:
  1. puppet --genconfig

启动:
服务器端:
  1. service puppetmasterd start
客户端:
  1. service puppet start

客户端的运行报告在服务器端:/var/lib/puppet/reports/
每次运行会生产一个报告,报告文件名为:/var/lib/puppet/reports/hy18.uniqlick.com/201108020948.yaml
一个以运行时的utc时间为文件名的文件,即当前时间-8小时
这个报告很难看懂,后面将部署puppet dashboard,以图形的方式显示这些报告,方便查看。

三、关于DNS及hosts
对于基本的使用,仅仅需要为服务器端配置一个dns,使客户端可以解析服务器端的ip就可以了。
如果需要通过服务器端推送,需要使用puppet kick命令。这就需要服务器端能够解析所有的客户端。将客户端加到hosts文件里即可。

客户端连接服务器时使用的是自己的fqdn,执行facter,检查输出中的fqdn是否是你期望的,如果不是,修改hostname。编辑/etc/sysconfig/network并执行hostname 主机名,立即生效。

四、审批证书
1、客户端申请证书
首先检查是否可以连接到服务器端的8140端口。
  1. telnet master.puppet.com 8140
端口通畅,ok,执行下面的命令:
  1. puppetd --server master.puppet.com --test --waitforcert 60
执行后,不要关闭终端。
2、服务器端审批证书
查看待审证书
  1. puppetca --list
批准证书 
  1. puppetca -s client1.puppet.com
注意:生成证书时,主机名会写入证书,所以证书生成后,如果更改主机名,证书就失效了。
解决办法:其实申请证书的过程就是服务器端生成证书,并发送到客户端的过程。
删除掉服务器端的客户机证书 rm -f /var/lib/puppet/ssl/ca/signed/主机名.pem
或者:puppetca --clean xx.xx.xxx
客户端删除掉ssl目录/var/lib/puppet/ssl
重新申请证书即可。

五、测试
1、服务器端:
vi /etc/puppet/manifests/site.pp
该文件定义puppet相关的变量和默认配置,是puppet执行的第一个文件
  1. node default {
  2.         file{"/tmp/temp1.txt":content =>"test puppet,ok";}
  3. }
default,默认节点,除了指定的节点,剩余的节点都会执行。
例如:
  1. node default {
  2.         file{"/tmp/temp1.txt":content =>"test puppet,ok";}
  3. }
  4. node client1.puppet.com {
  5.         file{"/tmp/2.txt":content =>"test2,ok";}
  6. }
这样的配置文件,client1.puppet.com不会执行default里面的内容。
即:一个client只能存在于一个node中。
可以通过在node default中使用if 判断来选择生效的node
  1. $hostgroup = [ '1.1.1.1','2.1.1.1',]
  2. node default {
  3. if ( $ipaddress in $hostgroup){
  4. include cacti::iostat
  5. }

2、客户端:
  1. puppetd --server master.puppet.com --test
正确的话,你将会看到创建的文件。

六、服务器端控制客户端立即执行
使用puppet kick

1、服务器端需要能解析client的IP
解决:将客户端的IP和fqdn写到服务器端的hosts里即可。或者使用内网的DNS。
2、服务器端:
保证/etc/puppet/namespaceauth.conf存在,文件可以为空。
这其实是一个bug,可以通过puppet kick -h看到
Additionally, due to a known bug, you must make sure a
namespaceauth.conf file exists in puppet agent's $confdir. This file
will not be consulted, and may be left empty.

3、客户端
puppet.conf中添加下面的配置
  1. [agent]
  2.     listen = true
将监听8139端口,确保iptables打开相应的端口。
否则:Host client1.puppet.com failed: Connection refused - connect(2)

在path /之前加上 path /run,如下
  1. path /run
  2. method save
  3. allow master.puppet.com

  4. # this one is not stricly necessary, but it has the merit
  5. # to show the default policy which is deny everything else
  6. path /
  7. auth any
否则:Error 403 on SERVER: Forbidden request

测试:
puppet kick -d --host client1.puppet.com
Triggering client1.puppet.com
Getting status
status is success
client1.puppet.com finished with exit code 0
Finished

更多puppet配置及使用日志,正在整理中,转载请注明出处,谢谢。
阅读(6182) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~