如何使用 Example42 的 Puppet 模块
2012年05月4日 | 标签: puppet, puppet module | 作者:vpsee
现在我们差不多移植了100多台服务器到虚拟机,中间合并了很多功能类似的服务器(历史遗留问题)到同一虚拟机,并且整个配置过程完全用 Puppet 代码化,也就是说有一天我们实验室机房遭遇物理毁灭(刚看完 Battleship,有点激动~),只要再给我们合适的硬件设备(异地有备份数据)我们应该能在6小时内恢复整个基础设施(OS, DNS, DHCP, Provision, Firewall, Squid, Web, Database, LDAP, Email, VPN, Kerberos, NFS, HPC, Cloud, Monitor, Backup, …)。自从 Puppet/Chef 之类的自动化配置工具流行以后,现在甚至有了一个新职位叫做 DevOps.
安装好 Puppet 后,就可以开始自己写配置代码了,当然也可以在网上找到别人的配置代码直接拿过来用,更妙的是一些通用的 Puppet 配置代码,比如配置一台 Nginx/PHP/MySQL、配置 NFS、配置 DHCP、配置 DNS、配置 OpenNebula 等等已经有人写成模块了,直接拷过来就可以用了。Example42 就是这样的开源 Puppet 模块大集合,包含了众多常用的服务器配置。
首先去 Example42 下载 Puppet 模块代码:
$ git clone http://github.com/example42/puppet-modules.git
看看 Example42 包含了哪些模块吧,几乎常用的都有,不用自己亲自去写配置:
$ cd puppet-modules/ $ ls DOCS example42 mysql puppi synbak Example42-tools exim nagios rails sysctl LICENSE firewall network redis sysklogd README.rdoc foo nfs repo syslog-ng Rakefile foreman nginx resolver tftp activemq git nrpe rootmail timezone apache haproxy ntp rpmbuild tomcat apt hardening openldap rsync trac autofs hosts openntpd rsyslog users backup iptables openssh samba vagrant bind jboss openvpn sarg varnish clamav jenkins oracle selinux virtualbox cobbler lighttpd pam sendmail vmware collectd link php snmpd vsftpd common logrotate phpsyslogng spamassassin wordpress concat lsb portmap splunk xinetd controltier mailscanner postfix sqlgrey yum cron mailx postgresql squid zip dashboard mcollective powerdns squirrelmail dhcpd monit psad ssh dovecot monitor psick ssmtp drupal munin puppet stdlib42
把上面的 Example42 代码移到 /etc/puppet 目录,然后修改 Puppet 服务器的配置,加上 puppet-modules 模块路径,别忘了重启 puppetmaster 服务:
# mv puppet-modules /etc/puppet # vi /etc/puppet/puppet.conf ... [master] modulepath = /etc/puppet/puppet-modules # /etc/init.d/puppetmaster
写个配置文件测试一下,自动配置 PHP + Apache + MySQL:
# vi /etc/puppet/manifests/node.pp node 'web.vpsee.com' { include apache include php include php::pear include php::apc php::module { mysql: } php::module { curl: } php::module { gd: } php::module { idn: } php::module { imagick: } php::module { imap: } php::module { mcrypt: } php::module { ming: } php::module { ps: } php::module { pspell: } php::module { recode: } php::module { snmp: } php::module { tidy: } php::module { xmlrpc: } php::module { xsl: } php::module { ldap: } include mysql }
在要配置的机器上执行下面一条命令就自动装上 Apache/PHP/MySQL 了,再不用自己手动去安装配置了:
# puppet agent --test --server=master.vpsee.com
您這分享太牛了,感謝。
非常不错哦。Puppet自动化部署维护非常不错。
模块目录中的apache怎么是空的。怎么让client重新连接master?
@ooopiece
服务器端 puppet cert clean 以后客户端重新连接。
谢谢回复,我正在做这个实验,有几个问题,自动安装Apache/PHP/MySQL是用什么方式装的,yum还是编译?我在执行puppet agent –test –server=master.vpsee.com时,出现
“err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find class php::apc for client.vpsee.com at /etc/puppet/manifests/node.pp:6 on node client.vpsee.com”我试着把这行删了,再执行,提示php-mcrypt之类的一些找不到。
再次感谢!
最近在折腾openstack,想请教VPSEE大牛问题:
硬件环境:1 * Controller/Compute node(4 cores / 4GB memory) + 1 Compute node( 16cores /12GB memory)
软件环境ok,创建多个m1.large类型instance都ok(m1.large: Memory: 8192MB, VCPUS: 4, Storage: 80GB, FlavorID: 4, Swap: 0MB, RXTX Quota: 0GB, RXTX Cap: 0MB)。
而只创建一个m1.xlarge的instance一直pending状态,是什么原因啊?(m1.xlarge: Memory: 16384MB, VCPUS: 8, Storage: 160GB, FlavorID: 5, Swap: 0MB, RXTX Quota: 0GB, RXTX Cap: 0MB)
Openstack能实现将多台server合并成一台super server吗?公司业务需要这种模型。
many thanks!
请教,是用什么管理虚拟机?ganeti ? openstack ? 还是其他?
@ooopiece
采用 yum 方式。error 提示是说,没找到相关文件,检查一下文件名字和类的名字是否都正确,是否忘记在 site.pp 里面包含这个 web.vpsee.com 等等。
@newbie
penging 原因很多,要看日志。
openstack 不适合这样用,你可以考虑集群的模式。
@ebiss
主要是 openstack 和 opennebula,还有 vmware.
请教,网站曾介绍过ganeti,没有用的原因是什么?
@ebiss
ganeti 生态环境没有 openstack 和 opennebula 大,貌似像个人项目,而且 ganeti 只适合40台以下的机器。
thanks VPSEE!
已经找到原因,超出node memory容量限制,openstack基于VM,VM不可能超过compute node的能力。
这里还有更多的puppet模块:http://forge.puppetlabs.com…
最新最潮的技术都在这里学习到了,谢谢
err: /Stage[main]//Node[client.wwgp.com]/Php::Module[php-fpm]/Package[PhpModule_php-fpm]/ensure: change from absent to present failed: Execution of ‘/usr/bin/yum -d 0 -e 0 -y install php-fpm’ returned 1: Error: Nothing to do
err: /Stage[main]//Node[client.wwgp.com]/Php::Module[php-xsl]/Package[PhpModule_php-xsl]/ensure: change from absent to present failed: Execution of ‘/usr/bin/yum -d 0 -e 0 -y install php-xsl’ returned 1: Error: Nothing to do
err: /Stage[main]//Node[client.wwgp.com]/Php::Module[php-pspell]/Package[PhpModule_php-pspell]/ensure: change from absent to present failed: Execution of ‘/usr/bin/yum -d 0 -e 0 -y install phpphp-pspell’ returned 1: Error: Nothing to do
err: /Stage[main]//Node[client.wwgp.com]/Php::Module[php-recode]/Package[PhpModule_php-recode]/ensure: change from absent to present failed: Execution of ‘/usr/bin/yum -d 0 -e 0 -y install php-recode’ returned 1: Error: Nothing to do
err: /Stage[main]//Node[client.wwgp.com]/Php::Module[php-mcrypt]/Package[PhpModule_php-mcrypt]/ensure: change from absent to present failed: Execution of ‘/usr/bin/yum -d 0 -e 0 -y install php-mcrypt’ returned 1: Error: Nothing to do
err: /Stage[main]//Node[client.wwgp.com]/Php::Module[php-ps]/Package[PhpModule_php-ps]/ensure: change from absent to present failed: Execution of ‘/usr/bin/yum -d 0 -e 0 -y install php-ps’ returned 1: Error: Nothing to do
我按照你的做,为什么php需要支持的模块都装报错
# [*module_prefix*]
# If package name prefix isn’t standard.
#
# == Examples
# php::module { ‘gd’: }
#
# php::module { ‘gd’:
# ensure => absent,
# }
#
# This will install php-apc on debian instead of php5-apc
#
# php::module { ‘apc’:
# module_prefix => “php-“,
}
#
#
define php::module (
$version = $php::params::version,
$service_autorestart = $php::params::service_autorestart,
$service = $php::params::service,
$module_prefix = $php::params::module_prefix,
$absent = $php::params::absent
) {
include php
if $absent {
$real_version = “absent”
} else {
$real_version = $version
}
$manage_service_autorestart = $service_autorestart ? {
true => “Service[$service]”,
false => undef,
}
$real_install_package = “${module_prefix}${name}”
package { “PhpModule_${name}”:
ensure => $version,
name => $real_install_package,
notify => $manage_service_autorestart,
require => Package[‘php’],
}
}
我的node.pp没有 include php::apc
这个我定义个class 还想没有生效,默认是注释的, 这里应该怎么改
@vpsee
没有考虑用cloudstack来管理vm吗?
@alife
cloudstack 简单好用,界面也华丽,貌似社区热度不够。
example 24 下载的,里面很多目录里面是空的,不知道咋回事
你好,如何在site.pp里面引入node.pp呢,并令其生效呢?
@photoshop_wu
在 site.pp 里 import “node” 即可。
很多目录都是空的,不能使用,郁闷
你好!按照文章的配置,在服务器上配置了site.pp 在客户端执行时,可以生成helloworld.txt文件,但在配置完node.pp,在客户端执行时,没什么响应只有一段提示
[root@web ~]# puppet agent –test –server=master.vpsee.com
info: Caching catalog for web.vpsee.com
info: Applying configuration version ‘1369930441’
notice: Finished catalog run in 0.02 seconds
不知道怎么回事?
include apache, 如何移除掉这module呢,找了很长时间都不知道怎样移除整个module以及它的配置文件盒依赖的module
按照文章说明配置,没有任何操作只出现如下提示,请问为什么会这样
[root@client3 ~]# puppet agent –test –server=master.vpsee.com
info: Caching catalog for client3.vpsee.com
info: Applying configuration version ‘1381309216’
notice: Finished catalog run in 0.02 seconds
[root@client3 ~]#
[root@client3 ~]#
你好 根据你的这个提示 我在客户端上进行操作时,出现错误提示信息:
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find class apache for c.ilanni.com on node c.ilanni.com
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run