puppet实现主从部署各种软件实战参考模型

 

实验要求:

 

 

1.我将准备三个节点 node2 , node3 , node4

2.我们想让节点node3部署ntp,nginx ;节点node4部署ntp,memcached

 

PS:这三个节点必须要能相互解析,并且时间要同步, 还要相互之间通信无需输入密码

 

 

上面条件准备好以后,接下就是安装 puppet的服务端/客户端节点(master/agent)

我这里用的是puppet-2.7版本

 

 

节点node2 (master)

 

[root@node2 2.7.25]# ls

facter-1.7.5-1.el6.x86_64.rpm puppet-dashboard-1.2.23-1.el6.noarch.rpm

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"

 

 

 

 

posted on 2015-02-03 20:59  明远子  阅读(402)  评论(0编辑  收藏  举报