puppet实现主从部署各种软件实战参考模型
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"
puppet实现主从部署各种软件实战参考模型的更多相关文章
- 网易OpenStack部署运维实战
OpenStack自2010年项目成立以来,已经有超过200个公司加入了 OpenStack 项目,目前参与 OpenStack 项目的开发人员有 17,000+,而且这些数字还在增加,作为一个开源的 ...
- Puppet安装及部署
本篇博客主要介绍Puppet的安装部署,后续会更新其他相关内容 一.简介 二.环境介绍 三.安装Puppet 四.配置Puppet-dashboard 五.配置Puppet Kick 一.简介 Pup ...
- AMQ学习笔记 - 14. 实践方案:基于ZooKeeper + ActiveMQ + replicatedLevelDB的主从部署
概述 基于ZooKeeper + ActiveMQ + replicatedLevelDB,在Windows平台的主从部署方案. 主从部署可以提供数据备份.容错[1]的功能,但是不能提供负载均衡的功能 ...
- 部署Ambari Server实战案例
部署Ambari Server实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备三台虚拟机(需要自行安装jdk环境) 1>.角色分配 NameNode节点: h ...
- Redis主从 部署和配置
目录 一.主从简介 主从介绍 主从原理 二.主从部署 环境介绍 主从配置 临时主从 三.主从测试 一.主从简介 主从介绍 Redis都是主节点.每个从节点只能有一个主节点,而主节点可以同时具有多个从节 ...
- AD域 组策略部署U软件
1.首先把需要部署的软件放到活动目录共享文件夹中.(只支持MSI格式的软件) 2.打开组策略管理工具. 3.选择域名右键,创建GPO. 4.在弹出的新建GPO窗口中,输入策略名称. 5.在新创建的策略 ...
- Redis 主从部署
Redis 主从部署 http://www.xuchanggang.cn/archives/978.html
- SQLServer 2008R2主从部署实战
说明: 由于临时接到做OA的主从环境,基于Windows 200R2 SQLServer2008 R2,由于搜索的资料都不完整,好多重要之处有遗漏,亲自动手做了好几次,填完了坑,整理以备忘记与分享,如 ...
- Jenkins部署Python项目实战
一.背景 我们工作中常用Jenkins部署Java代码,因其灵活的插件特性,例如jdk,maven,ant等使得java项目编译后上线部署一气呵成,同样对于脚本语言类型如Python上线部署,利用Je ...
随机推荐
- Python进阶08 异常处理
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 本文特别感谢kylinfish的纠正,相关讨论见留言区. 异常处理 在项目开发中, ...
- winform DataGridView控件判断滚动条是否滚动到当前已加载的数据行底部 z
http://www.zuowenjun.cn/post/2015/05/20/162.html 判断 DataGridView控件滚动条是否滚动到当前已加载的数据行底部,其实方法很简单,就是为Dat ...
- JAVA中继承时方法的重载(overload)与重写/覆写(override)
JAVA继承时方法的重载(overload)与重写/覆写(override) 重载-Override 函数的方法参数个数或类型不一致,称为方法的重载. 从含义上说,只要求参数的个数或参数的类型不一致就 ...
- type和role属性有什么区别呢
type是规定标签的类型,比如<input />标签中使用type="button"就是代表一个按钮 使用type="text" 就是一个文本框,t ...
- 去掉 input type="number" 右边图标
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Linux(Ubuntu)下MySQL的安装与配置
转自:http://www.2cto.com/database/201401/273423.html 在Linux下MySQL的安装,我一直觉得挺麻烦的,因为之前安装时就是由于复杂的配置导致有点晕.今 ...
- EXT dateRange
VTYPES: Ext.apply(Ext.form.VTypes, { daterange: function (val, field) { var date = field.parseDate(v ...
- Linux查看物理CPU个数、核数、逻辑CPU个数(转载)
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数cat /proc/cpuinfo| g ...
- Redis多机功能介绍
Redis多机功能目的:以单台Redis服务器过渡到多台Redis服务器 Redis单机在生产环境中存在的问题 1.内存容量不足 Redis使用内存来存书数据库中的数据,但是对于一台机器来说,硬件的内 ...
- jdk集合常用方法分析之HashSet和TreeSet
HashSet常用方法介绍 public boolean add(E e) public boolean isEmpty() void clear() public Iterator<E> ...