Puppet基于Master/Agent模式实现LNMP平台部署
前言
随着IT行业的迅猛发展,传统的运维方式靠大量人力比较吃力,运维人员面对日益增长的服务器和运维工作,不得不把很多重复的、繁琐的工作利用自动化处理。前期我们介绍了运维自动化工具ansible的简单应用,本期带来的是运维自动化神器puppet基于Master/Agent模式实现LNMP平台部署。
Puppet
简介
Puppet是基于ruby语言开发的一种Linux、Unix、Windows平台的集中配置管理系统,可以C/S模式或独立运行,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。
工作流程

①Agent向Master端发起认证请求
②Master端验证其合法性,允许其连接
③Agent将本机变量(主机名、内存大小、IP地址等)通过SSL连接发送给Master
④Master检测Agent的主机名,然后找到manifest对应的node配置,并对该部分内容进行解析。解析结果生成一个“伪代码”(catelog),并将其发给Agent
⑤Agent接收到“伪代码”,开始执行
⑥执行时判断有没有File文件,如果有,则向fileserver发起请求
⑦判断有没有配置Report,如果已配置,则把执行结果发送给服务器
⑧执行结束,检测系统状态
实现过程
实验拓扑

#系统环境:CentOS6.6
#各主机间可通过域名通信,基于hosts实现
#各主机时间已同步
Puppet Master配置
安装所需软件包
[root@node1 ~]# yum install puppet puppet-server -y
创建模块目录
[root@node1 ~]# cd /etc/puppet/modules/
[root@node1 modules]# mkdir nginx/{files,manifests} php/{files,manifests} mysql/{files,manifests} -pv
准备各服务配置文件
[root@node1 modules]# cp /root/files/nginx.conf nginx/files/
[root@node1 modules]# cp /root/files/www.conf php/files/
[root@node1 modules]# cp /root/files/my.cnf mysql/files/
创建各模块
[root@node1 modules]# vim nginx/manifests/init.pp
class nginx {
package{'nginx':
ensure => present,
name => nginx,
}
file{'nginx.conf':
ensure => file,
source => 'puppet:///modules/nginx/nginx.conf',
path => '/etc/nginx/nginx.conf',
require => Package['nginx'],
}
service{'nginx':
ensure => true,
enable => true,
subscribe => File['nginx.conf'],
}
}
[root@node1 modules]# vim php/manifests/init.pp
class php {
package{'php-fpm':
ensure => present,
name => php-fpm,
}
file{'www.conf':
ensure => file,
source => 'puppet:///modules/php/www.conf',
path => '/etc/php-fpm.d/www.conf',
require => Package['php-fpm'],
}
service{'php-fpm':
ensure => true,
enable => true,
subscribe => File['www.conf'],
}
}
[root@node1 modules]# vim mysql/manifests/init.pp
class mysql {
package{'mysql-server':
ensure => present,
name => 'mysql-server',
}
file{'my.cnf',:
ensure => file,
source => 'puppet:///modules/mysql/my.cnf',
path => '/etc/my.cnf',
require => Package['mysql-server'],
}
service{'mysqld':
ensure => true,
enable => true,
subscribe => File['my.cnf'],
}
}
[root@node1 modules]# cd ../manifests/
[root@node1 manifests]# mkdir server
[root@node1 manifests]# vim server/node3.pp
node 'node3.scholar.com' {
include mysql
}
[root@node1 manifests]# vim server/node4.pp
node 'node4.scholar.com' {
include nginx,php
}
[root@node1 manifests]# vim site.pp
import "server/*.pp"
以上资源详解
#package详解
ensure:程序包目标状态,{present(installed)|absent|purged|held|latest}
name:资源名称,即软件包名字,可省略,如果省略,将继承title的值
provide:软件包管理器,会自动识别
source:程序包文件路径
install_options:安装选项,最常用的是通过INATALLDIR来制定安装目录
#file详解
ensuce:目标状态,{present|absent|directory|file|link}
backup:通过filebacket资源来备份文件,值通常为filebucket资源的名称
content:文件内容,生成方式有三种(content,source,target),三者彼此互斥
source:通过制定的url下载文件至本地,格式:puppet:///modules/MODULE_NAME/file_name
target:为符号链接指定目标
links:文件为符号连接,{follow|manage}
path:文件路径,必须使用双引号
mode:定义权限,通常为8进制数字
owner: 定义文件的属主
group:定义文件的属组
force:强制执行删除文件、链接或目录,仅用于ensure为absent时
purge:清除指定目录中存在的,但未在资源中定义的文件
resurce:目录递归,{true|false|inf|remote}
replace:替换,本地存在的文件与资源中指定的文件内容不同时是否执行替换,默认为否
#service详解
ensure:服务目标状态,{ true(running)|false(stopped)}
enable:是否开机自动启动,{true|false}
name:服务名称,可以省略,如果省略,将继承title的值
path:服务脚本路径,默认为/etc/init.d/
start:是否启动服务
stop:是否关闭服务
restart:是否重启服务
status:判断服务是否运行
#特殊属性
require:需要依赖于某个资源
before:应该先执行本资源,在执行别的资源
notify: 将当前资源的变动信息通知给别的资源
subscribe:订阅某资源变动信息
-> :后资源需要依赖前资源
~> :前资源变动通知后资源调用
启动服务
首次启动puppet-server守护进程时,其会自动进行运行环境的初始化,例如创建一个本地CA及服务器端相关的证书和密钥等。初始化操作完成后,puppet就会监听指定的套接字并等待客户端的连接请求。默认情况下,其证书和密钥等文件位于/var/lib/puppet/ssl/目录中。
出于调试的目的,首次启动puppet服务进程可以以非守护进程方式进行,并让其输出详解信息以便于观察初始化过程。如下所示过程,其逐步展示了创建本地CA、作为puppet服务器的本地主机向CA申请证书、获得证书以及CA移出证书签署请求的过程等,而后启动服务进程并准备接受各agent的连接请求。为下面的命令额外使用–debug选项,还可以获得更为详细的输出信息。

如果上述的测试启动没有问题,可中止当前的启动,正式启动服务了
[root@node1 manifests]# service puppetmaster start
Starting puppetmaster: [ OK ]
[root@node1 manifests]# ss -tnlp | grep puppet
LISTEN 0 5 *:8140 *:* users:(("puppetmasterd",3186,5))
Puppet Agent配置
安装所需软件包
[root@node3 ~]# yum install puppet -y
指定puppet server
[root@node3 ~]# vim /etc/puppet/puppet.conf #也可手动命令指定
[agent]
server = node1.scholar.com
启动服务之前先来看一下各agent端所需软件是否安装
[root@node3 ~]# rpm -q mysql-server
package mysql-server is not installed
[root@node4 ~]# rpm -q ngnix
package ngnix is not installed
[root@node4 ~]# rpm -q php-fpm
package php-fpm is not installed
启动服务
puppet agent在首次启动时,会向为其指定的puppet server申请证书,并完成后续连接请求。同样的理由,出于测试的目的,接入当前puppet集群中的首个agent节点可以以非守护进程的方式进行,以观察其初始化过程

#所有agent端都执行以上系列操作
此时,在puppet服务器端使用puppet cert命令管理客户端的证书请求,其–list选项能够查看等待签署证书的客户端列表,而–sign选项可用于为指定指定节点签署证书,如果要一次性地为多个节点的证书申请进行签署可同时使用–all选项

正式启动服务
[root@node3 ~]# service puppet start
Starting puppet: [ OK ]
[root@node4 ~]# service puppet start
Starting puppet: [ OK ]
再次检查各agent端软件状态
[root@node3 ~]# rpm -q mysql-server
mysql-server-5.1.73-5.el6_6.x86_64
[root@node3 ~]# service mysqld status
mysqld (pid 4526) is running...
[root@node3 ~]# chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@node4 ~]# rpm -q nginx
nginx-1.0.15-11.el6.x86_64
[root@node4 ~]# service nginx status
nginx (pid 6678) is running...
[root@node4 ~]# chkconfig --list nginx
nginx 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@node4 ~]# rpm -q php-fpm
php-fpm-5.3.3-46.el6_6.x86_64
[root@node4 ~]# service php-fpm status
php-fpm (pid 6309) is running...
[root@node4 ~]# chkconfig --list php-fpm
php-fpm 0:off 1:off 2:on 3:on 4:on 5:on 6:off
各服务已按预设启动,Puppet基于Master/Agent模式实现LNMP平台部署成功完成
Puppet Kick
agent跟master默认30分钟通信一次,如果在这期间,某一服务出现bug或配置有误,如何实现紧急推送,尽量减少业务损失呢?下面简单说一下puppet kick功能的实现
Puppet Agent配置
[root@node3 ~]# vim /etc/puppet/puppet.conf
[agent]
listen=true
[root@node3 ~]# vim /etc/puppet/namespaceauth.conf
[puppetrunner]
allow *.scholar.com
[root@node3 ~]# vim /etc/puppet/auth.conf
path /run
method save
allow node1.scholar.com
# this one is not stricly necessary, but it has the merit
# to show the default policy which is deny everything else
path /
auth any
[root@node3 ~]# service puppet restart
Stopping puppet: [ OK ]
Starting puppet: [ OK ]
#所有agent都执行以上操作
Puppet Master推送
[root@node1 ~]# puppet kick -p 10 --host node3.scholar.com
Triggering node3.scholar.com
Getting status
status is success
node3.scholar.com finished with exit code 0
Finished
推送成功,puppet kick功能实现,至此,Puppet基于Master/Agent模式实现LNMP平台部署实验全部完成
The end
Puppet基本应用就先说到这里了,Puppet功能强大,从管理规模方面较之Ansible,Puppet还是略胜一筹的,以上只是牛刀小试,有兴趣的朋友可以深入研究。
微信扫一扫
关注该公众号
Puppet基于Master/Agent模式实现LNMP平台部署的更多相关文章
- puppet(5)-master/agent模式
master/agent模式的工作流程 agent每隔固定时长会向master端发送nodename(自己的节点名,节点名至关重要)和 facts ,并且向服务器端请求自己的catalog. mast ...
- LNMP平台部署
LNAP平台概述 百度百科 LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构. Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统.代表版本有 ...
- 自动化运维工具之Puppet master/agent模型、站点清单和puppet多环境设定
前文我们了解了puppe中模块的使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14086315.html:今天我来了解下puppet的master/age ...
- [hadoop][会装]HBase集群安装--基于hadoop ha模式
可以参考部署HBase系统(分布式部署) 和基于无HA模式的hadoop下部署相比,主要是修改hbase-site .xml文件,修改如下参数即可: <property> <name ...
- 部署puppet master/agent模型
自己画的一个简单的架构图 agent端每隔30分钟到master端请求与自己相关的catalog. 各节点时间要同步. 依赖DNS,各节点能通过主机名能解析. 1.同步时间 # yum install ...
- puppet master/agent
puppet master/agent 配置 安装 master: yum install puppet-server agent: yum install puppet 自动签名 puppet的ma ...
- LNMP平台搭建---Linux系统安装篇
在互联网网站开发领域,有一个名词,大家一定不陌生,那就是LAMP,经典的Web服务器环境,由Linux+Apache+MySQL+PHP组成,,后来,一个名叫Nginx的Web服务器开源出来了,因其更 ...
- Puppet nginx+passenger模式配置
Puppet nginx+passenger模式配置 一.简述:Puppet 运行在单台服务器上默认启动的是一个puppetmaster进程,当遇到client高并发的请求时,基于ruby的WEBRi ...
- LNMP平台搭建---PHP安装篇
在前面三篇中,我们安装了Linux系统.Web服务器Nginx.MySQL数据库服务器,这篇就来将搭建动态网站的最后一步:PHP安装. Nginx服务器只能响应静态资源请求,对于动态资源请求就不行了, ...
随机推荐
- 阿里云人脸比对API封装
这是根据封装是根据阿里云官方给的Demo进行修改的,当时是因为编写微信小程序云函数需要使用到阿里云人脸比对接口,才对其进行封装的. 记录下来,方便下次使用. 复制下来可以直接使用. 用到的依赖如下: ...
- c++ cpp和hpp
首先,我们可以将所有东西都放在一个.cpp文件内,编译器会将这个.cpp编译成.obj,即编译单元.一个程序可以由一个编译单元组成,也可以由多个编译单元组成.一个.cpp对应一个.obj,然后将所有的 ...
- Xgboost集成算法
集成算法思想: Xgboost基本原理: Xboost中是一个树(函数)接着一个树(函数)往里加,每加一个树都希望整体表达效果更好一些,即:目标函数逐步减小. 每加入一个函数,使目标函数逐渐减小,整体 ...
- AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署
一.前言 (Jenkins.Docker.Git/Svn组建一套简单的自动化发布流程) 文章中用到的相关服务器角色 角色 环境 功能 开发机 Win10.Docker(Linux OS) 编码.调试 ...
- centos7 install vim8
centos7 install vim8 Git and dependency Git: https://github.com/vim/vim # yum install -y perl-devel ...
- 502 bad gateway nginx
此方法可能仅对于我的问题有效 我在VMware虚拟机启动docker container nginx的,一开始启动nginx的contatiner,在浏览器是可以正常访问的,但次日重新访问时就报502 ...
- linux下vi修改文件用法
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后 ...
- NOIP考纲
首先来一张图,很直观(截止到2012年数据) 下面是收集的一些,我改了一下 红色加粗表示特别重要,必须掌握绿色加粗表示最好掌握,可能性不是很大,但是某些可以提高程序效率 高精度 a.加法 b.减法 c ...
- Java中的线程安全和非线程安全以及锁的几个知识点
1. 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用.不会出现数据不一致或者数据污染. 线程不安全就是不提供 ...
- 常用字符串匹配算法(brute force, kmp, sunday)
1. 暴力解法 // 暴力求解 int Idx(string S, string T){ // 返回第一个匹配元素的位置,若没有匹配的子串,则返回-1 int S_size = S.length(); ...

加载中