首页 > 代码库 > Puppet集中配置管理系统

Puppet集中配置管理系统

Puppet是一个配置管理工具,典型的,puppet是一个C/S结构,当然,这里的C(客户端)可以有很多,因此,也可以说是一个星形结构,所有的puppet客户端同一个服务器端的puppet通讯。每个puppet客户端每半小时连接一次客户端(时间也可以设置为其他),下载最新的配置文件,并且严格按照配置文件来配置服务器,配置完成以后,puppet客户端可以反馈给服务器端一个消息,如果出错,也会给服务器端反馈一个消息。下面是一个典型的puppet配置的数据流动情况

1 (管理员)管理员编写puppet manifest,提交到svn (svn db  svn db备份 ) 只需要备份svn,你就备份了所有的服务器配置 哪怕是上万台计算机 这里的备份数据不会超过100M

2 svn取出所有的puppet配置信息

3 puppet master)客户端facter收集服务器信息发送给puppet master (连接是基于ssl和证书的,保证了安全性)

4 puppet master 根据收集到的客户端信息,编译manifest,发回到客户端

5(多个puppet clientpuppet执行从服务器收到的manifest,完成对机器的配置

稳定性

Puppet与其他手工操作工具由一个最大区别就是puppet的配置具有稳定性,因此你可以多次执行puppet,一旦你更新了你的配置文件,puppet就会根据配置文件夹更改你的机器配置,通常每30分钟检查一次,puppet会让你的系统状态同配置文件所要求的状态保持一致(比如你配置文件里要求ssh服务必须开启,加入不小心把ssh服务关闭了,那么下一次执行puppet的时候,puppet会发现这个异常,然后会开启ssh服务,以使系统状态和配置文件保持一致) puppet就像一个魔术师 会让你混乱的系统收敛到puppet配置文件想要的状态,可以使用puppet管理服务器的整个生命周期,从初始化到退役,不同于传统的例如sunjumpstart或者redhatkickstartpuppet可以长年让服务器保持最新状态,只要一开始就正确的配置他们,然后再也不用去管他们,通常puppet用户只需要给机器安装好puppet并让他们运行,然后剩余的工作就交给puppet来完成

Puppet的细节和原理

Puppet的目的时为了让你只集中于你要管理的目标,而忽略实现的细节,例如命令名 参数或者文件格式,puppet把系统里面的用户 软件包 服务等看作是资源,puppet的作用就是管理这些资源以及资源之间的相互联系。

Puppet采用了非常简单的C/S架构,所有数据的交互都通过ssl进行,以保证安全,它的工作流程入图所示:

技术分享Puppet clientpuppet master

技术分享Connet1plugins

技术分享                 2

技术分享技术分享Facter3ENC

                                4

Apply catalognode $certname(

技术分享技术分享  $conf = linux

  Class {‘ssh’:

    Ssh_key=>’$file’,

}

技术分享)

                       5

技术分享技术分享File?Comple catelog functions

              6

技术分享技术分享Reportfileserver

 8               7   

Finishreport

 

1 客户端puppetmaster发起认证请求,或使用带签名的证书

2 Master告诉client你是合法的

3 客户端puppetd调用fasterfaster探测出主机的一些变量,例如主机名,内存大小,ip地址等,puppet将这些信息通过ssl连接发送到服务器端

4 服务器端的puppet master检测客户端的主机名,然后找到manifest对应的node配置,并对该部分内容进行解析。Facter送过来的信息可以作为变量处理,node牵扯到的代码才解析,其他没牵扯到的代码不解析。解析分为几个阶段,首先是语法检查,如果语法错误就报错;如果语法没错,就继续解析,解析的结果生成一个中间的伪代码(catelog),然后把伪代码发给客户端

5 客户端接收到伪代码 并且执行

6 客户端在执行时判断有没有file文件,如果有 则向fileserver发起请求

7 客户端判断有没有配置report,如果已配置,则把执行结果发送给服务器

8服务器端把客户端的执行结果写入日志,并发送给报告系统

 

 

 

 

@@@@@@@@@@@@@@   puppert  @@@@@@@@@@@@@@@@@@@

系统环境:rhel6.3 selinux and iptables disabled

Server:192.168.0.201   desktop1.example.com   puppet master

Client: 192.168.0.202   desktop2.example.com   puppet agent

Client: 192.168.0.203   desktop3.example.com   puppet agent

重要:Server和所有的client之间需要解析,以及时间同步,不然会验证失败

 

Server

yum localinstall -y rubygems-1.3.7-1.el6.noarch.rpm

搭建yum仓库:【puppet】和【ruby]这两个

Yum install -y puppet-server

 

/etc/puppet配置目录:

组织结构如下:

-puppet.conf     主配置文件,详细内容可执行puppet --genconfig

-fileserver.conf   文件服务器配置文件

-auth.conf        认证配置文件

-autosign.conf    自动验证配置文件

-tagmail.conf     邮件配置文件(将错误信息发送此)

-manifests        文件存储目录(puppet会先读取该目录的.pp文件,<site.pp>

-node

-puppetclient.pp

-site.pp      定义puppet相关的变量和默认配置

-modules.pp   加载class类模块文件(include syslog

-modules      定义模块

-syslog     syslog为例

-file

-manifests

-init.pp    class类配置

-templates    模块配置目录

-syslog.erb   erb模块

Puppet第一个执行的代码是/etc/puppet/manifest/site.pp,因此这个文件必须存在,而且其他的代码也要通过该文件来调用

touch /etc/puppet/manifest/site.pp

没有此文件puppet master无法启动,配置后面在定义

 Service puppetmaster start   启动puppetmaster

Netstat -antlp |grep ruby

Tcp      8140      listen 1596/ruby

 

Client端:

只需安装puppet即可,安装方法同server端:yum install -y puppet

##客户端连接到puppet master:

Puppet agent --server=desktop1.example.com --no-daemonize --veibose

   Infocreating a new SSL key for desktop2.example.com

   Info:  caching certificate for ca

   Info:  cteating a new SSL certificate request for desktop2.example.com

Info(information)的缩写 信息 知料 情报 通知

Clientmaster发出证书验证请求,然后等待master签名并返回证书

参数 --server指定了需要连接的puppet master的名字或是地址,默认连接名为puppet的主机

如果修改默认连接主机可以修改/etc/sysconfig/puppet文件中的PUPPET_SERVER=puppet选项

参数 --no-daemonizepuppet客户端运行在前台

参数--verbose使客户端输出详细的日志

 

master端:

Puppet cert list    显示所有等待签名的证书

puppet cert sign desktop2.example.com   签名证书

## 如果同时签名所有证书,执行以下命令:

Puppet cert sign --all

Puppet cert clean desktop2.example.com  删除签名证书

 

在对证书签名后的两分钟后,在agent端上可以看到如下输出:

Info:caching certification for desktop2.example.com

Starting puppet client version 3.0.0

Info:caching certificate_revocation_list for ca

Info:applying configuration version ‘1349536603’

Finished catalog run in 0.13 seconds

自动验证:

server端,编译puppet.conf文件:

Vim /etc/puppet/puppet.conf

[main]

Autosign = true 允许所有客户端认证

/etc/puppet 目录下创建autosign.conf文件,内容如下:

 Vim /etc/puppet/autosign.conf

*.example.com  表示允许所有example.com域的主机

Service puppetmaster reload

 

client端只需执行:

server puppet start

 在实际中有时会修改client端的主机名,这样就需要重新生成证书:

   1 server端执行:puppet cert --clean desktop2.example.com

你要删除的原client端主机名

   2 client 端执行 : rm -fr /var/lib/puppet/ssl/*

Puppet agent --server=puppet.example.com

 

 

Puppet资源定义

一下资源均可在

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

server1

8个软件 在打开服务 /etc/init.d/puppertmaster start

server2

7个软件 在打开服务 /etc/init.d/puppert start  

发送请求 puppet agent --server server1.example.com --no-daemonize -vt

server1

puppet cert list   显示所有的等待签名的证书   

puppet cert list --all

puppet cert sign server2.example.com  ##发送证书

server2

puppet agent --server server1.example.com --no-daemonize -vt   

## 查看发送的证书

server3

7个软件

server1 cd /etc/puppet  

vim autosign.conf(自创文件)

*.example.com

vim puppet.conf

在【main】目录下加  autosign = true

/etc/init.d/puppetmaster reload

server3

puppet agent --server server1.example.com --no-daemonize -vt

  ### 即可发送请求成功

server1

puppet cert list --all

puppet cert clean server2.example.com

puppet cert list --all

server2

puppet agent --server server1.example.com --no-daemonize -vt

###  会有报错  因为修改了配制文件 得到了认证 发送请求自动成功

cd /var/lib/puppet/ssl  rpm -qf /var/lib/puppet/ssl  ls  rm -fr *

删除之后 在向master发送认证请求 就不会报错了 若再有报错就重启一下puppetmaster  reload

server1

puppet cert list --all 即可看到三个证书请求

server1

cd manifests/   vim site.pp  (自创)

file {

        "/tmp/testfile":

        content => "www.westos.org"

}

server2

puppet agent --server server1.example.com --no-daemonize -vt 即可

server1变动的东西cat /tmptestfile    md5sum /tmp/testfile

vim /tmp/testfile   随便加一些东西在发送请求可看到变动

puppet agent --server server1.example.com --no-daemonize -vt

cat /tmp/testfile 会看到server2/tmp/testfile 文件已经被主服务器更改了

server2server1操纵

 

 

 

 


本文出自 “阳光蜜汁” 博客,谢绝转载!

Puppet集中配置管理系统