puppet是一种Linux、Unix、windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。

  puppet采用C/S星状的结构,所有的客户端和一个或几个服务器交互。每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步。每个puppet客户端每半小时(可以设置)连接一次服务器端, 下载最新的配置文件,并且严格按照配置文件来配置客户端. 配置完成以后,puppet客户端可以反馈给服务器端一个消息. 如果出错,也会给服务器端反馈一个消息.

环境准备:

master:192.168.8.39

agent1:192.168.8.44

agent2:192.168.8.45





需要添加对主机名的解析

# vim /etc/hosts





192.168.8.39 node2.chinasoft.com node2

192.168.8.44 node44.chinasoft.com node44

192.168.8.45 node45.chinasoft.com node45

将解析传送到两个节点中

# scp /etc/hosts 192.168.8.44:/etc/

# scp /etc/hosts 192.168.8.45:/etc/

一、服务端软件的安装

# yum install -y facter-1.7.3

# yum install -y puppet-2.7.25

# yum install puppet-server-2.7.25





默认的yum源中没有puppet软件,可以自定义puppet官方的yum源获取

# cd /etc/yum.repos.d

# vim puppet.repo





[puppet]

name=Puppet Project

baseurl=http://yum.puppetlabs.com/el/6/products/x86_64/

enabled=1

gpgcheck=0

cost=300

二、服务端master配置:

在主机上安装nginx(方便获取模板文件)

# yum install -y nginx

# cd /etc/puppet/modules/

# mkdir -pv nginx/{manifests,files,templates}





创建主类

# vim /etc/puppet/modules/nginx/manifests/init.pp

class nginx {

        package {'nginx':

                ensure => installed,

        }





        file {'nginx.conf':

                ensure => file,

                content => template('nginx/nginx.conf.erb'),

                path   => '/etc/nginx/nginx.conf',

                require => Package['nginx'],

                mode    => '0644',

        }

}





创建web继承类

# vim /etc/puppet/modules/nginx/manifests/web.pp

class nginx::web inherits nginx{

        file {'nginx.web.conf':

                ensure => file,

                source => "puppet:///modules/nginx/nginx.web.conf",

                path => '/etc/nginx/conf.d/default.conf',

                require => Package['nginx'],

                mode => '0644',

        }





        service {'nginx':

                ensure => true,

                enable => true,

                restart => '/etc/init.d/nginx reload',

                subscribe => File['nginx.conf','nginx.web.conf'],

        }





}





创建反向代理rproxy.pp类

# vim /etc/puppet/modules/nginx/manifests/rproxy.pp

class nginx::rproxy inherits nginx{





        file {'nginx.rproxy.conf':

                ensure => file,

                source => "puppet:///modules/nginx/nginx.rproxy.conf",

                path => '/etc/nginx/conf.d/default.conf',

                require => Package['nginx'],

                mode => '0644',

        }





        service{'nginx':

                ensure => true,

                enable => true,

                restart => '/etc/init.d/nginx reload',

                subscribe => File['nginx.conf','nginx.rproxy.conf'],

        }

}





也可以通过puppet调用的方式安装nginx

[root@node2 manifests]# puppet apply -d -v -e 'include nginx'

# vim local.pp

node 'node2.chinasoft.com'{

        include nginx

}

# puppet apply local.pp





创建模板配置文件

# cp /etc/nginx/nginx.conf templates/

# vim /etc/puppet/modules/nginx/templates/nginx.conf

worker_processes  <%= @processorcount %>;

# mv /etc/puppet/modules/nginx/templates/nginx.conf /etc/puppet/modules/nginx/templates/nginx.conf.erb





分别定义web定义nginx.web.conf和反向代理nginx.rproxy.conf 

# cp /etc/nginx/conf.d/default.conf  /etc/puppet/modules/nginx/files/nginx.rproxy.conf

# cp /etc/nginx/conf.d/default.conf  /etc/puppet/modules/nginx/files/nginx.web.conf

# vim /etc/puppet/modules/nginx/files/nginx.rproxy.conf





显示master的过程

# puppet master --no-daemonize -d -v 

将默认的配置导入

# puppet master --genconfig >> /etc/puppet/puppet.conf

启动主服务

# service puppetmaster start



三、客户端agent配置:

软件安装

# yum install facter-1.7.5-1.el6.x86_64.rpm puppet-2.7.25-1.el6.noarch.rpm -y

请求证书

[root@node44 ~]# puppet agent --server node2.chinasoft.com -d -v --noop --test





服务端:

[root@node2 manifests]# puppet cert list

  "localhost.chinasoft.com" (6B:F4:26:12:92:BE:08:F8:90:49:9B:21:D7:25:89:86)

  "node44.chinasoft.com"    (E5:1D:A1:49:E4:D8:61:90:87:B5:DD:7B:0F:FD:EE:46)





颁发证书

[root@node2 manifests]# puppet cert sign node44.chinasoft.com





客户端再次执行请求

[root@node44 ~]# puppet agent --server node2.chinasoft.com -d -v --noop --test

在服务端定义node44节点,并导入

[root@node2 manifests]# cd /etc/puppet/manifests/

[root@node2 manifests]#vim  node44.chinasoft.com.pp

node 'node44.chinasoft.com' {

        include nginx::web

}

[root@node2 manifests]# vim site.pp

import "*.chinasoft.com.pp"





客户端请求

[root@node44 ~]# puppet agent --server node2.chinasoft.com -d -v --test





通过查看可以看到nginx已经顺利安装



四、添加新的客户端节点8.45

# yum install -y epel-release

# yum install facter-1.7.5-1.el6.x86_64.rpm puppet-2.7.25-1.el6.noarch.rpm -y

启动服务

# service puppet start

添加server

# vim /etc/puppet/puppet.conf

在master上颁发证书并定义node45的节点信息

[root@node2 nginx]# puppet cert list

  "localhost.chinasoft.com" (6B:F4:26:12:92:BE:08:F8:90:49:9B:21:D7:25:89:86)

  "node45.chinasoft.com"    (20:4C:8D:C3:66:E2:1A:31:E3:40:25:C6:79:8B:BA:3A)

[root@node2 nginx]# puppet cert sign node45.chinasoft.com

notice: Signed certificate request for node45.chinasoft.com

notice: Removing file Puppet::SSL::CertificateRequest node45.chinasoft.com at '/var/lib/puppet/ssl/ca/requests/node45.chinasoft.com.pem'

[root@node2 ~]# vim /etc/puppet/manifests/node45.chinasoft.com.pp

node 'node45.chinasoft.com'{

include nginx::rproxy

}





客户端手动请求(默认可能需要30分钟master向agent推送)



[root@node45 ~]# puppet agent --server node2.chinasoft.com -d -v --test



常用核心组件使用定义举例:

1、软件包及服务管理





# cat nginx.pp 

package {'nginx':

ensure => present,

name => nginx,

}





service {'nginx':

ensure => true,

name   => nginx,

enable => true,

}





# puppet apply nginx.pp 





2、文件属性

file {'/tmp/abc.txt':

        ensure => present,

        content => 'Hello puppet',

}





[root@node5 tmp]# ls

abc.txt  nginx.pp  test1.pp  test2.pp  test.pp

[root@node5 tmp]# cat abc.txt

Hello puppet





# vim test3.pp





file {'abc.txt':

ensure => present,

content => 'hello puppet',

path    => '/tmp/abc2.txt',

}





file {'fstab.symlink':

ensure => present,

target => '/etc/fstab',

path   => '/tmp/fstab.symlink',

}





3、exec命令

# vim test5.pp 

exec {'echo command':

command => 'mktemp /tmp/tmp.XXXX',

path => '/bin:/sbin:/usr/bin:/usr/sbin',

}





4、依赖关系





# vim test6.pp 

package {'nginx':

ensure => present,

name => nginx,

}





service {'nginx':

ensure => true,

name => nginx,

enable => true,

require => Package['nginx'],

}





# cat test7.pp 

file {'/tmp/test4.txt':

ensure => file,

content => 'hello puppet',

}





exec {'monitor':

command => 'echo "/tmp/text4.txt changed" >> /tmp/monitor.txt',

subscribe => File['/tmp/test4.txt'],

path => '/bin:/sbin:/usr/bin:/usr/sbin',

}





添加refreshonly => true 仅当改变时:

file {'/tmp/test4.txt':

ensure => file,

content => 'hello puppet',

}





exec {'monitor':

command => 'echo "/tmp/text4.txt changed" >> /tmp/monitor.txt',

refreshonly => true,

subscribe => File['/tmp/test4.txt'],

path => '/bin:/sbin:/usr/bin:/usr/sbin',

}





5、对用户及组管理

生成密码:

# openssl passwd -1 -salt `openssl rand -hex 4`





# cat test8.pp 

group {'testgrp':

ensure => present,

gid    => 1001,

} ->





user {'testuser':

ensure => present,

gid    => 1001,

uid    => 1001,

home   => '/home/test',

shell  => '/bin/tcsh',

password => '$1$7de78495$Of24FLn9EsKbhxxZlZFmF.',

managehome => true,

}





# vim file.pp

file {'/tmp/file1.txt':

ensure => file,

content => 'hello jack',

notify => Notify['notice'],

}





notify {'notice': message => '/tmp/file1.txt has changed',}





变量名的使用





# vim package1.pp 

$pkgname='httpd'





package{$pkgname:

        ensure => present,

}





service {$pkgname:

        ensure => true,

        enable => true,

        name => httpd,

        require => Package[$pkgname],

}



系统变量的引用:

执行facter可以打印出系统的变量

# facter

# cat sysinfo.txt 

 CentOS 

 RedHat 

 4 

 [root@node5 tmp]# cat facter.pp 

file {'/tmp/sysinfo.txt':

ensure => file,

content => " $operatingsystem \n $osfamily \n $processorcount \n $kernal"

}





# vim facter2.pp





$webserver = $operatingsystem ? {

/^(?i-mx:centos|fedora|redhat)/ => 'httpd',

/^(?i-mx:ubuntu|debian)/ => 'apache2',

}





$webprovider = $operatingsystem ? {

/^(?i-mx:centos|fedora|redhat)/ => 'yum',

/^(?i-mx:ubuntu|debian)/ => 'apt',

}





package {"$webserver":

ensure => present,

provider => $webprovider,

}





case语句方式

# vim facter3.pp

case $operatingsystem {

        /^(?i-mx:centos|redhat|fedora)/: {package {'httpd' : ensure => present, provider => 'yum',}}

        /^(?i-mx:ubuntu|debian)/: {package {'apache2' : ensure => present, provider => 'apt',}}

        default: {notify {'notice': message => 'unknown system',}}

}





class类的使用





# cat class1.pp 

class nginx {

package {'nginx':

ensure => present,

name => 'nginx',

}



service {'nginx':

ensure => true,

name => 'nginx',

require => Package['nginx'],

enable => true,

}

}





include nginx # 调用实例





定义类调用

# cat class2.pp 

$webserver = $operatingsystem ? {

/^(?i-mx:centos|redhat|fedora)/ => 'httpd',

/^(?i-mx:ubuntu|debian)/ => 'apache2',

}





class httpd ($pkgname = 'apache2') {

package {"$pkgname":

ensure => present,

name   => $pkgname,

}



service {"$pkgname" :

ensure => true,

enable => true,

require => Package["$pkgname"],

name => $pkgname,

}

}





class {'httpd':

pkgname => $webserver,

}

puppet高级功能之自动签发证书

1、自动签发证书

可以设置master自动签发所有的证书,我们只需要在/etc/puppet 目录下创建 autosign.conf 文件。(不需要修改 /etc/puppet/puppet.conf文件,因为我默认的autosign.conf 文件的位置没有修改)





服务端配置:

cat > /etc/puppet/autosign.conf <<EOF

*.chinasoft.com

EOF

这样就会对所有来自 magedu.com 的机器的请求,都自动签名





# cd /etc/puppet/manifests





添加node5主机的模板

# vim node5.chinasoft.com.pp 

node 'node5.chinasoft.com' {

        include nginx::web

}

重新加载让配置生效

# service puppetmaster reload





node5客户端:

添加对master主机的解析

192.168.8.41 node3.chinasoft.com node3

安装puppet客户端

# yum localinstall -y facter-1.7.5-1.el6.x86_64.rpm puppet-2.7.25-1.el6.noarch.rpm 

执行请求

# puppet agent --server node2.chinasoft.com -v -d --test





可以看到nginx已经成功安装





可以通过在网站搜索别人已经配置好的软件安装模板

http://forge.puppetlabs.com

centos6.5环境自动化运维之puppet实现nginx反向代理功能及puppet安装配置详解的更多相关文章

  1. centos6.5环境disconf管理端安装配置详解

    操作系统:centos6.5 x86_64 安装目录/data 1.安装nginx1.10.1 rpm -ivh http://nginx.org/packages/centos/6/noarch/R ...

  2. CentOS6.5安装配置详解

    1. 环境要求 VMWare软件: CentOS6.5对应的iso镜像文件(位数对应个人计算机位数). 2. 安装步骤 打开VMWare,文件->新建虚拟机(以下几步默认跳过即可) 命名和选择安 ...

  3. CentOS6.5下的Nagios安装配置详解(图文)

    最近因为,科研需要,接触上了Nagios,这里,我将安装笔记做个详解.为自己后续需要和博友们学习! VMware workstation 11 的下载 VMWare Workstation 11的安装 ...

  4. 【nginx运维基础(2)】Nginx的配置文件说明及虚拟主机配置示例

    配置文件说明 #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为当前主机的CPU总核心数. worker_processes 8; #全局错误日志定义类型, ...

  5. 【Linux 运维】查看网络连接状态信息之netstat和ss命令详解

    一.netstat 常用命令详解 通过man netstat可以查看netstat的帮助信息: netstat 命令:用于显示各种网络相关信息,如网络连接,路由表,接口状态,无效连接,组播成员 等等. ...

  6. ionic 开发APP 安装配置详解以及 cordova 环境配置详细过程

    整个安装过程:     1. jdk 1.7.2   (http://www.oracle.com/technetwork/java/javase/downloads/index.html) 安装好之 ...

  7. Python自动化运维:技术与最佳实践 PDF高清完整版|网盘下载内附地址提取码|

    内容简介: <Python自动化运维:技术与最佳实践>一书在中国运维领域将有“划时代”的重要意义:一方面,这是国内第一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的 ...

  8. puppet自动化运维

    Puppet实现自动化运维 一.案例分析 1.案例概述: 随着服务器数量的增多,系统管理员任务量也逐渐增加,这时就需要简洁的.强大的框架来完成系统管理任务为实现这一目的,我们将引入一批工具,这批工具是 ...

  9. 企业级自动化运维工具---puppet详解

    本文收录在Linux运维企业架构实战系列 1.认识puppet 1.1 引入 puppet是什么,咱们先不用专业的名词解释它,咱们先描述一些工作场景,看明白这些工作场景,自然会知道puppet是什么. ...

随机推荐

  1. 前端学习 -- Html&Css -- 层级和透明度

    层级 如果定位元素的层级是一样,则下边的元素会盖住上边的. 通过z-index属性可以用来设置元素的层级,可以为z-index指定一个正整数作为值,该值将会作为当前元素的层级,层级越高,越优先显示. ...

  2. Android打造(ListView、GridView等)通用的下拉刷新、上拉自动加载的组件

    原文 http://blog.csdn.net/bboyfeiyu/article/details/39253051       前言 下 拉刷新组件在开发中使用率是非常高的,基本上联网的APP都会采 ...

  3. websocket c++ example

    //============================================================================ // Name : websocket.c ...

  4. [luogu3197][越狱]

    luogu3197 思路 看了很久没思路,看了题解发现自己好zz.用全部的情况减去不合法的情况就行了.全部的情况就是每个人随便选,总共有\(m^n\)种情况,然后考虑不合法的情况,也就是任意相邻的两个 ...

  5. 关于scrollintoview()真的是有意思极了,结合普通tab切换一起看看

    scrollIntoView(alignWithTop) 是html5新特性中的一个元素,他主要是指滚动浏览器窗口或容器元素,以便在当前视窗的可见范围看见当前元素. alignWithTop是true ...

  6. 【float】与【position】汇总

    代码示例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  7. ElasticSearch集群介绍二

    ElasticSearch集群 一个运行中的 Elasticsearch 实例称为一个 节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力. ...

  8. AtomicInteger和count++的比较

    J2SE 5.0提供了一组atomic class来帮助我们简化同步处理.基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增.减.赋值(更新)操作 ...

  9. python---web框架本质(2)

    目录 controllers //存放控制方法 models //存放模型方法 views //存放视图模板 index.html new.html show.html index.py //用户访问 ...

  10. JS基础:翻转数组

    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; console.log(arr); //操作原数组,让原数组第一位和最后一个位调换位置,以此类推. for (va ...