Puppet是一种自动化配置管理工具,它可以帮助系统管理员快速地部署、管理和维护多台服务器的配置。Puppet使用一种声明式的语言来描述服务器的期望状态,然后通过客户端-服务器的模式来实现配置的同步和更新。Puppet可以大大提高系统管理员的工作效率和质量,同时也降低了人为错误和配置不一致的风险。本文将介绍Puppet的基本概念、架构和工作原理,以及如何使用Puppet来管理Linux服务器的配置。
为什么要使用puppet?
当你去管理10 台服务器,你肯定会说小意思。没有任何压力。
当你去管理100 台服务器,你肯定也会说小意思。
当你去管理 1000+台服务器呢?你是不是就头痛了,不同的机器,不同的系统,使用不同的软件版本,配置也不一样。这样为了提升效率。Puppet 就派上了大用场。
Puppet 架构
puppet工作原理:
Puppet 后台运行的时候默认是半小时执行一次,不是很方便修改。可以考虑不让它 在后台跑而是使用crontab 来调用。这样可以精确控制每台客户端的执行时间。分散 执行时间也可以减轻压力
Puppet 的工作细节分成如下几个步骤:
1、客户端puppetd 调用facter ,facter 会探测出这台主机的一些变量如主机名、内存大小、IP 地址等。然后puppetd 把这些信息发送到服务器端。
2、服务器端的puppetmaster 检测到客户端的主机名,然后会到manifest 里面对应的node 配置,然后对这段内容进行解析,facter 送过来的信息可以作为变量进行处理的,node 牵涉到的代码才解析,其它的代码不不解析,解析分几个过程:语法检查、然后会生成一个中间的伪代码,然后再把伪代码发给客户机。
3 、客户端接收到伪代码之后就会执行,客户端再把执行结果发送给服务器。
4、服务器再把客户端的执行结果写入日志。
Puppet组织结构:
为什么要说puppet 的组织结构?当你安装完puppet 后,你会发现你不知道它的目录结构是什么样的。要如何组织,怎么样才算合理?puppet 目录在/etc/puppet 下面。
树结构如下:
|-- puppet.conf #主配置配置文件
|-- fileserver.conf #文件服务器配置文件
|-- auth.conf #认证配置文件
|-- autosign.conf # 自动验证配置文件
|-- tagmail.conf #邮件配置文件(将错误信息发送)
|-- manifests #文件存储目录(puppet 会先读取该目录的.PP 文件)
| --nodes
| | | puppetclient.pp
| |-- site.pp #定义puppet 相关的变量和默认配置。
| |-- modules.pp #加载class 类模块文件(include syslog)
|-- modules #定义模块
| -- syslog #以syslog 为例
| |-- file
| |-- manifests
| | |-- init.pp #class 类配置
| |--- templates #模块配置目录
| | |-- syslog.erb #erb 模板
基本介绍到这,在这里也分享下PUPPET的中文WIKI:http://puppet.wikidot.com/
E文不错的也可以直接到官网看:http://www.puppetlabs.com/
环境搭建
然后开始安装,这里选择的是源码安装,puppet是运行在ruby环境的,所以需要安装ruby
上传ruby-1.8.6,facter-1.6.0,puppet-2.7.1到/tmp目录(这3个安装包见附件)
tar zxvf ruby-1.8.6-p114.tar.gz
cd ruby-1.8.6-p114
./configure
make
make install
cd /tmp
tar zxvf facter-1.6.0.tar.gz
cd facter-1.6.0
ruby install.rb
cd /tmp
tar zxvf puppet-2.7.1.tar.gz
cd puppet-2.7.1
ruby install.rb
mkdir -p /etc/puppet &&cp conf/redhat/* /etc/puppet/ && cd ~
添加host文件解析
安装完成后需要把主机名和IP写入hosts,因为puppet是根据主机名来识别的,所以主机名对puppet来说比较重要:
echo "192.168.1.100 puppetmaster" >> /etc/hosts
echo "192.168.1.200 app_1 " >> /etc/hosts
开了防火墙的需要在防火墙里面添加8140端口
-A RH-Firewall-1-INPUT -s 192.168.0.0/255.255.0.0 -p tcp -m tcp --dport 8140 -j ACCEPT
完成后服务端运行
[root@cyy100 templates]# puppetmasterd
客户端运行:
[root@cyy111 ~]# puppetd --server cyy100 --test
“
PS:这里说一下的就是客户端第一次向服务端请求证书的时候要保证两边的时间是同步的,要不会报错
err: Could not retrieve catalog from remote server: certificate verify failed
出现这个错误首先同步时间:
/usr/sbin/ntpdate time.nist.gov
然后删除两边的SSL证书
rm -f /var/lib/puppet/ssl/ca/signed/caotest-2.cym.pem ###服务端 rm -rf /var/lib/puppet/ssl/ ###客户端
再重新验证
[root@cyy111 ~]# puppetd --server cyy100 --test
”
没什么问题应该成功了,puppet默认是半小时执行一次,个人推荐用定时任务来执行
实验验证
可以先随便写个类来验证下是否成功
[root@cyy100 templates]# cd /etc/puppet
[root@cyy100 puppet]# cd modules/
[root@cyy100 modules]# mkdir test/
[root@cyy100 modules]# mkdir test/manifests/
[root@cyy100 modules]# mkdir test/files/
[root@cyy100 modules]#vi test/files/init.pp
在init.pp里面写入以下内容
class po {
file { "/tmp/test.txt":
ensure => present,
group => "root",
owner => "root",
mode => "0644",
source => "puppet:///test/test.txt"
}
}
然后在/etc/puppet/modules/est/files下面创建一个test.txt文件,往里面写入:
hello world !
在/etc/puppet/manifests/modules.pp 写入:
import "test"
在/etc/puppet/manifests/node里面写入:
node 'cyy111'{
include po
}
然后在客户端执行
puppetd --server cyy100 --test
就可以看到test.txt文件下发到客户端的/tmp目录下了。
通过本文,我们了解了Puppet的基本概念、架构和工作原理,以及如何使用Puppet来管理Linux服务器的配置。我们可以通过安装Puppet Server和Puppet Agent来搭建一个简单的Puppet环境,然后通过编写和应用Puppet Manifest来实现服务器的配置管理。我们也可以通过使用Puppet Forge来获取和使用社区提供的各种模块,从而扩展Puppet的功能和覆盖范围。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !