面向云的主机配置管理工具-Puppet

来源:互联网 发布:windows c 多线程 编辑:程序博客网 时间:2024/05/09 19:40
实验环境
网关  classroom  172.25.8.254
workstation 172.25.8.9
server a-jeth0 172.25.8.10-外网
eth1 192.168.0.x内网
eth2 192.168.1.x备用
--------------------------------------------
需求:随着云技术的技术普及,服务器或虚拟机在数据中心应用中频繁扩展和增减,传统的系
统维护方法无法满足企业的需求,于是出现了中心化的配置管理软件,利用中心化的配置管
理,可以把整个数据中心的服务器或虚拟机的所有配置内容有效的组织并管理起来,以此实
现大规模化的管理以及快速部署。
设计:面向云的主机配置管理工具-Puppet
Puppet 是由 Ruby 语言开发,并使用 GPLv2 协议授权的开源软件,它可以运行在
C/S 模型(客户端 - 服务器端)下,也可以独立运行。它可以用来管理 UNIX( 包括 OSX )
和 Linux 平台,并且在最新版本中也添加了对 Windows 的支持。 Puppet 结合其他软件可
以管理一台主机或一个虚拟机的整个生命周期:从初始化安装到软件升级、从系统维护到服
务器迁移,从 DNS zone 配置到 Nginx 虚拟主机创建。 Puppet 被设计成能够持续化的与被
控主机进行交互,和 Cobbler 不同 Puppet 不仅仅提供一个负责搭建主机系统的服务,它还
提供管理操作系统之上应用服务器的工具。
Puppet 拥有一个易于实施且简单的操作模型,这个模型由三部分组成:
1. 部署
2. 配置语言和资源抽象层
3. 事务层
原理:首先我们需要编辑“ Puppet Master” 上的 site.pp 文件,需要用到一个 import 指令和
定义一个变量 $puppetserver (可以不写)。
import 指令告诉“ Puppet Master” 载入一个叫 nodes.pp 的文件,这个指令很想 C 语
言中的 include 指令,在“ Puppet Master” 启动的时候,就会载入并处理 nodes.pp 文件,

在nodes.pp 中我们将定义每个连接到“ Puppet Master” 的” Puppet Agent” 节点。
将第一个节点 node1.uplooking.com ,这需要我们编辑之前 site.pp 中申明
的 nodes.pp 文件。
在定义节点时,首先要指定节点的名字,并使用单引号将名字引起来,然后在大括号中
指定需要应用的配置。节点名应该是可以被解析的。如果指定多个节点,可以使用正则表达
式,

motd 模块的 init.pp 文件中包含一个独立的类 motd ,类中包含两个资源:一个软件包
和一个文件资源。

硬件:linux
系统:rhel7
软件:facter-2.4.1-1.el7.x86_64.rpm            ruby-augeas-0.5.0-1.el7.x86_64.rpm
hiera-1.3.4-1.el7.noarch.rpm             rubygem-rgen-0.6.6-2.el7.noarch.rpm
puppet-3.6.2-3.el7.noarch.rpm            ruby-shadow-1.4.1-23.el7.x86_64.rpm
puppet-firewalld-0.1.3-1.el7.noarch.rpm  puppet-server-3.6.2-3.el7.noarch.rpm(puppet-server只有服务器安装)
服务:puppetmaster  puppet
部署过程:
注:主服务器的4、5、6要在从服务器完成1、2、3之后再做。
主服务器
1.安装puppet软件包
2.修改主服务器hosts文件让一个ip指向从服务器
3.修改配置文件puppet.conf  [master]
4.对从机签名
5./etc/puppet/manifests目录下vim site.ppvim nodes.pp
6.在目录/etc/puppet/modules/mymotd/manifests下新建一个init.pp文件#mymotd目录以及子目录为自建的mymotd与模块同名
/etc/puppet/modules/以模块名建立的目录/manifests/init.pp
从服务器
1.安装puppet软件包
2.修改从服务器hosts文件让一个ip指向主服务器
3.修改配置文件puppet.conf[main][agent]

详细部署过程:
**********************************************************
servere:主服务器
[root@servere ~]# mount 172.25.254.250:/content /mnt
[root@servere ~]# cd /mnt/ula/puppet/
[root@servere puppet]# ls
facter-2.4.1-1.el7.x86_64.rpm            ruby-augeas-0.5.0-1.el7.x86_64.rpm
hiera-1.3.4-1.el7.noarch.rpm             rubygem-rgen-0.6.6-2.el7.noarch.rpm
puppet-3.6.2-3.el7.noarch.rpm            ruby-shadow-1.4.1-23.el7.x86_64.rpm
puppet-firewalld-0.1.3-1.el7.noarch.rpm  面向云的主机配置管理工具-puppet.pdf
puppet-server-3.6.2-3.el7.noarch.rpm
[root@servere puppet]# yum -y localinstall *.rpm#安装puppet软件包
[root@servere puppet]# vim /etc/hosts
[root@servere puppet]# cat /etc/hosts#修改hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.25.254.254 classroom classroom.example.com
172.25.254.254 content content.example.com
172.25.8.14  servere.pod8.example.com
172.25.8.15  serverf.pod8.example.com
[root@servere puppet]# cd /etc/puppet/
[root@servere puppet]# vim puppet.conf #修改配置文件
--------------------------------------
[master]
   certname=servere.pod8.example.com

--------------------------------------

[root@servere puppet]# systemctl start puppetmaster
----------------------------------------------------
serverf:从服务器
[root@serverf ~]# mount 172.25.254.250:/content /mnt
[root@serverf ~]# cd /mnt/ula/puppet/
[root@serverf puppet]# ls
facter-2.4.1-1.el7.x86_64.rpm            ruby-augeas-0.5.0-1.el7.x86_64.rpm
hiera-1.3.4-1.el7.noarch.rpm             rubygem-rgen-0.6.6-2.el7.noarch.rpm
puppet-3.6.2-3.el7.noarch.rpm            ruby-shadow-1.4.1-23.el7.x86_64.rpm
puppet-firewalld-0.1.3-1.el7.noarch.rpm  面向云的主机配置管理工具-puppet.pdf
puppet-server-3.6.2-3.el7.noarch.rpm
[root@serverf puppet]# yum -y localinstall facter-2.4.1-1.el7.x86_64.rpm ruby-augeas-0.5.0-1.el7.x86_64.rpm hiera-1.3.4-1.el7.noarch.rpm rubygem-rgen-0.6.6-2.el7.noarch.rpm puppet-3.6.2-3.el7.noarch.rpm ruby-shadow-1.4.1-23.el7.x86_64.rpm puppet-firewalld-0.1.3-1.el7.noarch.rpm#安装puppet软件包
[root@serverf puppet]# vim /etc/hosts#修改hosts文件
[root@serverf puppet]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.25.254.254 classroom classroom.example.com
172.25.254.254 content content.example.com
172.25.8.15  serverf.pod8.example.com
172.25.8.14  servere.pod8.example.com
[root@serverf puppet]# vim /etc/puppet/puppet.conf #修改从机puppet配置文件
------------------------
[main]
server = servere.pod8.example.com
[agent]
runintervar = 5
-------------------------
[root@serverf puppet]# systemctl start puppet
--------------------------------------------------
测试:
servere:
[root@servere puppet]# ls -R /var/lib/puppet/ssl/
[root@servere puppet]# puppet cert --list
[root@servere puppet]# puttet cert --sign "serverf.pod8.example.com"#对从机签名
[root@servere puppet]# ls -R /var/lib/puppet/ssl/#查看已签名的文件
********************************************
建第一个 Puppet 配置
[root@servere manifests]#  systemctl stop puppet
[root@servere puppet]# cd /etc/puppet/manifests/
[root@servere manifests]# ls
[root@servere manifests]# pwd
/etc/puppet/manifests
[root@servere manifests]# vim site.pp#全局配置—Site.pp 文件
[root@servere manifests]# cat site.pp
import 'nodes.pp'
[root@servere manifests]# vim nodes.pp#节点配置—nodes.pp 文件
[root@servere manifests]# cat nodes.pp
-----------------------
node 'serverf.pod8.example.com' {
include 'mymotd'
}
----------------------------
[root@servere manifests]# cd /etc/puppet/modules/#建立etc目录
[root@servere modules]# cd mymotd/files/
[root@servere files]# mkdir etc
[root@servere files]# cd etc/
[root@servere etc]# echo puppet test >motd#新建一个测试文件
[root@servere etc]# ls
motd
[root@servere etc]# pwd
/etc/puppet/modules/mymotd/files/etc


[root@servere manifests]# cd ..
[root@servere puppet]# ls
auth.conf  fileserver.conf  manifests  modules  puppet.conf
[root@servere puppet]# cd modules/
[root@servere modules]# ls
[root@servere modules]# pwd
/etc/puppet/modules
[root@servere modules]# mkdir mymotd#建立一个与模块同名的目录
[root@servere modules]# cd mymotd/#在目录下建立三个子目录
[root@servere mymotd]# mkdir manifests
[root@servere mymotd]# mkdir templates
[root@servere mymotd]# mkdir files
[root@servere mymotd]# ls
files  manifests  templates
[root@servere mymotd]# cd manifests/
[root@servere manifests]# ls
[root@servere manifests]# vim init.pp#在子目录manifests下新建一个init.pp文件
[root@servere manifests]# cat init.pp
class mymotd {
package {"setup":
ensure => "present",
}
file {"/etc/motd":
source => "puppet://servere.pod8.example.com/modules/mymotd/etc/motd",
owner => "root",
group => "root",
mode => 644,
require =>package["setup"],
}
}
[root@servere manifests]# setenforce 0#关闭防火墙和selinux
[root@servere manifests]# iptables -F
[root@servere manifests]# systemctl restart puppet#重启服务

serverf:
[root@serverf puppet]# iptables -F#从机上关闭防火墙和selinux然后重启服务
[root@serverf puppet]# setenforce 0
[root@serverf puppet]# systemctl restart puppet
[root@serverf puppet]# cat /etc/motd#查看文件是否同步成功

******************************************************
配置一个httpd的服务

[root@servere etc]# cd /etc/puppet/modules/
[root@servere modules]# mkdir myhttpd#建立一个与模块同名的文件
[root@servere modules]# cd myhttpd/#建立三个子目录
[root@servere myhttpd]# mkdir files
[root@servere myhttpd]# mkdir templates
[root@servere myhttpd]# mkdir manifests
[root@servere myhttpd]# cd manifests/
[root@servere manifests]# ls
[root@servere manifests]# vim init.pp#在子目录manifests下新建一个init.pp文件
[root@servere manifests]# cat init.pp
class myhttpd {
package{ "httpd":
ensure =>"present",
}
file { "/etc/httpd/conf/httpd.conf":
source => "puppet://servere.pod8.example.com/modules/myhttpd/etc/httpd/conf/httpd.conf",
require => package["httpd"],
notify =>service["httpd"];
"/etc/httpd/conf.d":
source =>"puppet://servere.pod8.example.com/modules/myhttpd/etc/httpd/conf.d",
recurse=>true,
force=>true,
purge=>true,
require=>package["httpd"],     
notify=>service["httpd"],
}
service {"httpd":
ensure=>running,
enable=>true,
}
}

[root@servere manifests]# cd ..
[root@servere myhttpd]# cd files/
[root@servere files]# ls
[root@servere files]# mkdir etc/httpd -p#建立httpd的目录
[root@servere files]# cd etc/httpd/
[root@servere httpd]# mkdir conf
[root@servere httpd]# mkdir conf.d

[root@servere httpd]#yum install httpd -y
#安装httpd复制配置文件到/etc/puppet/modules/myhttpd/files/etc/httpd下的子目录中
[root@servere httpd]# cd /etc/httpd/conf
conf/           conf.d/         conf.modules.d/
[root@servere httpd]# cd /etc/httpd/conf/
[root@servere conf]# ls
httpd.conf  magic
[root@servere conf]# cp httpd.conf /etc/puppet/modules/myhttpd/files/etc/httpd/conf
[root@servere conf]# cp /etc/httpd/conf.d/* /etc/puppet/modules/myhttpd/files/etc/httpd/conf.d/
[root@servere conf]# cd /etc/puppet/modules/myhttpd/files/etc/httpd/conf.d/
[root@servere conf.d]# ls
autoindex.conf  README  userdir.conf  welcome.conf
[root@servere conf.d]# vim www.ff.com.conf#新建虚拟主机
[root@servere conf.d]# cat www.ff.com.conf
<VirtualHost *:80>
ServerName www.ff.com
DocumentRoot /var/www/ff.com
</VirtualHost>
[root@servere conf.d]# cd /etc/puppet/manifests/
[root@servere manifests]# ls
nodes.pp  site.pp
[root@servere manifests]# vim nodes.pp #在nodes.pp文件中添加myhttpd
[root@servere manifests]# cat nodes.pp
node 'serverf.pod8.example.com' {
include 'mymotd','myhttpd'
}

[root@servere manifests]# systemctl restart puppetmaster

测试:文件是否同步
serverf:
[root@serverf puppet]# systemctl restart puppet#重启一下服务
[root@serverf puppet]# tail /var/log/messages -f#查看日志可以显示从机状态和排错
[root@serverf puppet]# cd /etc/httpd/conf
[root@serverf conf]# ls
httpd.conf  magic
[root@serverf conf]# cd ..
[root@serverf httpd]# cd conf.d/
[root@serverf conf.d]# ls
autoindex.conf  README  userdir.conf  welcome.conf  www.ff.com.conf
[root@serverf conf.d]# cat www.ff.com.conf
<VirtualHost *:80>
ServerName www.ff.com
DocumentRoot /var/www/ff.com
</VirtualHost>
**********************************************
测试网站www.ff.com是否能够访问
serverj
[root@serverj ~]# mkdir /var/nfs/www -p#在共享存储上建立共享目录
[root@serverj ~]# vim /etc/exports
[root@serverj www]# cat /etc/exports
/var/nfs/www172.25.8.0/24(rw,async)
[root@serverj ~]# cd /var/nfs/www
[root@serverj www]# mkdir ff.com#建立网站的根目录
[root@serverj www]# echo ff.com.f8 > ff.com/index.html
[root@serverj www]# systemctl start nfs#重启服务
-----------------------------
serverf:
[root@serverf conf.d]# mount 172.25.8.19:/var/nfs/www /var/www/#将共享存储挂载到网站根目录
[root@serverf conf.d]# ls /var/www/
ff.com
--------------------------
serverworkstation:
[root@workstation ~]# vim /etc/hosts#修改hosts文件
[root@workstation ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.254 classroom.example.com
172.25.254.254 content.example.com
172.25.8.9  workstation.pod8.example.com
172.25.8.10 www.lemp.com
172.25.8.10 www.jsp.com
172.25.8.15 www.ff.com
打开浏览器测试
firefox
http://www.ff.com

******************************
使用puppet工具快速配置一台和servere相同的Apache服务器serverg

serverg:
安装puppet的软件包
[root@serverg ~]# mount 172.25.254.250:/content /mnt
[root@serverg ~]# cd /mnt/ula/puppet/
[root@serverg puppet]# ls
facter-2.4.1-1.el7.x86_64.rpm            ruby-augeas-0.5.0-1.el7.x86_64.rpm
hiera-1.3.4-1.el7.noarch.rpm             rubygem-rgen-0.6.6-2.el7.noarch.rpm
puppet-3.6.2-3.el7.noarch.rpm            ruby-shadow-1.4.1-23.el7.x86_64.rpm
puppet-firewalld-0.1.3-1.el7.noarch.rpm  面向云的主机配置管理工具-puppet.pdf
puppet-server-3.6.2-3.el7.noarch.rpm
[root@serverg puppet]# yum -y localinstall facter-2.4.1-1.el7.x86_64.rpm ruby-augeas-0.5.0-1.el7.x86_64.rpm hiera-1.3.4-1.el7.noarch.rpm rubygem-rgen-0.6.6-2.el7.noarch.rpm puppet-3.6.2-3.el7.noarch.rpm ruby-shadow-1.4.1-23.el7.x86_64.rpm puppet-firewalld-0.1.3-1.el7.noarch.rpm
[root@serverg puppet]# vim /etc/hosts#修改hosts文件让一个ip指向servere
[root@serverg puppet]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.25.254.254 classroom classroom.example.com
172.25.254.254 content content.example.com
172.25.105.83  localhost.localdomain
172.25.8.16  serverg.pod8.example.com
172.25.8.14  servere.pod8.example.com

--------------------------------
servere:
[root@servere manifests]# vim /etc/hosts#修改servere的hosts文件让ip指向serverg
[root@servere manifests]# cat /etc/host
host.conf    hostname     hosts        hosts.allow  hosts.deny 
[root@servere manifests]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.25.254.254 classroom classroom.example.com
172.25.254.254 content content.example.com
172.25.8.14  servere.pod8.example.com
172.25.8.15  serverf.pod8.example.com
172.25.8.16  serverg.pod8.example.com
-------------------
serverg:

[root@serverg puppet]# vim /etc/puppet/puppet.conf #修改puppet配置文件
[main]
server = servere.pod8.example.com
[agent]
runinterval =5
---------------
servere:
[root@servere manifests]# puppet cert --list#查看签名请求
"serverg.pod8.example.com" (SHA256) 6C:F9:7C:F8:D0:0E:8D:E8:E5:33:16:29:2D:57:35:33:34:59:F9:EB:4A:FF:35:CC:CC:73:60:03:98:E7:B2:C8

[root@servere manifests]# puppet cert --sign "serverg.pod8.example.com"#对serverg进行签名
Notice: Signed certificate request for serverg.pod8.example.com
Notice: Removing file Puppet::SSL::CertificateRequest serverg.pod8.example.com at '/var/lib/puppet/ssl/ca/requests/serverg.pod8.example.com.pem'

[root@servere manifests]# ls -r /var/lib/puppet/ssl/ -R#查看已签名的主机
/var/lib/puppet/ssl/:
public_keys  private_keys  private  crl.pem  certs  certificate_requests  ca

/var/lib/puppet/ssl/public_keys:
servere.pod8.example.com.pem

/var/lib/puppet/ssl/private_keys:
servere.pod8.example.com.pem

/var/lib/puppet/ssl/private:

/var/lib/puppet/ssl/certs:
servere.pod8.example.com.pem  ca.pem

/var/lib/puppet/ssl/certificate_requests:

/var/lib/puppet/ssl/ca:
signed  requests  inventory.txt  ca_key.pem  ca_crl.pem
serial  private   ca_pub.pem     ca_crt.pem

/var/lib/puppet/ssl/ca/signed:#已经签名的主机
serverg.pod8.example.com.pem  servere.pod8.example.com.pem
serverf.pod8.example.com.pem

/var/lib/puppet/ssl/ca/requests:

/var/lib/puppet/ssl/ca/private:
ca.pass
[root@servere manifests]# pwd
/etc/puppet/manifests
[root@servere manifests]# vi nodes.pp 修改nodes.pp文件加入serverg
[root@servere manifests]# cat nodes.pp
node /server[fg]\.pod8\.example\.com/ {
include 'mymotd','myhttpd'
}

[root@servere manifests]# cd /etc/puppet/modules/myhttpd/files/etc/httpd/conf.d/
[root@servere conf.d]# ls
autoindex.conf  README  userdir.conf  welcome.conf  www.ff.com.conf
[root@servere conf.d]# cp -p www.ff.com.conf www.ff2.com.conf
[root@servere conf.d]# vim www.ff2.com.conf #在servere新建一个虚拟主机
[root@servere conf.d]# cat www.ff2.com.conf
<VirtualHost *:80>
ServerName www.ff2.com
DocumentRoot /var/www/ff2.com
</VirtualHost>
--------------------
serverj:
[root@serverj www]# pwd
/var/nfs/www
[root@serverj www]# mkdir ff2.com#在共享存储服务器上建立网站根目录
[root@serverj www]# echo ff2.com.f8 > ff2.com/index.html
-----------------------
serverg:
[root@serverg puppet]# cd /etc/puppet/modules/
[root@serverg modules]# ls
[root@serverg modules]# ls /etc/httpd/conf.d/#查看文件是否同步
autoindex.conf  userdir.conf  www.ff2.com.conf
README          welcome.conf  www.ff.com.conf
[root@serverg modules]# mount 172.25.8.19:/var/nfs/www /var/www#挂载共享存储
[root@serverg modules]# setenforce 0#关闭防火墙,否则无法访问到网站
-------------------------
测试:
serverworkstation:
[root@workstation ~]# vim /etc/hosts#测试前向修改hosts或者添加dns
[root@workstation ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.25.254.254 classroom.example.com
172.25.254.254 content.example.com
172.25.8.9  workstation.pod8.example.com
172.25.8.10 www.lemp.com
172.25.8.10 www.jsp.com
172.25.8.15 www.ff.com
172.25.8.16 www.ff2.com
--
firefox
http://www.ff2.com
-----------




问题与解答:
(1)网站无法访问。
a.检查防火墙和selinux以及服务是否打开
b.先检查配置文件是否写正确  puppet init.pp site.pp node.pp
[root@servere puppet]# vim /etc/puppet/puppet.conf #修改配置文件
[root@servere manifests]# vim /etc/puppet/manifests/init.pp
/etc/puppet/manifests
[root@servere manifests]# vim site.pp
[root@servere manifests]# cat site.pp
import 'nodes.pp'
[root@servere manifests]# vim nodes.pp
[root@servere manifests]# cat nodes.pp
-----------------------
node 'serverf.pod8.example.com' {
include 'mymotd'
}
----------------------------
0 0
原创粉丝点击