博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
puppet的原理+安装方法+案例
阅读量:2348 次
发布时间:2019-05-10

本文共 6433 字,大约阅读时间需要 21 分钟。

一、什么是puppet

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

二、Puppet的工作模式

Puppet是一个C/S架构的配置管理工具,在中央服务器上安装puppet-server软件包(被称作Puppetmaster)。在需要管理的目标主机上安装puppet客户端软件(被称作PuppetClient)。当客户端连接上Puppetmaster后,定义在Puppetmaster上的配置文件会被编译,然后在客户端上运行。每个客户端默认每半个小时和服务器进行一次通信,确认配置信息的更新情况。如果有新的配置信息或者配置信息已经改变,配置将会被重新编译并发布到各客户端执行。也可以在服务器上主动触发一个配置信息的更新,强制各客户端进行配置。如果客户端的配置信息被改变了,它可以从服务器获得原始配置进行校正。puppet的服务器端保存着所有的对客户端服务器的配置代码,在puppet里面叫做manifest(清单). manifest(清单)存放在puppetmaster 服务端。puppet客户端下载manifest之后,可以根据manifest对服务器进行配置,例如软件包管理,用户管理和文件管理等等。

1)工作流程

  1. 客户端puppet调用facter(facter是通过ssl加密收集及检测分析客户端配置信息的一个工具),facter探测出主机的一些变量,如主机名,内存大小,ip地址等。Puppet把这些信息通过ssl连接发送到服务器器端
  2. 服务器端的puppetmaster通过facter工具分析检测客户端的主机名,然后找到项目主配置文件mainfest里面对应的node配置,并对该部分内容进行解析。Facter发送过来的信息可以作为变量处理,node牵扯到的代码才解析,其他没牵涉的代码不解析,解析分为几个阶段,首先进行语法检查,如果语法没错,就继续解析,解析的结果生成一个中间的“伪代码”,然后把伪代码发送给客户端。
  3. 客户端接收到伪代码,并执行,客户端把执行的结果发送给服务器。
  4. 服务器把客户端的执行结果写入日志。
  • Puppet工作过程有以下两点值得注意:
  1. 为了保证安全,client和master之间是基于ssl和证书的,只有经master证书认证的client可以与master通信。
  2. Puppet会让系统保持在人们所期望的某种状态并一直维持下去,例如:检测某个文件并保证其一直存在,保证ssh服务始终开启,如果文件被删除了或者ssh服务被关闭了,puppet下次执行时(默认30分钟),会重新创建该文件或者启动ssh服务。

三、环境

主机 os IP地址 主要软件
puppetmaster centos6.5 192.168.1.1

facter-1.7.1.tar.gz

puppet-2.7.21.tar.gz

puppetclient1 centos6.5 192.168.1.2

facter-1.7.1.tar.gz

puppet-2.7.21.tar.gz

puppetclient2 centos6.5 192.168.1.3

facter-1.7.1.tar.gz

puppet-2.7.21.tar.gz

NTPserver centos6.5 192.168.1.4 ntp-4.......

四、实战

1)准备环境

  1. 配置ip地址实现互通
  2. 配置hosts文件(修改/etc/hosts文件,服务器多的时候需要搭建dns服务器来实现服务通过主机名进行通信,这里就以/etc/hosts文件来实现)
  3. 配置ntp实现时间同步

2)安装puppet(注:在puppetmaster)

  1. 安装ruby(puppet就是基于ruby语言开发的,所以需要安装ruby)
  2. yum -y insatll compat-readline5   rubyruby -v  #查看版本

    安装facter和puppet

  3. #安装factertar zxf facter... -C /usr/srccd /usr/src/facter..ruby install.rb#安装puppetuseradd -s /sbin/nologin puppettar zxf puppet... -C /usr/srccd /usr/src/puppet...ruby install.rb

    复制配置文件

  4. cd /usr/src/puppet...cp conf/redhat/fileserver.conf /etc/puppetcp conf/redhat/puppet.conf /etc/puppetcp conf/redhat/server.init /etc/init.d/puppetmasterchmod +x /etc/init.d/puppetmasterchkconfig --add puppetmasterchkconfig puppetmaster on注:#auth.conf --> puppet server对client访问的ACL配置文件    #fileserver.conf --> puppet server 作为文件服务器的ACL配置文件    #manifests --> Puppet脚本主文件目录,至少需要包含site.pp文件,site.pppuppet主文件(入口文件)。所有要在服务器上执行的操作都写在这种.pp结尾的文件中。    #puppet.conf --> Puppet服务器配置文件

    创建节点目录和模板目录

  5. mkdir  /etc/puppet/manifestsmkdir  /etc/puppet/moduleschown -R puppet /etc/puppet/modules

    修改配置文件,并启动

vim /etc/puppet/puppet.conf【main】添加:modulepath = /etc/puppet/modules:/usr/share/puppet/modules  #配置服务器模块路径service puppetmaster startnetstat -anpt | grep rubytcp        0      0 0.0.0.0:8140                0.0.0.0:*                   LISTEN      2306/ruby  #puppetmaster监听端口为8140

2)安装puppetclient(注puppetclient1和puppetclient2一样)

#安装rubyyum -y insatll compat-readline5  ruby#安装factertar zxf facter... -C /usr/srccd /usr/src/facter..ruby install.rb3安装puppetuseradd -s /sbin/nologin puppettar zxf puppet... -C /usr/srccd /usr/src/puppet...ruby install.rb#配置puppetcd /usr/src/puppet...cp conf/redhat/puppet.conf /etc/puppetcp conf/redhat/client.init /etc/init.d/puppetclientchmod +x /etc/init.d/puppetclientchkconfig --add puppetclientchkconfig puppetclient on#修改配置文件vim /etc/puppet/puppet.conf【main】添加:	server = master.benet.com   #设置master服务器的域名

3)注册服务器(分别在puppetclient1和puppetclient2上进行注册)

puppet agent --server=master.benet.com --no-daemonize --verbose

4)在puppetmaster实现服务器统一匹配

  1. puppet  cert  --list      查看申请注册客户端puppet  cert  sign  --all 将未注册的客户端进行注册ls -l /var/lib/puppet/ssl/ca/signed

    注:以上puppet的搭建就完成了。接下来我们一起举几个例子理解一下吧!

  • 例子1    目标:为了保护linux的ssh端口爆破,批量修改客户端的sshd端口,将22号端口改为9922,并实现重启sshd服务的工作。
  1. 需要明确几点:

    ①需确定openssh软件包安装 (openssl openssl-devel)

    ②需确定存在ssh的配置文件

    ③确定sshd的服务是系统服务

    创建ssh模块,模块的目录为ssh,模块下有三个文件分别是:manifests、templates、files。 manifest里面必须包含一个init.pp文件,这是该模块的的初始(入口)文件,导入一个模块的时候需要从init.pp开始执行,可以把所有的代码都写入到这个文件中,也可以分成多个.pp文件,init在去包含其他文件,定义class类名时必须是ssh,这样才能实现调动;files目录是该模块的发布目录,puppet提供了一个文件分割机制,类似rsync的模块。templates目录包含erb模块文件、这个和file资源的templates属性有关(很少使用)master端

  2. 创建目录(注:在master)
  3. mkdir -p /etc/puppet/manifests/nodesmkdir -p /etc/puppet/modules/ssh/{manifests,templates,files}mkdir /etc/puppet/modules/ssh/files/sshchown -R puppet /etc/puppet/modules

    创建模块(注:在master)

  4. cd /etc/puppet/modules/ssh/manifests	vim install.pp			//确定客户端安装了ssh服务		class ssh::install {		package{ "openssh":			ensure => present,		}		}	vim config.pp        #这个文件的内容主要是定义,发布的配置文件权限以及调用ssh::install检查client是否安装了ssh服务,以及调用ssh::service重新启动sshd服务。		class ssh::config{		file { "/etc/ssh/sshd_config":			//配置客户端需要同步的文件  		ensure => present,				//确定客户端此文件存在  		owner =>"root",						//文件所属用户  		group =>"root",						//文件所属组 		mode =>"0600",						//文件权限 	   source=>"puppet://$puppetserver/modules/ssh/ssh/sshd_config",  //从服务器同步文件的路径 	require => Class["ssh::install"],		//调用ssh::install确定openssh已经安装  	notify => Class["ssh::service"],		//如果config.pp发生变化通知service.pp	}	}	    vim service.pp		    class ssh::service{        		service{ "sshd":					                		ensure =>running,	 //确定sshd运行				hasstatus=>true,	//puppet该服务支持status命令				hasrestart=>true,      //puppet该服务支持status命令 										                                        enable=>true,	        //服务是否开机启动             	require=>Class["ssh::config"]    //确认config.pp调用		}		}	vim init.pp   #模块主配置文件		class ssh{			include ssh::install,ssh::config,ssh::service		}

     

  5. 建立服务器端ssh统一维护文件;(由于服务器端和客户端的sshd_config文件默认一样,此时将服务器端/etc/ssh/sshd_config复制到模块默认路径。)
  6. cp /etc/ssh/sshd_config  /etc/puppet/modules/ssh/files/sshchown puppet /etc/puppet/modules/ssh/files/ssh/sshd_config

     

  7. 创建测试节点配置文件,并将ssh加载进去
  8. vim /etc/puppet/manifests/nodes/ssh.pp		node 'client1.benet.com' {			include ssh		}		node 'client2.benet.com' {			include ssh		}vim /etc/puppet/manifests/site.pp  #将测试节点载入puppet,修改site.pp 		import "nodes/ssh.pp"

    修改服务器端维护的sshd_config配置文件

  9. vim /etc/puppet/modules/ssh/files/ssh/sshd_config		port 8922#重启puppet	service puppetmaster restart#客户端puppetclient1主动拉取	puppet agent -t

    查看puppet的sshd的端口是否变为8922,如果变为8922说明ok

  • 服务器推送同步(在puppetclient和puppetclient2)
  1. vim /etc/puppet/puppet.conf   #修改puppet主配置文件			listen = true    #使puppet监听8139端口vim /etc/puppet/auth.conf    #修改puppet验证配置文件,定义权限			allow *          #允许任何service puppetclient start

    再次把服务器的ssh配置文件端口改为8822 (在master)

  2. vim /etc/puppet/modules/ssh/files/ssh/sshd_config		port 8822#master服务器推送:puppet kick client2.benet.com

    查看puppetclient1和2的sshd的端口是否变为8822,如果变为8922说明ok

你可能感兴趣的文章
2019/8/2每日新闻
查看>>
springboot新手脱坑
查看>>
Word在试图打开文件时遇到错误。 请尝试下列方法: 检查文档或驱动器的文件权限。 确保有足够的内存和磁盘空间。 用文本恢复转换器打开文件。
查看>>
linux总结
查看>>
java基础总结
查看>>
WEB基础及面试总结
查看>>
Spring
查看>>
设计模式
查看>>
JVM
查看>>
Mybatis
查看>>
Redis 面试全攻略 3W字大集合
查看>>
SpringMVC
查看>>
秒懂GitHub用法
查看>>
Java开发技术大纲
查看>>
腾讯java面试
查看>>
Spring面试题和答案
查看>>
forward(转发)和redirect(重定向)的区别是什么?
查看>>
CSDN中转载博客(三步)
查看>>
JSP还用学吗?
查看>>
SpringBoot
查看>>