puppet进阶管理之终极应用

     上一篇博客写了puppet操作file、cron、user、group、exec基础资源的使用,连接地址为 http://www.178linux.com/13990 

这次实验puppet的操作Package、Server和puppet的特殊资源属性Metaparameters。

回顾下Package、Server资源属性:  

    package的常用属性:
    ensure:present安装, installed安装, absent不能安装, latest,VERSION(2.3.1-2.el7)–目标状态
    name: 程序包名称:
    source:包文件的路径,可以是本地文件系统路径,也可以网络文件路径;
    puppet:///modules/MODULE_NAME/FILENAME

    provider:指明程序包提供者默认为yum;

 

   service的常用属性:
    ensure:
    true, running
    false, stopped
   enable: true|false 是否开机自动启动
   name:服务名称
   hasrestart:是否支持restart参数
   hastatus:是否支持status参数
   path: 服务脚本路径
   pattern:用于搜索此服务相关的进程的模式,当脚步不支持restart/status时,用于确定服务是否处于运行状态;

 

一、puppet使用package安装glances监控工具:

            

    1、编辑site.pp:

          site-glances.jpg

        本地测试site.pp

        glances-apply.jpg

      2、agent连接master:

            agent-glance.png

            agent运行glances监控命令:

            glance1.jpg

 

二、puppet特殊资源属性:Metaparameters

        
    puppet提供了before、require、notify、subscribe四个元参数来定义资源间的相关性,这四个元参数都有另外的其他资源或资源组作为其值,这也称     作资源引用,资源引用要通过“Type [title]”的方式进行,如User['test'],首字母必须大写。
    依赖关系:
        before => Type['title'] 被依赖的资源中使用
        require => Type['title']依赖其他资源的资源
        链式依赖:->
    通知关系
        notify =>  通知被依赖的资源中使用
        subscribe => 订阅监听其他资源的资源
        链式通知:~>

1、创建linux组,gid=3000。linux组的gid依赖用户centos的gid。

            user-group.jpg

           agent-user.jpg

            同理,如果使用require。在user段中加入require => Group['linux']即可。

三、puppet使用server属性安装nginx服务:

        nginx.png

        nginx-apply.jpg

        

四、puppet使用class、modules功能:

     类:命名的puppet代码块,需要时可通过名称进行调用,用于公共目的一组资源,是命名的代码块,创建后可用在puppet全局调用,类可以被继承

             备注:类的名字只能以小写字母开头,类在声明后方可执行。

     类的的声明:                 
         类声明方式1:声明一个类
               include class1, class2, …
                       class {'classname': }

         定义带参数的类:
                   class class_name ($arg1=value1, $arg2=value2) {
                    …puppet code…
                                           }

         类声明方式2,传递参数:
               class {'class_name':
                    para1 =>  new_value1,
                    para2  =>  new_value2,
                           }

1、使用class创建webserver类:

          class-nginx.jpg

            本地测试:

         class-nginx1.jpg

 

puppet模板:基于ERB模板语音,在静态文件中使用变量等编程元素生成适用于多种不用的环境的文本(配置文件):Embedded RUBY
                      用于实现在文本中嵌入ruby代码,原来的文本信息不会改变,但ruby代码会被执行,执行结果将直接替换原来代码:

         puppet模块:为了实现某种完备功能而组织成的一个独立的、自我包含的目录结构

              目录结构:/etc/puppet/modules
               module_name:  manifests: –资源清单
               init.pp: 至少应该包含一个与当前模块名称同名类;      
               MODULE_NAME::[SUBDIR_NAME]::MANIFESTS_FILE_NAME
               files:静态文件
               puppet url    puppet:///modules/MODULE_NAME/[SUBDIR_NAME]/FILE_NAM
               templates: 模板文件目录    模板文件:*.erb
               template('MODULE_NAME/TEMPLATE_FILE_NAME');

               lib: 插件目录  tests: 模块使用帮助文档    spec: 类似于tests目录,存储lib目录下定义的插件的使用帮组和示例文件:

 

1、手工创建nginx模块并新建nginx、nginx_webserver、nginx_proxy类:

    module-nginx1.jpg

    [root@master modules]# cp /etc/puppet/manifests/site.pp /etc/puppet/modules/nginx/manifests/init.pp

    [root@master modules]# cp /opt/moudules/nginx/nginx_proxy.conf /etc/puppet/modules/nginx/files/nginx.conf

        module-nginx2.jpg

     编辑/etc/puppet/manifests/site.pp调用模板中的类:(在生成环境中根据不同节点调用不同的模板和类)

        module-site.jpg

    在agent.puppet.com上应用模板中的类nginx_proxy:

        moudule-agent1.jpg

        注意:生成环境中先在本地测试跑在运行

                    puppet agent –server=master.puppet.com –no-daemonize –verbose –noop

2、puppet多环境配置:

        在实际工作中服务器配置可能会有开发环境、测试环境、生成环境。puppet可以定义不同的环境配置让其agent连接。

        master:  vim /etc/puppet/puppet.conf  在master端中添加支持

                     [master]
                     environmnet=production,testing,development — 声明master支持环境
                      [production]
                              manifest = /etc/puppet/envionments/production/manifests/
                              modulepath = /etc/puppet/envionments/production/modules/
                              fileserverconfig = /etc/puppet/filesserver.conf
  
                      [testing]
                              manifest = /etc/puppet/envionments/testing/manifests/
                              modulepath = /etc/puppet/envionments/testing/modules/
                              fileserverconfig = /etc/puppet/filesserver.conf

                      [development]
                              manifest = /etc/puppet/envionments/development/manifests/
                              modulepath = /etc/puppet/envionments/developmentmodules/
                              fileserverconfig = /etc/puppet/filesserver.conf

agent:
      [agent] –声明agent处于哪个环境 
          enviroment = testing

五、puppet拓展思路:

随着公司应用需求的增加,需要不断的扩展,服务器数量也随之增加,当服务器数量不断增加,我们会发现一台puppetmaster响应很慢,压力大,解析缓慢,有什么优化的方案吗?可以使用Puppetmaster配置多端口,结合Nginx web代理,这样puppetmaster承受能力至少可以提升10倍以上。

要使用puppet多端口配置,需要指定mongrel类型,默认没有安装。如果配置多主集群的话,可以共享master1的证书,然后另外一台master通过NFS挂载证书即可。

                    

 

 

 

   感谢马哥,每天进步一点点!         

原创文章,作者:n18-jude,如若转载,请注明出处:http://www.178linux.com/14611

(0)
n18-juden18-jude
上一篇 2016-04-12 19:00
下一篇 2016-04-12 19:00

相关推荐

  • M20 – 1- 第二周博客(1):帮助手册查询的使用

    Linux系统中存在诸多的命令,而这些命令分为内键命令和外部命令。如何查询命令属于内部还是外部呢。前一篇博客已经介绍type命令,type命令可以区分命令属于内部还是外部,下面举个例子: 为什么这一期博客还重复讲如何区分内部与外部命令呢,因为在man手册查询中,内部命令并不是使用man查询帮助手册,仅仅使用与外部命令,那内键命令如何查询呢,接下来要讲的就是h…

    Linux干货 2016-08-02
  • 通过Nginx来安装一个discuz,软件并不是编译安装的

    这次由于时间有限,所以我就没有用编译安装来启动LMP,只有Nginx 是编译安装的 因为是在centos7上面安装的Nginx所以我们这里由于能力有限,暂时不能将其加入开机启动,日后我会进行改进,将其加入开机启动。这里我们给出Nginxd的编译选项及环境   yum groupinstall "Development&…

    Linux干货 2016-10-25
  • HA专题: corosync+pacemaker实现nginx高可用

    HA专题: corosync+pacemaker实现nginx高可用 前言 实验介绍 实验拓扑 实验环境 实验步骤 准备工作 安装HA集群组件 安装nginx和配置nfs 使用crmsh配置集群资源 测试 总结 前言 这几天都会学习高可用集群, 也会将其中的一些实验写出来分享给大家, 这个专题估计会写5篇左右, p.s: 写博客很累的 实验介绍 这次的实验比…

    Linux干货 2016-04-11
  • 第二周相关习题。

    习题 显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。 [root@localhost /]# ls -d /var/l*[0-9]*[[:lower:]] 显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。 [root@localhost&n…

    Linux干货 2016-11-05
  • 文件查找

    文件查找 简介:在文件系统上查找符合条件的文件,就是文件查找。 文件查找命令:locate, find            非实时查找(数据库查找):locate        &nbsp…

    Linux干货 2016-08-18
  • 笔记整理:权限管理2-特殊权限(sst)和隐藏属性

    特殊权限 进程访问文件时的权限,取决于进程的发起者和其所在的属组。还有其他权限,包括SST(Suid【可以更改进程发起者】,Sgid【可以更改进程发起者属组】,Sticky) 查询SUID/SGID文件   find / -perm +6000 SUID 使用特点 SUID只能作用在二进制文件上。 执行者需要对该文件具有可执行权限 只在程序运行过程…

    Linux干货 2016-08-05