前言

随着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平台部署的更多相关文章

  1. puppet(5)-master/agent模式

    master/agent模式的工作流程 agent每隔固定时长会向master端发送nodename(自己的节点名,节点名至关重要)和 facts ,并且向服务器端请求自己的catalog. mast ...

  2. LNMP平台部署

    LNAP平台概述 百度百科 LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构. Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统.代表版本有 ...

  3. 自动化运维工具之Puppet master/agent模型、站点清单和puppet多环境设定

    前文我们了解了puppe中模块的使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14086315.html:今天我来了解下puppet的master/age ...

  4. [hadoop][会装]HBase集群安装--基于hadoop ha模式

    可以参考部署HBase系统(分布式部署) 和基于无HA模式的hadoop下部署相比,主要是修改hbase-site .xml文件,修改如下参数即可: <property> <name ...

  5. 部署puppet master/agent模型

    自己画的一个简单的架构图 agent端每隔30分钟到master端请求与自己相关的catalog. 各节点时间要同步. 依赖DNS,各节点能通过主机名能解析. 1.同步时间 # yum install ...

  6. puppet master/agent

    puppet master/agent 配置 安装 master: yum install puppet-server agent: yum install puppet 自动签名 puppet的ma ...

  7. LNMP平台搭建---Linux系统安装篇

    在互联网网站开发领域,有一个名词,大家一定不陌生,那就是LAMP,经典的Web服务器环境,由Linux+Apache+MySQL+PHP组成,,后来,一个名叫Nginx的Web服务器开源出来了,因其更 ...

  8. Puppet nginx+passenger模式配置

    Puppet nginx+passenger模式配置 一.简述:Puppet 运行在单台服务器上默认启动的是一个puppetmaster进程,当遇到client高并发的请求时,基于ruby的WEBRi ...

  9. LNMP平台搭建---PHP安装篇

    在前面三篇中,我们安装了Linux系统.Web服务器Nginx.MySQL数据库服务器,这篇就来将搭建动态网站的最后一步:PHP安装. Nginx服务器只能响应静态资源请求,对于动态资源请求就不行了, ...

随机推荐

  1. JavaSE-31 Java正则表达式

    概述 正则表达式是一个强大的字符串处理工具,可以实现对字符串的查找.提取.分割.替换等操作. String类的几个方法需要依赖正则表达式的支持. 方法 方法说明 boolean matches(Str ...

  2. 基于HLS(HTTP Live Streaming)的视频直播分析与实现

    转自:http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html HLS(HTTP Live Streaming)的分析: HTT ...

  3. sqlserver差异备份3117

    1.出现错误"3117" 2.完整备份/选项/不对数据库执行任何操作 3.数据库显示"正在还原" 4.差异备份/选项/回滚 5.数据库完整备份与差异备份成功

  4. python基础知识09-继承,多继承和魔术方法

    1.继承 class Father: def init(self,age,sex): self.age = age self.sex = sex class Son(Father): 类名后面写括号, ...

  5. STM32F407 串口通信实验 视频第27节 个人笔记

    前言 第26节也是串口,笔记链接在此:https://www.cnblogs.com/YuQiao0303/p/10019362.html github地址:https://github.com/Yu ...

  6. LR手动关联参数化问题总结

    所谓的关联就是把脚本中某些写死的代码(hard-coded)数据,转变成截取自服务器所送的.动态的.每次都不一样的数据. 一般情况下,比较聪明的服务器在每个浏览器第一次跟它要数据时,都会在数据中夹带一 ...

  7. python011 Python3 字典

    Python3 字典字典是另一种可变容器模型,且可存储任意类型对象.字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如 ...

  8. POJ3246-Balanced Lineup,好经典的题,做法和HDU-I hate it 一样~~

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K   Case Time Limit: 2000MS Description For ...

  9. 查看java进程中哪个线程在消耗系统资源

    1 top -p $pid -H  加上-H这个参数后,会列出有哪些线程.这样就可以看到哪个线程id最消耗系统资源了.看到的线程id是10进制的数字. 2 jstack $pid 可以打印出制定jav ...

  10. POJ 1486 Sorting Slides【二分图匹配】

    题目大意:有n张幻灯片和n个数字,幻灯片放置有重叠,每个数字隶属于一个幻灯片,现在问你能够确定多少数字一定属于某个幻灯片 思路:上次刷过二分图的必须点后这题思路就显然了 做一次二分匹配后将当前匹配的边 ...