puppet实现主从部署各类软件实战参考模型 node
实验要求: nginx
1.我将准备三个节点 node2 , node3 , node4 vim
2.咱们想让节点node3部署ntp,nginx ;节点node4部署ntp,memcached memcached
PS:这三个节点必需要能相互解析,而且时间要同步, 还要相互之间通讯无需输入密码 测试
上面条件准备好之后,接下就是安装 puppet的服务端/客户端节点(master/agent) ui
我这里用的是puppet-2.7版本 spa
节点node2 (master) 3d
[root@node2 2.7.25]# ls server
facter-1.7.5-1.el6.x86_64.rpm puppet-dashboard-1.2.23-1.el6.noarch.rpm blog
puppet-2.7.25-1.el6.noarch.rpm puppet-server-2.7.25-1.el6.noarch.rpm
[root@node2 2.7.25]# yum -y localinstall facter-1.7.5-1.el6.x86_64.rpm puppet-2.7.25-1.el6.noarch.rpm puppet-server-2.7.25-1.el6.noarch.rpm
ps:" facter-1.7.5-1.el6.x86_64.rpm" 是获取系统相关信息,"puppet-2.7.25-1.el6.noarch.rpm" 是puppet 的客户端的 ,"puppet-server-2.7.25-1.el6.noarch.rpm"是puppet的服务端
配置从节点配置文件,在/etc/puppet/puppet.conf 下的 [agent] 里边增长一行代码
server = node2.stu21.com
这样作的目的是是从的可以指向主的。
节点node3 (agent)
[root@node3 ~]# vim /etc/puppet/puppet.conf
节点node4 (agent)
[root@node4 ~]# vim /etc/puppet/puppet.conf
节点node2 (master)
咱们能够安装一下模型进行建立文件
[root@node2 ~]# cd /etc/puppet/modules/
[root@node2 modules]# mkdir -pv ./{ntp,nginx,memcached}/{manifests,files,templates}
接下来咱们要在模块里边编写三个类(ntp,nginx ,memcached)
[root@node2 modules]# ls
memcached nginx ntp
[root@node2 modules]# cd nginx/
[root@node2 nginx]# ls
files manifests templates
[root@node2 nginx]#
咱们要在nginx资源清单(manifests)目录下,建立init.pp文件,而且配置步骤以下:
[root@node2 nginx]# cd manifests/
[root@node2 manifests]# vim init.pp
class nginx {
package{'nginx':
ensure => latest,
}
service{'nginx':
enable => true,
ensure => running,
require =>Package['nginx'],
}
}
接下来我再来按照一样的思路配置memcached 模块
首先切换到memcached类目录下
[root@node2 modules]# ls
memcached nginx ntp
[root@node2 modules]# cd memcached/
[root@node2 memcached]# ls
files manifests templates
咱们要在memcached的资源清单(manifests)目录下,建立init.pp文件,而且配置步骤以下:
[root@node2 memcached]# cd manifests/
[root@node2 manifests]# vim init.pp
class memcached {
package{'memcached':
ensure => latest,
}
service{'memcached':
enable => true,
ensure => running,
require =>Package['memcached'],
}
}
还有一个ntp的类须要配置,思路同上
[root@node2 modules]# ls
memcached nginx ntp
[root@node2 modules]# cd ntp
[root@node2 ntp]# ls
files manifests templates
咱们要在ntp的资源清单(manifests)目录下,建立init.pp文件,而且配置步骤以下:
[root@node2 ntp]# cd manifests/
[root@node2 manifests]# ls
init.pp
[root@node2 manifests]# vim init.pp
class ntp {
}
class ntp::synctime inherits ntp {
cron{'synctime':
ensure => present,
minute => '*/5',
command => '/usr/sbin/ntpdate 172.16.0.1 &> /dev/null',
name => 'sync time from ntp server',
}
}
我打算节点node3 配置ntp与nginx , 节点node4 配置ntp与memcached
这样,咱们须要主服务与从服务链接起来,那么站点清单就是咱们设置的关键:
[root@node2 manifests]# pwd
/etc/puppet/manifests
[root@node2 manifests]# vim nginx.pp
node 'node3.stu21.com' {
include ntp::synctime
include nginx
}
[root@node2 manifests]# vim memcached.pp
node 'node4.stu21.com' {
include ntp::synctime
include memcached
}
接下来,我将配置站点清单 /etc/puppet/manifests/site.pp
[root@node2 ~]# cd /etc/puppet/
[root@node2 puppet]# ls
auth.conf fileserver.conf manifests modules puppet.conf
[root@node2 puppet]# cd manifests/
[root@node2 manifests]# vim site.pp
import "nginx.pp"
import "memcached.pp"
接下来咱们就来测试阶段:
主节点上,让它运行在前台上
[root@node2 ~]# puppet master -d -v --no-daemonize
从节点上
[root@node3 ~]# puppet agent -d -v --no-daemonize
[root@node4 ~]# puppet agent -d -v --no-daemonize
实验心得:
一直困惑个人事若是在站点清单的 sit.pp文件里 设置
import "*.pp"
而后测试,老是出现
出现这样的缘由是由于我在 /etc/puppet/manifests/ 目录 建立啦 memcached.pp ,nginx.pp site.pp 因此出错提示是咱们的import "*.pp"也把本身包含进去啦
[root@node2 manifests]# pwd
/etc/puppet/manifests
如若想要 import "*.pp" ,解决办法是 在 /etc/puppet/manifests/ 建立任意一个目录,我这里建立 1 ,再把memcached.pp ,nginx.pp 移到 1 目录下
[root@node2 manifests]# ls
1 site.pp
[root@node2 manifests]# cd 1
[root@node2 1]# ls
memcached.pp nginx.pp
而site.pp只须要下面设置从 1 目录下读取 *.pp
[root@node2 manifests]# cat site.pp
import "1/*.pp"