码迷,mamicode.com
首页 > 其他好文 > 详细

集中管理系统--puppet

时间:2016-07-10 06:32:17      阅读:358      评论:0      收藏:0      [点我收藏+]

标签:puppet 集群管理 manifest pp


puppet 是一种LinuxUnixWindows平台的集中配置管理系统,运维人员或者系统管理员可以通过使用 puppet 来处理所有的管理细节,是自动化运维的工具。

puppet是为了让系统管理员可以相互交流和共享成熟的工具,避免重复的劳动.通过以下两个特性来实现这一目标:

1.提供一个简洁的但是强大的框架来完成系统管理任务

2.系统管理任务可以描述成puppet语言,因此可以相互分享代码,就像分享其他语言的代码一样,比如python, c等

因此,作为系统管理员的你可以更快的完成工作,因为你可以用puppet来处理所有的管理细节. 甚至你还可以下载其他管理员的puppet代码来让你的工作完成的更快.

puppet 是一个 C/S 结构, 当然,这里的 C 可以有很多,因此,也可以说是一个星型结构. 所有的 puppet 客户端同一个服务器端的 puppet 通讯. 每个puppet 客户端每半小时(可以设置)连接一次服务器端, 服务器端保存着所有对客户端服务器的配置代码,在puppet里面叫做manifest. 客户端下载manifest之后,可以根据manifest对服务器进行配置,例如软件包管理,用户管理和文件管理等等。

puppet的工作流程如下:

(1)客户端puppetd调用facter,facter探测出主机的一些变量,例如主机名,内存大小,ip地址等。pupppetd 把这些信息通过ssl连接发送到服务器端; 

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

(3)客户端接收到“伪代码”,并且执行,客户端把执行结果发送给服务器;

(4)服务器端把客户端的执行结果写入日志。

puppet工作过程中有两点值得注意,第一,为了保证安全,client和master之间是基于ssl和证书的,只有经master证书认证的client可以与master通信;第二,puppet会让系统保持在你所期望的某种状态并一直维持下去,如检测某个文件并保证其一直存在,保证ssh服务始终开启,如果文件被删除了或者ssh服务被关闭了,puppet下次执行时(默认30分钟),会重新创建该文件或者启动ssh服务。


实验环境:rhel6.5,  server4为主机,server5server6为从机,各机hostname相互解析且时间同步。


安装 

server4 

#yum install -y puppet-server puppet facter hiera rubygem-json ruby-shadow ruby-augeas rubygems openssl

 

从机上

#yum install -y puppet facter hiera rubygem-json ruby-shadow ruby-augeas rubygems openssl

 

server4

/etc/puppet 配置目录:

组织结构如下:

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

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

|-- auth.conf #认证配置文件

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

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

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


#touch /etc/puppet/manifest/site.pp   //没有此文件 puppet master 无法启动,配置后面再定义

#/etc/init.d/puppetmaster start

#puppet cert list --all

 技术分享

 

server6

#/etc/init.d/puppet start

#puppet agent --server server4.example.com --no-daemonize -vt

           //client 向 master 发出证书验证请求,然后等待 master 签名并返回证书。

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

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

参数--no-daemonize 是 puppet 客户端运行在前台 

参数--vt  vverbose使客户端输出详细的日志 ttest测试

技术分享

 提示没有证书。需要在master上注册证书

 

server4 

#puppet cert sign server6.example.com

 

server6

 #puppet agent --server server4.example.com --no-daemonize -vt

技术分享 

证书连接成功

  

开启自动验证

server4

#vim /etc/puppet/puppet.conf

[main]下添加

   autosign=true   //允许所有客户端的认证

 

#cd /etc/puppet

#vim autosign.conf

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

 

#/etc/init.d/puppetmaster reload

 

server5

#puppet agent --server server4.example.com --no-daemonize -vt

 技术分享

自动注册成功

 

server4

#puppet cert list --all

 技术分享


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

清除server从机的证书 

server4

#puppet cert clean server6.example.com    //清除server6的证书

server6

#rm -fr cd /var/lib/puppet/ssl/*


puppet 资源定义

server4上,

#cd /etc/puppet/manifests

#vim site.pp

file {

      ‘/tmp/testfile‘:

        content => ‘www.westos.org‘

}

 

server5

#puppet agent --server server4.example.com --no-daemonize -vt

#cat /tmp/testfile

技术分享

 

server4

还可在site.pp中添加

mode => 600  表示文件为600权限,

owner => puppet 所有者为puppet

group => puppet 所有组为puppet 

#cd /etc/puppet

#mkdir files

#vim fileserver.conf  //文件服务器配置文件

在最后添加  

path /etc/puppet/files       //定义pp文件中files路径

allow *.example.com     //允许所有 example.com 域的主机


#/etc/init.d/puppetmaster reload

#vim /etc/puppet/manifests/site.pp

添加

file {

     ‘/tmp/passwd‘:

       source => ‘puppet:///files/passwd‘

}

package {

       ‘httpd‘:

        ensure => present    //软件包定义

}

service {

        ‘httpd‘:

         ensure => running,      //服务定义

         require => Package [‘httpd‘]   //启动依赖Package模块,定义启动的先后顺序

}

更改pp文件无需reload puppetmaster服务。

 

server5

#puppet agent --server server4.example.com --no-daemonize -vt

 技术分享

 可看到httpd以安装,启动。/tmp/passwd文件以创建


server4site.pp

添加

user {

       ‘test‘:

       uid => 900,

       home => "/home/test",

       shell => "/bin/bash",

       provider => useradd,

       managehome => true,

       ensure => present           //添加用户

}

exec {

      ‘echo westos | passwd --stdin test‘:

       path => "/usr/bin:/bin",    //定义动作,给test用户添加密码

       onlyif => ‘id test‘           //当test存在时模块exec才生效

}

 

server6 

#puppet agent --server server4.example.com --no-daemonize -vt

 技术分享


文件系统挂载 

site.pp

file {

      "/public":

       ensure => directory

}

mount {

      "/public":

       device => "172.25.0.251:/var/ftp/pub",

       fstype => "nfs",

       options => "defaults",

       ensure => mounted   //自动挂载文件系统,并同步 fstab 文件,如果需要卸载,改为 absent

}

package {

       "nfs-utils","httpd":

        ensure => present

}

 

真机(ip:172.25.0.251)上

#yum install -y nfs-utils

#/etc/init.d/nfs start

 

server6

#puppet agent --server server4.example.com --no-daemonize -vt

#cat /etc/fstab

 技术分享


crontab 任务

site.pp

cron { echo:

command => "/bin/echo `/bin/date` >> /tmp/echo",

user => root,

hour => [‘2-4‘],

minute => ‘*/10‘

}

 任务会在 client 上/var/spool/cron 目录中生成。

  

server6

技术分享


添加vsftpd模块

server4

#mkdir /etc/puppet/modules/vsftpd

#cd /etc/puppet/modules/vsftpd

#mkdir manifests

#mkdir files

#cd files

#yum install vsftpd

#cp /etc/vsftpd/vsftpd.conf  .

#chmod 644 vsftpd.conf

#cd ../manifests

#touch install.pp config.pp service.pp init.pp

结构:

 技术分享

 

#vim init.pp

class vsftpd {

      include vsftpd::install,vsftpd::config,vsftpd::service

}


#vim install.pp

class vsftpd::install {

   package {

        ‘vsftpd‘:

         ensure => present

      }


#vim config.pp

class vsftpd::config {

     file {

           ‘/etc/vsftpd/vsftpd.conf:

 source => puppet:///modules/vsftpd/vsftpd.conf,    //实际路径在/etc/puppet/modules/vsftpd/files/vsftpd.conf

mode => 600,

require => Class[vsftpd::install],

notify => Class[vsftpd::service]

}

}


#vim vsftpd::service {

      service {

          ‘vsftpd:

           ensure => runnig,

           require => Class[vsftpd::install,vsftpd::config]

}

}

   

#cd /etc/puppet/manifest

#mkdir nodes

#vim nodes/server5.pp    //nodes目录下可以创建多个节点文件

node ‘server5.example.com {

include vsftpd

  package {

        ‘httpd‘:

         ensure => present 

}

  service {

         ‘httpd‘:

         ensure => stopped,

         require => Package[‘httpd‘]

}

}

 

#vim site.pp

改成如下

import ‘nodes/*.pp‘   //包含nodes/下的pp文件

file {

      ‘/tmp/testfile‘:

       content => ‘www.westos.org‘,

       mode => 600,

       owner => puppet,

       group => puppet

}

#service puppetmaster reload

  

server5

#puppet agent --server server4.example.com --no-daemonize -vt

技术分享

显示vsftpd启动成功

  

添加appache模块

server4

#cd modules

#cp vsftpd httpd   

#cd httpd/files

#cp /etc/httpd/conf/httpd.conf .

#rm -fr vsftpd.conf

#cd ../manifests

在 init.ppservice.pp,configinstall.pp

vsftpd换成httpd

#mkdir ../templates  //用于存放模版应用

#vim /etc/puppet/modules/httpd/templates/httpd_vhost.erb     //添加模版,必须以*.erb结尾,这里添加的是httpd的虚拟主机模版    

    <VirtualHost *:80>    

        ServerName <%= domainname %>   

         DocumentRoot /var/www/<%= domainname %>    

        ErrorLog logs/<%= domainname %>_error.log    

        CustomLog logs/<%= domainname %>_access.log common    

    </VirtualHost>

 

#cd /etc/puppet/manifests/

#vim init.pp

define httpd::vhost($domainname) {

    file { "/etc/httpd/conf.d/${domainname}_vhost.conf":

    content => template("httpd/httpd_vhost.erb"),

    require => Class["httpd::install"],

    notify => Class["httpd::service"]

         }

    file { "/var/www/$domainname":

    ensure => directory

          }

    file { "/var/www/$domainname/index.html":

    content => $domainname

          }

    }

 

#vim /etc/puppet/manifests/nodes/server5.pp

 node server5.example.com{

   include vsftpd,httpd

      httpd::vhost {

        ‘www.example.com:

         domainname => www.example.com,

                       }

}

 

#vim /etc/puppet/module/httpd/files/httpd.conf

   将最后几行修改为

   <VirtualHost *:80>

       DocumentRoot /var/www/html

       ServerName server5.example.com

   </VirtualHost>

  

server5

#puppet agent --server server4.example.com --no-daemonize -vt

技术分享

 显示httpd启动

 

真机(浏览器使用的是真机)添加解析

172.25.0.4  www.example.com

 技术分享

 

 


集中管理系统--puppet

标签:puppet 集群管理 manifest pp

原文地址:http://simplelinux.blog.51cto.com/5505221/1813885

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!