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配置

安装所需软件包

[[email protected] ~]# yum install puppet puppet-server -y

创建模块目录

[[email protected] ~]# cd /etc/puppet/modules/
[[email protected] modules]# mkdir nginx/{files,manifests} php/{files,manifests} mysql/{files,manifests} -pv

准备各服务配置文件

[[email protected] modules]# cp /root/files/nginx.conf nginx/files/
[[email protected] modules]# cp /root/files/www.conf php/files/
[[email protected] modules]# cp /root/files/my.cnf mysql/files/

创建各模块

[[email protected] 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‘],
    }
}

[[email protected] 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‘],
    }
}

[[email protected] 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‘],
    }
}

[[email protected] modules]# cd ../manifests/
[[email protected] manifests]# mkdir server
[[email protected] manifests]# vim server/node3.pp

node ‘node3.scholar.com‘ {
  include mysql
}

[[email protected] manifests]# vim server/node4.pp

node ‘node4.scholar.com‘ {
  include nginx,php
}

[[email protected] 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选项,还可以获得更为详细的输出信息。

如果上述的测试启动没有问题,可中止当前的启动,正式启动服务了

[[email protected] manifests]# service puppetmaster start
Starting puppetmaster:                                     [  OK  ]
[[email protected] manifests]# ss -tnlp | grep puppet
LISTEN     0      5              *:8140         *:*      users:(("puppetmasterd",3186,5))

Puppet Agent配置

安装所需软件包

[[email protected] ~]# yum install puppet -y

指定puppet server

[[email protected] ~]# vim /etc/puppet/puppet.conf   #也可手动命令指定

[agent]

server = node1.scholar.com

启动服务之前先来看一下各agent端所需软件是否安装

[[email protected] ~]# rpm -q mysql-server
package mysql-server is not installed
[[email protected] ~]# rpm -q ngnix
package ngnix is not installed
[[email protected] ~]# rpm -q php-fpm
package php-fpm is not installed

启动服务

puppet agent在首次启动时,会向为其指定的puppet server申请证书,并完成后续连接请求。同样的理由,出于测试的目的,接入当前puppet集群中的首个agent节点可以以非守护进程的方式进行,以观察其初始化过程

#所有agent端都执行以上系列操作

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

正式启动服务

[[email protected] ~]# service puppet start
Starting puppet:                                           [  OK  ]
[[email protected] ~]# service puppet start
Starting puppet:                                           [  OK  ]

再次检查各agent端软件状态

[[email protected] ~]# rpm -q mysql-server
mysql-server-5.1.73-5.el6_6.x86_64
[[email protected] ~]# service mysqld status
mysqld (pid  4526) is running...
[[email protected] ~]# chkconfig --list mysqld
mysqld         	0:off	1:off	2:on	3:on	4:on	5:on	6:off
[[email protected] ~]# rpm -q nginx 
nginx-1.0.15-11.el6.x86_64
[[email protected] ~]# service nginx status
nginx (pid  6678) is running...
[[email protected] ~]# chkconfig --list nginx
nginx          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
[[email protected] ~]# rpm -q php-fpm
php-fpm-5.3.3-46.el6_6.x86_64
[[email protected] ~]# service php-fpm status
php-fpm (pid  6309) is running...
[[email protected] ~]# 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配置

[[email protected] ~]# vim /etc/puppet/puppet.conf 

[agent]

listen=true

[[email protected] ~]# vim /etc/puppet/namespaceauth.conf

[puppetrunner]
allow *.scholar.com

[[email protected] ~]# 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

[[email protected] ~]# service puppet restart
Stopping puppet:                                           [  OK  ]
Starting puppet:                                           [  OK  ]

#所有agent都执行以上操作

Puppet Master推送

[[email protected] ~]# 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还是略胜一筹的,以上只是牛刀小试,有兴趣的朋友可以深入研究,部署过程中遇到问题可留言交流。以上仅为个人学习整理,如有错漏,大神勿喷~~~

时间: 2024-10-14 04:30:50

Puppet基于Master/Agent模式实现LNMP平台部署的相关文章

一步一步学会puppet(四)--master/agent模型

这篇博文主要介绍puppet在实际生产环境下的master/agent模型的使用: =================================================================== 1 原理介绍 1.1 原理图 1.2 详细说明 2 配置实例 2.0 准备 2.1 master配置 2.2 agent配置 2.3 master签署证书 2.4 agent一次完整的同步案例 ===========================================

puppet之master/agent模型详解

puppet的master-agent模型原理 agent需要发送node name 以及各facts 到master端,所以需要占据不小的带宽 master端在收到agent请求后首先判断是哪个节点,判断完成之后去找匹配当前node的定义,找到后对比客户端发送的时候生成的catalog,然后将catalog发送给agent master一定要去判定获取应该执行哪些内容,假如从site.pp中获取include定义大概需要三个类的话,因此master必须到它的对应的模块中,(只要类是存在的),m

LNMP平台部署及应用

LAMP平台应该是目前应用最为广泛的网站服务器架构,但随着Nginx在企业中的使用越来越多,LNMP(或LEMP)架构也受到越来越多Linux系统工程师的青睐,其中"E"来自于Nginx的发音[engine x] 构建LNMP网站平台 构建LNMP平台需要Linux服务器.Nginx服务器.MySQL数据库.PHP解析环境,具体方法和LAMP差不多,Nginx服务器的搭建方法上篇博客已经介绍了,下面以安装好的Nginx服务器为基础,搭建LNMP平台 1. 安装MySQL数据库 MySQ

puppet的master/aget环境部署及案例展示

目录 1.puppet的master/agent部署 2.puppet的kick功能实现 3.master/agent工作案例 4.总结 在前一博文(http://zhaochj.blog.51cto.com/368705/1661360)中介绍了puppet的一些基础知识,并且所有的测试代码都是直接运行manifest的方式来运行,这是puppet的standalone的工作方式,但在生产环境下往往是让puppet工作在master/agent的工作模式,所以此博文以实现部署一个master/

L14.1 puppert master,agent 应用(1)

puppert master,agent 应用 1,puppet C/S架构原理. puppet是基于c/s架构的.服务器端保存着所有对客户端服务器的配置代码,在puppet里面叫做manifest. 客户端下载manifest之后,可以根据manifest对服务器进行配置,例如软件包管理,用户管理和文件管理等等. 如上图所示,puppet的工作流程如下:(1)客户端puppetd调用facter,facter探测出主机的一些变量,例如主机名,内存大小,ip地址等.pupppetd 把这些信息通

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

在互联网网站开发领域,有一个名词,大家一定不陌生,那就是LAMP,经典的Web服务器环境,由Linux+Apache+MySQL+PHP组成,,后来,一个名叫Nginx的Web服务器开源出来了,因其更高的并发性,系统资源利用率更高,在市场上的占有率也逐步提升,在Netcraft网站上看到的数据,在1995年到2015年间,每种服务器的使用趋势: 可以看到,Apache依然是最受欢迎的Web服务器,Nginx属于后起之秀,很快占有市场.Nginx的几大特点如下: 1. 对静态资源的高速并发缓存和访

中国东信基于Kubernetes的容器云PaaS平台

"中国-东盟信息港"是按照国家"一带一路"倡议总体布局要求.建设更为紧密的中国-东盟命运共同体.21世纪海上丝绸之路的一个信息平台:http://www.caih.com.东信基于Rancher Kubernetes架构和建设了他们的容器云PaaS平台,在云原生.容器化.微服务.CICD.DevOps等方面的都有了相关实践和应用. 6月28日,负责中国东信容器云PaaS 平台的研发和建设.中国-东盟信息港的研发总监王志雄出席了Rancher Labs举办的Conta

基于运营架构的办公流程能力平台

基于运营架构的办公流程能力平台服务于大.中型企事业单位,为企业业务流程重组提供信息化解决方案和支撑. 办公流程管理以流程化管理为核心,此核心包括:流程建模及其生命周期管理.流程执行管理及其生命周期管理.流程监控与分析三部分.围绕流程管理的生命周期展开,他能体现出管理的能力.效益.效率. 流程建模及其生命周期管理包括:业务需求.开发建设.上线(并形成流程目录).变更.下线.最终销毁全生命周期管理.相关的业务功能有:流程快速开发和流程建模.流程后评估: 流程执行及其生命周期管理包括:启动流程实例.流

【转载】基于Docker的CaaS容器云平台架构设计及市场分析

[转自]http://www.cnblogs.com/darkprince/p/5115739.html 基于Docker的CaaS容器云平台架构设计及市场分析 ---转载请注明出处,多谢!--- 1 项目背景---概述: “在移动互联网时代,企业需要寻找新的软件交付流程和IT架构,从而实现架构平台化,交付持续化,业务服务化. 容器将成为新一代应用的标准交付件,容器云将帮助企业用户构建研发流程和云平台基础设施.缩短应用向云端交付的周期,降低运营门槛.加速企业向互联网技术和业务的双转型. 容器云将