centos6.5环境自动化运维之puppet实现nginx反向代理功能及puppet安装配置详解
puppet是一种Linux、Unix、windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
puppet采用C/S星状的结构,所有的客户端和一个或几个服务器交互。每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步。每个puppet客户端每半小时(可以设置)连接一次服务器端, 下载最新的配置文件,并且严格按照配置文件来配置客户端. 配置完成以后,puppet客户端可以反馈给服务器端一个消息. 如果出错,也会给服务器端反馈一个消息.
环境准备:
master:192.168.8.39
agent1:192.168.8.44
agent2:192.168.8.45
需要添加对主机名的解析
# vim /etc/hosts
192.168.8.39 node2.chinasoft.com node2
192.168.8.44 node44.chinasoft.com node44
192.168.8.45 node45.chinasoft.com node45
将解析传送到两个节点中
# scp /etc/hosts 192.168.8.44:/etc/
# scp /etc/hosts 192.168.8.45:/etc/
一、服务端软件的安装
# yum install -y facter-1.7.3
# yum install -y puppet-2.7.25
# yum install puppet-server-2.7.25
默认的yum源中没有puppet软件,可以自定义puppet官方的yum源获取
# cd /etc/yum.repos.d
# vim puppet.repo
[puppet]
name=Puppet Project
baseurl=http://yum.puppetlabs.com/el/6/products/x86_64/
enabled=1
gpgcheck=0
cost=300
二、服务端master配置:
在主机上安装nginx(方便获取模板文件)
# yum install -y nginx
# cd /etc/puppet/modules/
# mkdir -pv nginx/{manifests,files,templates}
创建主类
# vim /etc/puppet/modules/nginx/manifests/init.pp
class nginx {
package {'nginx':
ensure => installed,
}
file {'nginx.conf':
ensure => file,
content => template('nginx/nginx.conf.erb'),
path => '/etc/nginx/nginx.conf',
require => Package['nginx'],
mode => '0644',
}
}
创建web继承类
# vim /etc/puppet/modules/nginx/manifests/web.pp
class nginx::web inherits nginx{
file {'nginx.web.conf':
ensure => file,
source => "puppet:///modules/nginx/nginx.web.conf",
path => '/etc/nginx/conf.d/default.conf',
require => Package['nginx'],
mode => '0644',
}
service {'nginx':
ensure => true,
enable => true,
restart => '/etc/init.d/nginx reload',
subscribe => File['nginx.conf','nginx.web.conf'],
}
}
创建反向代理rproxy.pp类
# vim /etc/puppet/modules/nginx/manifests/rproxy.pp
class nginx::rproxy inherits nginx{
file {'nginx.rproxy.conf':
ensure => file,
source => "puppet:///modules/nginx/nginx.rproxy.conf",
path => '/etc/nginx/conf.d/default.conf',
require => Package['nginx'],
mode => '0644',
}
service{'nginx':
ensure => true,
enable => true,
restart => '/etc/init.d/nginx reload',
subscribe => File['nginx.conf','nginx.rproxy.conf'],
}
}
也可以通过puppet调用的方式安装nginx
[root@node2 manifests]# puppet apply -d -v -e 'include nginx'
# vim local.pp
node 'node2.chinasoft.com'{
include nginx
}
# puppet apply local.pp
创建模板配置文件
# cp /etc/nginx/nginx.conf templates/
# vim /etc/puppet/modules/nginx/templates/nginx.conf
worker_processes <%= @processorcount %>;
# mv /etc/puppet/modules/nginx/templates/nginx.conf /etc/puppet/modules/nginx/templates/nginx.conf.erb
分别定义web定义nginx.web.conf和反向代理nginx.rproxy.conf
# cp /etc/nginx/conf.d/default.conf /etc/puppet/modules/nginx/files/nginx.rproxy.conf
# cp /etc/nginx/conf.d/default.conf /etc/puppet/modules/nginx/files/nginx.web.conf
# vim /etc/puppet/modules/nginx/files/nginx.rproxy.conf
显示master的过程
# puppet master --no-daemonize -d -v
将默认的配置导入
# puppet master --genconfig >> /etc/puppet/puppet.conf
启动主服务
# service puppetmaster start
三、客户端agent配置:
软件安装
# yum install facter-1.7.5-1.el6.x86_64.rpm puppet-2.7.25-1.el6.noarch.rpm -y
请求证书
[root@node44 ~]# puppet agent --server node2.chinasoft.com -d -v --noop --test
服务端:
[root@node2 manifests]# puppet cert list
"localhost.chinasoft.com" (6B:F4:26:12:92:BE:08:F8:90:49:9B:21:D7:25:89:86)
"node44.chinasoft.com" (E5:1D:A1:49:E4:D8:61:90:87:B5:DD:7B:0F:FD:EE:46)
颁发证书
[root@node2 manifests]# puppet cert sign node44.chinasoft.com
客户端再次执行请求
[root@node44 ~]# puppet agent --server node2.chinasoft.com -d -v --noop --test
在服务端定义node44节点,并导入
[root@node2 manifests]# cd /etc/puppet/manifests/
[root@node2 manifests]#vim node44.chinasoft.com.pp
node 'node44.chinasoft.com' {
include nginx::web
}
[root@node2 manifests]# vim site.pp
import "*.chinasoft.com.pp"
客户端请求
[root@node44 ~]# puppet agent --server node2.chinasoft.com -d -v --test
通过查看可以看到nginx已经顺利安装
四、添加新的客户端节点8.45
# yum install -y epel-release
# yum install facter-1.7.5-1.el6.x86_64.rpm puppet-2.7.25-1.el6.noarch.rpm -y
启动服务
# service puppet start
添加server
# vim /etc/puppet/puppet.conf
在master上颁发证书并定义node45的节点信息
[root@node2 nginx]# puppet cert list
"localhost.chinasoft.com" (6B:F4:26:12:92:BE:08:F8:90:49:9B:21:D7:25:89:86)
"node45.chinasoft.com" (20:4C:8D:C3:66:E2:1A:31:E3:40:25:C6:79:8B:BA:3A)
[root@node2 nginx]# puppet cert sign node45.chinasoft.com
notice: Signed certificate request for node45.chinasoft.com
notice: Removing file Puppet::SSL::CertificateRequest node45.chinasoft.com at '/var/lib/puppet/ssl/ca/requests/node45.chinasoft.com.pem'
[root@node2 ~]# vim /etc/puppet/manifests/node45.chinasoft.com.pp
node 'node45.chinasoft.com'{
include nginx::rproxy
}
客户端手动请求(默认可能需要30分钟master向agent推送)
#
[root@node45 ~]# puppet agent --server node2.chinasoft.com -d -v --test
常用核心组件使用定义举例:
1、软件包及服务管理
# cat nginx.pp
package {'nginx':
ensure => present,
name => nginx,
}
service {'nginx':
ensure => true,
name => nginx,
enable => true,
}
# puppet apply nginx.pp
2、文件属性
file {'/tmp/abc.txt':
ensure => present,
content => 'Hello puppet',
}
[root@node5 tmp]# ls
abc.txt nginx.pp test1.pp test2.pp test.pp
[root@node5 tmp]# cat abc.txt
Hello puppet
# vim test3.pp
file {'abc.txt':
ensure => present,
content => 'hello puppet',
path => '/tmp/abc2.txt',
}
file {'fstab.symlink':
ensure => present,
target => '/etc/fstab',
path => '/tmp/fstab.symlink',
}
3、exec命令
# vim test5.pp
exec {'echo command':
command => 'mktemp /tmp/tmp.XXXX',
path => '/bin:/sbin:/usr/bin:/usr/sbin',
}
4、依赖关系
# vim test6.pp
package {'nginx':
ensure => present,
name => nginx,
}
service {'nginx':
ensure => true,
name => nginx,
enable => true,
require => Package['nginx'],
}
# cat test7.pp
file {'/tmp/test4.txt':
ensure => file,
content => 'hello puppet',
}
exec {'monitor':
command => 'echo "/tmp/text4.txt changed" >> /tmp/monitor.txt',
subscribe => File['/tmp/test4.txt'],
path => '/bin:/sbin:/usr/bin:/usr/sbin',
}
添加refreshonly => true 仅当改变时:
file {'/tmp/test4.txt':
ensure => file,
content => 'hello puppet',
}
exec {'monitor':
command => 'echo "/tmp/text4.txt changed" >> /tmp/monitor.txt',
refreshonly => true,
subscribe => File['/tmp/test4.txt'],
path => '/bin:/sbin:/usr/bin:/usr/sbin',
}
5、对用户及组管理
生成密码:
# openssl passwd -1 -salt `openssl rand -hex 4`
# cat test8.pp
group {'testgrp':
ensure => present,
gid => 1001,
} ->
user {'testuser':
ensure => present,
gid => 1001,
uid => 1001,
home => '/home/test',
shell => '/bin/tcsh',
password => '$1$7de78495$Of24FLn9EsKbhxxZlZFmF.',
managehome => true,
}
# vim file.pp
file {'/tmp/file1.txt':
ensure => file,
content => 'hello jack',
notify => Notify['notice'],
}
notify {'notice': message => '/tmp/file1.txt has changed',}
变量名的使用
# vim package1.pp
$pkgname='httpd'
package{$pkgname:
ensure => present,
}
service {$pkgname:
ensure => true,
enable => true,
name => httpd,
require => Package[$pkgname],
}
系统变量的引用:
执行facter可以打印出系统的变量
# facter
# cat sysinfo.txt
CentOS
RedHat
4
[root@node5 tmp]# cat facter.pp
file {'/tmp/sysinfo.txt':
ensure => file,
content => " $operatingsystem \n $osfamily \n $processorcount \n $kernal"
}
# vim facter2.pp
$webserver = $operatingsystem ? {
/^(?i-mx:centos|fedora|redhat)/ => 'httpd',
/^(?i-mx:ubuntu|debian)/ => 'apache2',
}
$webprovider = $operatingsystem ? {
/^(?i-mx:centos|fedora|redhat)/ => 'yum',
/^(?i-mx:ubuntu|debian)/ => 'apt',
}
package {"$webserver":
ensure => present,
provider => $webprovider,
}
case语句方式
# vim facter3.pp
case $operatingsystem {
/^(?i-mx:centos|redhat|fedora)/: {package {'httpd' : ensure => present, provider => 'yum',}}
/^(?i-mx:ubuntu|debian)/: {package {'apache2' : ensure => present, provider => 'apt',}}
default: {notify {'notice': message => 'unknown system',}}
}
class类的使用
# cat class1.pp
class nginx {
package {'nginx':
ensure => present,
name => 'nginx',
}
service {'nginx':
ensure => true,
name => 'nginx',
require => Package['nginx'],
enable => true,
}
}
include nginx # 调用实例
定义类调用
# cat class2.pp
$webserver = $operatingsystem ? {
/^(?i-mx:centos|redhat|fedora)/ => 'httpd',
/^(?i-mx:ubuntu|debian)/ => 'apache2',
}
class httpd ($pkgname = 'apache2') {
package {"$pkgname":
ensure => present,
name => $pkgname,
}
service {"$pkgname" :
ensure => true,
enable => true,
require => Package["$pkgname"],
name => $pkgname,
}
}
class {'httpd':
pkgname => $webserver,
}
puppet高级功能之自动签发证书
1、自动签发证书
可以设置master自动签发所有的证书,我们只需要在/etc/puppet 目录下创建 autosign.conf 文件。(不需要修改 /etc/puppet/puppet.conf文件,因为我默认的autosign.conf 文件的位置没有修改)
服务端配置:
cat > /etc/puppet/autosign.conf <<EOF
*.chinasoft.com
EOF
这样就会对所有来自 magedu.com 的机器的请求,都自动签名
# cd /etc/puppet/manifests
添加node5主机的模板
# vim node5.chinasoft.com.pp
node 'node5.chinasoft.com' {
include nginx::web
}
重新加载让配置生效
# service puppetmaster reload
node5客户端:
添加对master主机的解析
192.168.8.41 node3.chinasoft.com node3
安装puppet客户端
# yum localinstall -y facter-1.7.5-1.el6.x86_64.rpm puppet-2.7.25-1.el6.noarch.rpm
执行请求
# puppet agent --server node2.chinasoft.com -v -d --test
可以看到nginx已经成功安装
可以通过在网站搜索别人已经配置好的软件安装模板
http://forge.puppetlabs.com
centos6.5环境自动化运维之puppet实现nginx反向代理功能及puppet安装配置详解的更多相关文章
- centos6.5环境disconf管理端安装配置详解
操作系统:centos6.5 x86_64 安装目录/data 1.安装nginx1.10.1 rpm -ivh http://nginx.org/packages/centos/6/noarch/R ...
- CentOS6.5安装配置详解
1. 环境要求 VMWare软件: CentOS6.5对应的iso镜像文件(位数对应个人计算机位数). 2. 安装步骤 打开VMWare,文件->新建虚拟机(以下几步默认跳过即可) 命名和选择安 ...
- CentOS6.5下的Nagios安装配置详解(图文)
最近因为,科研需要,接触上了Nagios,这里,我将安装笔记做个详解.为自己后续需要和博友们学习! VMware workstation 11 的下载 VMWare Workstation 11的安装 ...
- 【nginx运维基础(2)】Nginx的配置文件说明及虚拟主机配置示例
配置文件说明 #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为当前主机的CPU总核心数. worker_processes 8; #全局错误日志定义类型, ...
- 【Linux 运维】查看网络连接状态信息之netstat和ss命令详解
一.netstat 常用命令详解 通过man netstat可以查看netstat的帮助信息: netstat 命令:用于显示各种网络相关信息,如网络连接,路由表,接口状态,无效连接,组播成员 等等. ...
- ionic 开发APP 安装配置详解以及 cordova 环境配置详细过程
整个安装过程: 1. jdk 1.7.2 (http://www.oracle.com/technetwork/java/javase/downloads/index.html) 安装好之 ...
- Python自动化运维:技术与最佳实践 PDF高清完整版|网盘下载内附地址提取码|
内容简介: <Python自动化运维:技术与最佳实践>一书在中国运维领域将有“划时代”的重要意义:一方面,这是国内第一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的 ...
- puppet自动化运维
Puppet实现自动化运维 一.案例分析 1.案例概述: 随着服务器数量的增多,系统管理员任务量也逐渐增加,这时就需要简洁的.强大的框架来完成系统管理任务为实现这一目的,我们将引入一批工具,这批工具是 ...
- 企业级自动化运维工具---puppet详解
本文收录在Linux运维企业架构实战系列 1.认识puppet 1.1 引入 puppet是什么,咱们先不用专业的名词解释它,咱们先描述一些工作场景,看明白这些工作场景,自然会知道puppet是什么. ...
随机推荐
- bzoj3451 Normal
题意:点分治每次随机选重心,求期望复杂度. 发现一次点分治的复杂度就是点分树上每个节点的子树大小之和.(并没有发现......) 看这个. 注意这个写法有问题,随便来个菊花图就是n2了. 每一层点分治 ...
- 将文件转换为base64字符串,然后还原
package com.um.banks.xinlian.utils; import java.io.File; import java.io.FileInputStream; import java ...
- A1081. Rational Sum
Given N rational numbers in the form "numerator/denominator", you are supposed to calculat ...
- MySQL的1067错误解决方法
今天在学校的时候MySQL还运行的好好的,关机来公司后MySQL一直报错,错误为1067,网上找了好多办法,但是大都没效果,因此对这个错误做个总结: 打开你的安装目录下,查看my.ini文件中MySQ ...
- 清除ul li里面的浮动并让ul自适应高度的一个好办法
有时候会遇到ul li列表里面的东西会用到浮动,这个时候ul的高度就不会被撑开,这怎么办呢? 1)最笨的方法就是设置ul的高度,但这种方法很死板,高度不能自适应 2)有次我试着在ul里面加一个清除浮动 ...
- location的三种连接方式和区别
location.href是一个属性,要这样使用:location.href='http://www.example.com'而location.assign('http://www.example. ...
- 函数和常用模块【day04】:函数式编程(六)
本节内容 1.概述 2.介绍 3.定义 一.概述 每当提到函数式编程,很多人都以为就是我们经常写的函数.其实不然. 函数:是定义一段代码的执行过程 函数式编程:输入是确定的,输出也是确定的 二.介绍 ...
- JAVA记录-Servlet介绍
1.什么是Servlet Servlet是sun公司提供的一门用于开发动态web资源的技术.Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- JMS的P2P和PUB/SUB区别和应用场景介绍【转】
完全引用自: https://my.oschina.net/alexgaoyh/blog/338890 解释得非常棒. 1.P2P模型 在P2P模型中,有下列概念: 消息队列(Queue). 发送者 ...
- Java线程间和进程间通信
1 线程与线程间通信 1.1 基本概念以及线程与进程之间的区别联系 关于进程和线程,首先从定义上理解就有所不同: 进程是具有一定独立功能的程序.它是系统进行资源分配和调度的一个独立单位,重点在系统调度 ...