• 学习Puppet(一)


    puppet的入门

    1.简介

    puppet是一种采用C/S星状结构的linux、Unix平台的集中配置管理系统。

    puppet拥有自己的语言,可管理配置文件、用户、cron任务、软件包、系统服务等。

    puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源的依赖关系。

    2.工作原理

    puppet是一个或者多个maste,众多client,所有的客户端都定期(默认为30分钟)使用facter工具把客户端的基本配置信息,通过https的xmlrpc协议发送给服务器端,服务器端通过分析客户端主机名,找到该主机的配置代码,然后编译配置代码,把编译好的配置代码发回客户端,客户端执行代码完成配置。并且把代码执行情况反馈给puppet服务器端。

    注释:xmlrpc是使用http协议作为传输协议rpc机制,使用xml文本的方式传输命令和数据。

    3、puppet的工作流程

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

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

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

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

    puppet工作过程中有两点值得注意:

    第一,   为了保证安全,client和master之间是基于ssl和证书的,只有经过master证书认证的client可以与master通信;

    第二,   puppet会让系统保持在你所期望的某种状态并一直维持下去,如检测某个文件并保证其一直存在,保证ssh服务始终开启,如果文件被删除了或者ssh服务被关闭了,puppet下次执行时(默认30分钟),会重新创建该文件或者启动ssl服务。

    4.安装部署

    1)环境准备(master和agent)

    # etc/init.d/iptables stop                      关闭iptables
    # /usr/sbin/ntpdate pool.ntp.org                时间同步,这块很重要
    # setforce 0                                    闭安全策略

    2)修改主机名和host解析

    echo "10.0.0.60  master.test.com">>/etc/hosts
    echo "10.0.0.61  agent.test.com">>/etc/hosts

    3)安装facter和puppet

    1、安装ruby环境
    # yum install ruby –y 
    2、建立puppet组和用户                                  
    # groupadd puppet                                      
    # useradd -g puppet -s /bin/false -M puppet  
    3、下载并安装软件包
    # wget http://downloads.puppetlabs.com/facter/facter-1.6.5.tar.gz
    # wget http://downloads.puppetlabs.com/puppet/puppet-2.6.13.tar.gz
    # tar xf facter-1.6.5.tar.gz 
    # cd facter-1.6.5
    # ruby  install.rb
    # facter                                检查,通常会收集主机的信息参数
    # tar xf puppet-2.6.13.tar.gz
    # cd puppet-2.6.13
    # ruby install.rb
    # cp conf/redhat/*         /etc/puppet/
    # cp conf/auth.conf        /etc/puppet/

    master端执行:

    # mkdir /etc/puppet/manifests                               创建配置文件目录
    # cp /etc/puppet/server.init  /etc/init.d/puppetmaster      拷贝启动文件到/etc/init.d下面
    # chmod 755 /etc/init.d/puppetmaster                        给权限
    # /etc/init.d/puppetmaster start                            启动服务
    # lsof -i:8140                                              查看端口是否起来

    授权(三步:请求-查询-授权):

    1、agent端执行:目的向master请求证书
    # puppetd --test --server master.test.com                   向master请求证书
    2、master端执行
    # puppetca -l                                               查看谁在请求证书
    # puppetca -s  agetn.test.com                               有查询结果再授权
    # puppetca -a                                               给所有的请求都授权
    #ll /var/lib/puppet/ssl/ca/signed/*                         此目录下多了agent.test.com
    3、agent端执行
    # puppetd --test --server master.test.com      
    4、若出错,删除以下文件重新执行以上三步:
    # rm -rf  /var/lib/puppet/ssl/                              删除agent端的ssl
    # rm -rf  /var/lib/puppet/ssl/ca/signed/agent.test.com      删除master端的

    4)资源

    常用的资源主要有以下几个:

    file:            文件管理

    package:   软件包管理

    service:     系统服务管理

    cron:         配置定期任务

    exec:        运行shell命令

    5、举例说明其实际应用

    5.1 文件配置

    master端:服务器端保存着所有对客户端服务器的配置代码,在puppet里面叫做manifests,客户端下载manifest之后,可以根据manifest对服务器进行配置,例如软件包管理,用户管理和文件管理等等。

    # cd /etc/puppet/manifests/
    # cat site.pp                                  此文件在配置文件server.sysconfig中有定义
    node default{
            file {"/tmp/test.txt":                 首行用冒号‘:’,之后的多行用逗号或分号分隔,最后一行可以没有
                    content=>"hello world
    ";
             }
    }
    意思:有一个默认节点(每一个agent叫做一个节点,在这个节点的/tmp下创建一个文件叫test.txt,里面的内容为hello world).
    agent端去验证
    # puppetd --test --server master.test.com       所有在master端配置以后,是在agent端来执行
    # cat /tmp/test.txt             
     

    再写一个:往/tmp 目录发送一个脚本

    # cat site.pp
    node default{
            file { "/tmp/clearlog.sh":
                    content=>"find /log/ -type f -size +10KB |xargs rm -f
    ";
            }
    }
    # puppetd --test --server master.test.com             此句可以写成脚本文件,注意/var/lib/puppet/state/lock
    # cat /tmp/test.txt             

    5.2 创建文件并改变用户和授权

    # cat site.pp
    node default{
    file {"/tmp/test.txt":
            owner => "root",              属主
            group => "puppet",            属组
            mode => "0777",               权限
            content => "test"             文件内容
    }
    }
    agent端验证
    # puppetd --test --server master.test.com
    ll /tmp/test.txt                      权限和属组已改变
    # cat /tmp/test.txt                   文本内容已改变   
    意思:当agent端执行的时,会到agent的/tmp下,创建文件test.txt并设置改文件所属用户为root,所属组为puppet,然后权限设置为 777

    5.3 管理用户和组

    group  {“test”:  
              gid=>999,
              ensure=>present,           present表示创建,absent表示删除
        }
    user  {“test”:                       管理用户
             name=>”test”,
             uid=>999,
             gid=>999,
             managehome=>true,           创建家目录
             groups=>[‘puppet’,’root’],  附加组
             shell=>”/bin/bash”,
             ensure=>present,
         }

    5.4 管理crontab任务

    # cat site.pp
    cron { "ntp time":
                    command => "/usr/sbin/ntpdate  pool.ntp.org >/dev/null 2>&1",
                    minute => '*/10',
                    hour => ['2-4'],
                    monthday => [2,4],
                    ensure => present,
                    environment => "PATH=/bin:/usr/bin:/usr/sbin"
    }
    agent端来验证
    # puppetd --test --server master.test.com
    #  crontab -l

     5.5 同步master端/etc/puppet/system_conf/script下的文件到agent

    a、修改master配置文件
       # vim /etc/puppet/fileserver.conf
    [ system_conf ]
                     path /etc/puppet/system_conf/
                     alow *
    b、重启master
       #  /etc/init.d/puppetmaster restart
    c、把需要同步的文件放到master 的/etc/puppet/system_conf/下
       # mkdir /etc/puppet/system_conf
       # cp /etc/resolv.conf /etc/puppet/system_conf/
       # echo "#test" >>/etc/puppet/system_conf/resolv.conf
    d、修改master端 site.pp
       # vim /etc/puppet/manifests/site.pp
    file { “/etc/resolv.conf”:
             mode=>644,            系统文件一定注意文件权限
             source => 
            “puppet://master.test.com/system_conf/resolv.conf”
    }
        可以配置:
                     系统文件  hosts , resolv.conf ,i18n ,yum配置文件
                     脚本文件  /script/service_all_clear.sh

    5.6 根据业务配置不同的机器

    #  vim /etc/puppet/manifests/site.pp
    node default{                      默认客户端
    file {"/tmp/test.txt":
            owner => "root",
            group => "puppet",
            mode => "0777",
            content => "test"
    }
    node ‘agent.test.com’  {           仅应用于agent客户端,可以用正则表达式
    file  {“/etc/resolv.conf”:  
        mode=>664,  
        source=>”puppet://master.test.com/system_conf/resolv.conf”,
    }
    }

    6、重要配置文件

    puppet.conf(主配置文件)、server.init(服务端启动脚本)、client.init(客户端启动脚本)、fileserver.conf(文件服务器)、server.sysconfig(服务端环境变量)、client.sysconfig(客户端环境变量)

     master端启动脚本中涉及到文件/etc/sysconfig/puppetmaster,可将配置文件/etc/puppet/server.sysconfig复制为/etc/sysconfig/puppetmaster;

    也可更改启动脚本(:%s#/etc/sysconfig/puppetmaster#/etc/puppet/server.sysconfig#g)。

  • 相关阅读:
    按之字形打印二叉树 --剑指offer
    浅谈PHP+Access数据库的连接 注意要点
    Linux下统计代码行数
    获取服务器IP,客户端IP
    CURL访问举例
    廖雪峰博客
    Redis命令
    svn merge和branch 详解
    Linux Screen超简明教程
    MySQL 的Coalesce函数
  • 原文地址:https://www.cnblogs.com/wuhg/p/10002227.html
Copyright © 2020-2023  润新知